RMAN备份
一、RMAN备份原理
1、简介
RMAN备份是ORACLE数据库自带的在线热备工具,使用RMAN不需要安装,可会数据块进行压缩和检测,可备份数据块的变化量,是数据块级别的备份解决方案。
缺点:若数据库中出现坏块,RMAN会自动检测坏块并跳过坏块,造成一定数据的丢失,建议,采用expdp/impdp、ACTIVE DATAGUARD、ORACLE GOLDENGATE等在线逻辑迁移数据方案。
RMAN备份分为catalog和nocatalog两种:
nocatalog:直接进行备份,将备份信息直接记录到控制文件,会导致控制文件持续增长,若控制文件丢失,将导致备份不能恢复,控制文件存在风险,
可通过修改参数文件中的control_file__record_keep_time参数来确定控制文件数据过期时间,缺省值是7days。
恢复:nocatalog恢复,恢复数据库需要控制文件的记录信息,必须要现将数据库启动到mount阶段才能回数据库进行恢复,若控制文件损坏,需要先进行恢复。
1) 建立oracle运行环境(包括init或sp文件)
2) 文件方式恢复controlfile到init文件指定的位置
3) startup mount
4) rman,恢复datafile
5) alter database open resetlogs
catalog:需要创建单独的备份数据库、恢复目录和备份表空间,是将备份信息直接记录到备份数据库中,
1) 建立oracle运行环境(包括init或sp文件)
2) rman ,restore controfile
3) alter database mount
4) rman, restore datafile
5) alter database open resetlogs
2、备份原理
备份进程:主进程 影子进程 通道进程
rman是集成在oracle数据库内部的免安装工具,是采用调用sys.DBMS_RCVMAN和sys.DBMS_BACKUP_RESTORE两个数据包来完成工作,由于这两个数据表不需要oracle数据库的支撑,所以数据库在nomount状态就可以启动RMAN。
RMAN备份原理:
当rman target /登录,首先会检测ORACLE_SID变量中的实例名,并在实例中生成一个RMAN服务器进程(通道进程)和主进程,影子进程。该通道进程会在pga(有时在sga)中分配内存,在内存中每个通道进程都会构建缓冲区(输入,输出),先将备份文件读入输入缓冲区,一个输入缓冲区写满会使用另一个输入缓冲区,然后RMAN确认备份的数据块并进行校验之后推入输出缓冲区,当输出缓冲区被填满,会将来自不同数据文件的数据混在一起写入磁盘或磁带。为通道进程工作提供内存;
然后RMAN主进程调动sys.DBMS_RCVMAN数据包用来访问控制文件,并在任何操作前设置TIME运算符和校验数据文件头的检查点信息,将此类信息返回给RMAN主进程;并且RMAN 在构建实际备份/还原命令之前自动执行负载均衡(load-balancing)算法和性能增强(performance-enhancing)算法。
然后RMAN主进程通过sys.DBMS_BACKUP_RESTORE数据包校验sys.DBMS_RCVMAN数据包传回来的控制文件和必须的一些信息,并将这些信息传回RMAN服务器进程(通道进程);
RMAN服务器进程(通道进程)会基于文件的代码创建一个PL/SQL块来调用sys.DBMS_BACKUP_RESTORE数据包(备份的动力)备份数据文件,影子进程在通道之间进行轮询扫描并将信息返回给RMAN服务器进程(通道进程),RMAN主进程并在通道之间基于负载均衡算法分配进程工作。
RMAN进程内存原理:
RMAN登录产生通道进程,通道进程在pga中(有时在sga中)分配内存,在内存中每个通道进程都会构建缓冲区(输入,输出),先将备份文件读入输入缓冲区,一个输入缓冲区写满会使用另一个输入缓冲区,然后RMAN确认备份的数据块并进行校验之后推入输出缓冲区,当输出缓冲区被填满,会将来自不同数据文件的数据混在一起写入磁盘或磁带。
磁盘备份会使用PGA作为备份缓冲区用于通道进程内存分配。若OS没配置本地异步I/O,则可利用DBWR_IO_SLAVES参数使用I/O从属来填充内存的输入缓冲。
若DBWR_IO_SLAVES参数设置为非零,则RMAN会自动分配4个I/O从属来协调输入缓冲区数据加载。此时用于磁盘备份的内存缓冲区就会被退出共享池,若存在大池也会被推入大池。
如果没有使用磁带从属,则会在PGA中分配用于磁带输出缓冲区的内存。
为了保持合理范围的内存分配,根据一起备份的文件数,分配内存缓冲大小需要应用下面的规则。
1) 如果备份集内的文件数小于或者等于4个,RMAN 会为每个文件分配4个大小为1MB的缓冲区。缓冲区总和小于或者等于16MB。
2) 如果备份集内文件数多余4个但少于等于8个,RMAN 会为每个文件分配4个大小为512KB的缓冲区。缓冲区总和确保少于或者等于16MB。
3) 如果多路复用的文件数多余8个,RMAN 会为每个文件分配4个大小为128KB的缓冲区。这就确保每个要备份的文件占用512KB的缓冲区内存。
--查询来监控备份运行时基于每个每个文件的缓冲区大小:
SELECT set_count,device_type,TYPE,filename,buffer_size,buffer_count,open_time,close_time
FROM v$backup_async_io
ORDER BY set_count,TYPE,open_time,close_time;
在V$SESSION_LONGOPS 视图中可以跟踪的是DBMS_BACKUP_RESTORE 数据包的工作。
二、RMAN参数
RMAN> show all;
using target database control file instead of recovery catalog
RMAN configuration parameters are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
--指定备份过期,常用第二种。
--CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;recover Window保持足量备份,可以保证恢复到7天内任意时刻,超过七天就被标记为obsolete
--CONFIGURE RETENTION POLICY TO REDUNDANCY 2; 保持最新的2次备份,超过两次会标记为redundancy,默认是1。
--CONFIGURE RETENTION POLICY TO NONE;不需要保留策略,clear恢复会默认保留策略。
CONFIGURE BACKUP OPTIMIZATION OFF; # default
--默认值为关闭,如果打开,rman将对备份的数据文件及归档等文件进行一种优化的算法。
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
--默认的设备类型,磁盘:disk, 磁带:SBT
CONFIGURE CONTROLFILE AUTOBACKUP ON;
--强制数据库在备份文件或者执行改变数据库结构的命令之后将控制文件自动备份,默认值为关闭。这样可以避免控制文件和catalog丢失后,控制文件仍然可以恢复。
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
--配置控制文件的备份路径和备份格式-磁盘
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE SBT_TAPE TO '%F'; # default
--配置控制文件的备份路径和备份格式-磁带
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
--配置并行度-磁盘
CONFIGURE DEVICE TYPE SBT_TAPE PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
--配置并行度-磁带
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
--配置数据库的每次备份的copy数量,oracle的每一次备份都可以有多份完全相同的拷贝。
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1; # default
--配置数据库的每次备份的copy数量,oracle的每一次备份都可以有多份完全相同的拷贝。
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1; # default
--设置数据库的归档日志的存放设备类型,copy数量
CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' RATE 80 M;
--配置备份文件的备份路径和备份格式;CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT 'C:...%d_DB_%u_%s_%p';
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
--dg归档删除策略 CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/oracle/product/10.2/database/dbs/snapcf_essdb1.f'; # default
--配置控制文件的快照文件的存放路径和文件名,这个快照文件是在备份期间产生的,用于控制文件的读一致性
三、常用命令
1、设置环境变量
-语言和时间格式
NLS_LANG=american
NLS_DATE_FORMAT='Mon DD YYYY HH24:MI:SS'
-字符集格式,连接已卸载的数据库需要设定字符集
NLS_LANG = american_america.we8dec
2、常用备份命令
backup database; --备份数据库,默认在闪回区
backup database format '.../%d_%U'; --备份数据库并指定备份路径
backup database include current controlfile plus archivelog delete all input; --备份数据文件、控制文件、归档日志
backup incremental level 0 database; --差异增量备份数据库
backup incremental level 0 cumulative database; --累积增量备份数据库
backup as compressed backupset database format '/home/oracle/'; --压缩备份数据库
backup tablespace users format '/home/oracle/'; --备份表空间
backup datafile '/opt/oracle/oradata/orcl/' format '/home/oracle/'; --备份数据文件
backup current controlfile format '/home/oracle/'; --备份控制文件
backup spfile format '/home/oracle/'; --备份参数文件
backup current controlfile plus archivelog; --备份控制文件并归档然后备份归档日志
backup archivelog all format '/home/oracle/' delete all input; --备份归档日志并删除
RMAN> backup as copy datafile 4 format '/u01/app/oracle/rmanbak/df_%d_%U';
RMAN>backup archivelog sequence between50 and 120 thread1 delete input;
RMAN> backup archivelog from time "sysdate-15" until time "sysdate-7";
备份控制文件:
alter database backup controlfile to trace as '/oracle/';
---select tracefile from v$process where addr in (select paddr from v$session where sid in (select sid from v$mystat));
--备份闪回区
--备份位于闪回区而没有备份的所有文件(控制文件,归档文件,数据文件),闪回日志,当前redo,当前控制文件不备份
RMAN> backup recovery area;
--备份磁盘上没有备份过的文件,而不论是否在闪回区
RMAN> backup recovery files;
3、常用恢复命令
restore database; --还原数据库
recover database; --恢复数据库
restore tablespace users; --还原表空间
recover tablespace users; --恢复表空间
restore datafile n; --还原数据文件
recover datafile n; --恢复数据文件
SET ARCHIVELOG DESTINATION TO '/bak2/arch5_16';
restore archivelog sequence between 10 and 20; --还原归档日志
restore archivelog from logseq 27 ; 还原log sequence为27之后的所有归档日志
restore archivelog from logseq 27 until logseq 29; 还原log sequence为27到29这几个归档日志
restore controlfile from autobackup; --还原控制文件
restore spfile to '/back/log/' from autobackup; --还原参数文件
restore validate database; --验证数据库可恢复性
restore validate controlfile; --验证控制文件可恢复性
restore validate spfile; --验证参数文件可恢复性
4、查看备份集
list backup; --列出数据库中所有的备份集
list expired backup; -列出过期备份;
list backup of database; --查看数据库备份集
list backup of database summary; --查看备份集的详细信息。
list backup of tablespace users; --查看表空间备份集
list backup of datafile n; --查看备份的数据文件
list backup of controlfile; --查看控制文件备份集
list backup of archivelog all; --查看归档日志备份集
list archivelog all; --查看当前所有归档日志
list expired backup; --列出所有无效备份
catalog:
1、注册副本
catalog datafilecopy 'c:\';
2、注册备份片
catalog backuppiece 'c:\demo_10.dbf' ;
3、注册特定目录的所有备份文件
catalog start with 'c:\bak';
4、注销备份记录
change datafilecopy 'c:\' uncatalog;
change controlfilecopy 'c:\' uncatalog;
change backuppiece 'c:\demo_10.bak' uncatalog;
5、注册归档日志
catalog archivelog '/u01/CCBPROD/oracle/oradata/archive/thread_2_seq_12307.2161.899944423';
cataloged archived log
archived log file name=/u01/CCBPROD/oracle/oradata/archive/thread_2_seq_12307.2161.899944423 RECID=9578 STAMP=900068071
5、管理备份集
crosscheck backup 核对所有备份集;
crosscheck backup of database 核对所有数据文件的备份集;
crosscheck backup of tablespace users 核对特定表空间的备份集;
crosscheck backup of datafile 4 核对特定数据文件的备份集;
crosscheck backup of controlfile 核对控制文件的备份集;
crosscheck backup of spfile 核对SPFILE的备份集;
crosscheck backup of archivelog sequence 3 核对归档日志的备份集;
crosscheck copy 核对所有映像副本;
crosscheck copy of database 核对所有数据文件的映像副本;
crosscheck copy of tablespace users 核对特定表空间的映像副本;
crosscheck copy of datafile 6 核对特定数据文件的映像副本;
crosscheck copy of archivelog sequence 4 核对归档日志的映像副本;
crosscheck copy of controlfile 核对控制文件的映像副本;
crosscheck backup tag='SAT_BACKUP';
crosscheck backup completed after 'sysdate - 2'
crosscheck backup completed between 'sysdate - 5' and 'sysdate -2 '
crosscheck backup device type sBT;
crosscheck archivelog all;
crosscheck archivelog like '%ARC00012.001'
crosscheck archivelog from sequence 12;
crosscheck archivelog until sequence 522;
6、删除备份
1、删除陈旧备份
delete obsolete; #提示
delete noprompt obsolete; #不提示
2、删除EXPIRED备份集
delete noprompt expired backup;
3、删除EXPIRED副本
delete noprompt expired copy ;
4、删除特定备份集
delete noprompt backupset 19;
5、删除特定备份片
delete noprompt backuppiece 'c:\test\';
6、删除所有备份集
delete noprompt backup ; 或者
delete noprompt backupset;
7、删除特定映像副本
delete noprompt datafilecopy 'c:\test\'; 删除数据文件
delete noprompt controlfilecopy 'c:\test\controlfile_bak.ctl'; 删除控制文件
delete noprompt archivelog 'c:\test\'; 删除归档日志
delete noprompt force archivelog all completed before 'sysdate - 7';
8、删除所有映像副本
delete noprompt copy;
9、在备份后删除输入对象
backup archivelog all delete input ;
backup backupset 22 format='c:\test\%' delete input ;
10、delete expired archivelog all;就是同步控制文件的信息和实际物理文件的信息。