day14_oracle数据库备份

SQL> shutdown immediate
SQL> startup mount

查看归档模式
SQL> archive log list

设置为归档模式
SQL> alter database archivelog;
SQL> alter database open;

查看归档进程
[oracle@sq ~]$ ps -ef |grep arc

查看归档路径
SQL> show parameter DB_RECOVERY_FILE_DEST

SQL> alter system switch logfile;
(切换日志时会产生归档文件,进入归档路径下查看)

--------------------------------------------
更改归档日志目录
SQL> alter system set log_archive_dest_1='location=/home/oracle/archivelog01' scope=both;

SQL> alter system set log_archive_dest_2='location=/home/oracle/archivelog02' scope=both;

系统cpu ,i/o 资源充足情况下,增加归档进程提高性能.
查看参数 (一共有10个进程,看情况自行增加)
SQL> show parameter archive

--------------------------------------------
归档路径中 日志格式为dbf,改变格式
SQL> alter system set log_archive_format='%t_%s_%r.arc' scope=spfile;

%s: 日志序列号:

                %S: 日志序列号(带有前导)

                %t: 重做线程编号.

                %T: 重做线程编号(带有前导)

                %a: 活动ID号

                %d: 数据库ID号

                %r RESETLOGS的ID值.


SQL> startup force
(查看归档路径变为arc后缀)

==============================================
完全数据库脱机冷备份

拷贝出控制文件,数据文件,日志文件
[oracle@sq ~]$ mkdir db_bak


SQL> select 'cp '||member||' /home/oracle/db_bak' from v$logfile t
  2  union all
  3  select 'cp '||file_name||' /home/oracle/db_bak' from dba_data_files
  4  union all
  5  select 'cp '||name||' /home/oracle/db_bak' from v$controlfile;
(生成拷贝命令,把生成的命令都执行一边)

==================================================
部分数据库联机备份
备份表空间
(查看表空间)
SQL> select TABLESPACE_NAME from dba_tablespaces;

1.SQL>  alter tablespace users begin backup;

[oracle@sq ~]$ cp /u01/app/oracle/oradata/orcl/users01.dbf /home/oracle/db_bak1
2.备份完毕后结束
SQL> alter tablespace users end backup;

3.
[oracle@sq orcl]$ rm -rf users01.dbf 

4.SQL> startup force;
ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'

5.把备份的文件拷贝回来
[oracle@sq db_bak1]$ cp users01.dbf /u01/app/oracle/oradata/orcl/users01.dbf

6.离线文件
SQL> alter database datafile 4 offline;

7.恢复文件
SQL> recover datafile 4;
SQL> alter database datafile 4 online;

8.SQL> alter database open;

查看状态
SQL> select FILE_NAME,FILE_ID,STATUS from dba_data_files

查看备份
SQL> select * from v$backup;
=====================================================
全库联机备份

1.整库声明备份
SQL> alter database begin backup;
SQL> select * from v$backup;
结果所有文件 都是备份状态

2.把数据文件拷贝出来
[oracle@sq ~]$ mkdir db_bak2
[oracle@sq orcl]$ cp *.dbf /home/oracle/db_bak2/

3.控制文件也可能损害,如何把控制文件也备份出来呢
SQL> oradebug setmypid;
SQL> alter database backup controlfile to trace;

SQL> oradebug tracefile_name;
/u01/app/oracle/admin/orcl/udump/orcl_ora_11743.trc

里面有创建控制文件命令
CREATE CONTROLFILE REUSE DATABASE "TEST" NORESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/oracle/app/oradata/TEST/redo01.log'  SIZE 50M,
  GROUP 2 '/oracle/app/oradata/TEST/redo02.log'  SIZE 50M,
  GROUP 3 '/oracle/app/oradata/TEST/redo03.log'  SIZE 50M
-- STANDBY LOGFILE
DATAFILE
  '/oracle/app/oradata/TEST/system01.dbf',
  '/oracle/app/oradata/TEST/undotbs01.dbf',
  '/oracle/app/oradata/TEST/sysaux01.dbf',
  '/oracle/app/oradata/TEST/users01.dbf'
CHARACTER SET AL32UTF8
;


(reuse是建表空间时重新使用已存在的文件,如未指定reuse,那么如果要建的文件已存在,则会报错。

noresetlogs 恢复的时候,把原来redo里的信息不更新,即新的数据库的SCN号和原来的SCN号是连续的,这个一般用于完全恢复
resetlogs就是会把redo里原来的信息会重置,相当于一个新的数据库的建立)

4.删除
[oracle@sq orcl]$ rm -rf 控制文件

5.SQL> startup force;
ORA-00205: error in identifying control file, check alert log for more info

6.执行上面的创建控制文件命令
7.
SQL> alter database open;(报错)

8.SQL> recover database;
SQL> alter database open;(成功)
========================================
==========================================
备份日志文件的高可靠(日志镜像)
SQL> show parameter archive(查看备份日志通道)

[oracle@sq ~]$ mkdir archivelog1
[oracle@sq ~]$ mkdir archivelog2

SQL> alter system set log_archive_dest_1='location=/home/oracle/archivelog1';

SQL> alter system set log_archive_dest_2='location=/home/oracle/archivelog2';


SQL> show parameter archive
SQL> alter system switch logfile;(切换日志)

进入 archivelog1 archivelog2目录会看到 2个一样的文件

[oracle@sq archivelog1]$ ps -ef |grep ora_(两个归档进程)
oracle   19962     1  0 06:28 ?        00:00:00 ora_arc0_orcl
oracle   19964     1  0 06:28 ?        00:00:00 ora_arc1_orcl


SQL> show parameter archive (两个进程)
log_archive_max_processes            integer     2

SQL> alter system set log_archive_max_processes=3;(改变进程数)


[oracle@sq archivelog1]$ ps -ef |grep ora_(结果3个)


SQL> alter system set log_archive_dest_2='';(清除通道)
===========================






原文地址:https://www.cnblogs.com/xiaoxiao5ya/p/06646d04f2c8138c98aaf0836c15a34a.html