1、交叉效验RMAN 备份
在RMAN目录和物理备份目的地不同步的情况下,我们可以使用crosscheck命令来效验控制文件或恢复目录中的RMAN信息是否与备份介质上的实际物理备份集片相同。
使用crosscheck 命令时,我们关心每个备份集或者副本的状态。 如果使用控制文件,用于备份集片的v$backup_set 视图和用于副本的v$databfile_copy 视图中的status列列出了每个备份集或副本的状态码;如果使用恢复目录,则在备份集片的RC_BACKUP_SET和副本的RC_DATAFILE_COPY中列出了每个备份集或副本的状态码。 在不同的备份状态码中,我们关心以下两种状态:
(1)A(Available:可用):RMAN 认定该项存在于备份介质上
(2)X(Expired:不可用):这个备份集片或副本上存储的RMAN目录(即控制文件或恢复目录)中,但是并没有物理存在于备份介质上。
使用crosscheck 命令的目的是将RMAN目录的状态设置为AVAILABLE或者EXPIRED。 执行crosscheck时,RMAN检查目录中列出的每个备份集或副本并且判断他们是否存在与备份介质上。 如果备份集或副本不存在与备份介质上,它就会被标记为expired, 并且不能用于任何还原操作;如果备份集或副本存在与备份介质上,它就会维持available状态。 如果以前被标记为expired 的备份集或副本再次存在于备份介质上,crosscheck 命令就会将它标记回available。
RMAN> crosscheck backup;
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=25 设备类型=DISK
交叉校验备份片段: 找到为 'AVAILABLE'
备份片段句柄=F:/BACKUP/BL_01LI7BSC_1_1.BAK RECID=1 STAMP=723758988
交叉校验备份片段: 找到为 'AVAILABLE'
备份片段句柄=F:/BACKUP/BL_02LI7BSK_1_1.BAK RECID=2 STAMP=723758997
交叉校验备份片段: 找到为 'AVAILABLE'
备份片段句柄=F:/BACKUP/BL_03LI7BVK_1_1.BAK RECID=3 STAMP=723759093
可以交叉效验数据文件备份,表空间备份,控制文件备份以及服务器参数文件备份。此外,可以通过识别与备份相关联的标记来选择要交叉效验和特定的备份。 基于使用的设备或者基于一个时间周期,我们甚至可以交叉效验所有的备份。 如:
Crosscheck backup of datafile 1;
Crosscheck backup of tablespace users;
Crosscheck backup of controlfile;
Crosscheck backup of spfile;
Crosscheck backup tag='TEST';
Crosscheck backup completed after 'sysdate-2';
Crosscheck backup completed between 'sysdate-5' and 'sysdate-2';
Crosscheck backup device type disk;
交叉验证归档日志示例:
RMAN> crosscheck archivelog all;
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=24 设备类型=DISK
对归档日志的验证成功
归档日志文件名=D:/ARCHIVELOG/BL_ARC0000000005_0723658881.0001 RECID=1 STAMP=723756640
对归档日志的验证成功
归档日志文件名=D:/ARCHIVELOG/BL_ARC0000000006_0723658881.0001 RECID=2 STAMP=723758988
对归档日志的验证成功
归档日志文件名=D:/ARCHIVELOG/BL_ARC0000000007_0723658881.0001 RECID=3 STAMP=723759092
我们可以基于一个号码或标准(包括时间,具体的或指定范围的SCN或日志序列号)来交叉效验归档的重做日志备份,甚至还可以使用like参数与通配符来交叉效验特定的归档日志备份。 如:
Crosscheck archivelog like 'ARC001.log';
Crosscheck archivelog 'D:/archivelog/arc023.log';
Crosscheck archivelog like '%ARC00012.LOG';
Crosscheck archivelog from time "to_date('2010-7-10','yyyy-mm-dd')";
Crosscheck archivelog until time "to_date('2010-7-10','yyyy-mm-dd')";
Crosscheck archivelog from sequence 12;
Crosscheck archivelog until sequence 522;
使用crosscheck copy命令还可以交叉效验副本。 包括数据文件副本,控制文件副本,归档重做日志副本以及磁盘上的归档的重做日志。 如:
Crosscheck copy of datafile 5;
Crosscheck datafilecopy 'D:/APP/ADMINISTRATOR/ORADATA/BL/BL01.DBF';
2、RMAN 备份的验证
RMAN 提供的validate命令允许查看给定的备份集和进行验证以确保这个备份集能够被还原。注意,validate 命令必须要获得主键ID。 这个可以用list backup summary命令获取。
RMAN> list backup summary;
备份列表
===============
关键字 TY LV S 设备类型 完成时间 段数 副本数 压缩标记
------- -- -- - ----------- ---------- ------- ------- ---------- ---
1 B A A DISK 07-7月 -10 1 1 NO TAG20100707T200948
2 B F A DISK 07-7月 -10 1 1 NO TAG20100707T200956
3 B A A DISK 07-7月 -10 1 1 NO TAG20100707T201132
RMAN> validate backupset 1;
启动 validate 于 10-7月 -10
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在开始验证归档日志备份集
通道 ORA_DISK_1: 正在读取备份片段 F:/BACKUP/BL_01LI7BSC_1_1.BAK
通道 ORA_DISK_1: 段句柄 = F:/BACKUP/BL_01LI7BSC_1_1.BAK 标记 = TAG20100707T200948
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 验证完成, 用时: 00:00:03
完成 validate 于 10-7月 -10
3、备份保存策略
保存策略(retention policy)是管理备份和副本以及指定他们在备份介质上保存时间的一种方法。 我们可以定义两种基本的保存策略: 恢复窗口保存策略(recovery window backup retention policy) 和 备份冗余备份保存策略(backup redundancy backup retention policy)。
每个冗余策略将一直保持知道被修改或者删除(或者直到使用create controlfile命令重新构建控制文件的时候)。 两个冗余策略是相互排斥的。此外,即使使用了冗余策略,也只能在使用带obsolete参数的delete命令的时候才能删除物理备份片。
(1)恢复窗口备份保存策略
这种保存策略是基于想要数据库恢复到的最近日期定制的。 如:
Configure retention policy to recovery window 7 days;
在这个示例中,我们保存近7天的备份是有效的,超过7天的备份会被丢弃。
(2)备份冗余备份保存策略
这种备份策略RMAN 会从最新备份开始保留n个数据库备份。 如:
Configure retention policy to redundancy 3;
这个示例中,我们保存最后3份有效的备份。
(3)保存策略的维护
当一个给定的备份或者副本由于备份保存策略的标准而被丢弃时,RMAN 不会自动删除这个备份或副本,而只是标记为OBSOLETE. 我们可以使用 report obsolete 命令查看被RMAN 标记为obsolete 的备份。
RMAN> report obsolete;
RMAN 保留策略将应用于该命令
将 RMAN 保留策略设置为冗余 1
已废弃的备份和副本报表
类型 关键字 完成时间 文件名/句柄
-------------------- ------ ------------------ --------------------
存档日志 1 07-7月 -10 D:/ARCHIVELOG/BL_ARC0000000005_0723658881.0001
存档日志 2 07-7月 -10 D:/ARCHIVELOG/BL_ARC0000000006_0723658881.0001
备份集 1 07-7月 -10
备份片段 1 07-7月 -10 F:/BACKUP/BL_01LI7BSC_1_1.BAK
当然,我们也可以使用带有keep参数的change 命令修改需要保留的已经被丢弃备份的状态。 使用这个命令时,其状态被修改的备份或副本被认为是一个长期备份(long-term backup),并且不受相应的保存策略的影响。
可以使用change命令将一个备份修改为永久备份,也可以为这个备份或副本定义丢弃的日志。此外,还可以定义与这个备份关联的所有日志都应当被保留,以保证总是能将该备份恢复到当前时间。 我们还可以使用change nokeep命令来手工丢弃一个备份。示例:
RMAN> list backup;
备份集列表
===================
BS 关键字 大小 设备类型占用时间 完成时间
------- ---------- ----------- ------------ ----------
1 52.15M DISK 00:00:04 07-7月 -10
BP 关键字: 1 状态: AVAILABLE 已压缩: NO 标记: TAG20100707T200948
段名:F:/BACKUP/BL_01LI7BSC_1_1.BAK
备份集 1 中的已存档日志列表
线程序列 低 SCN 时间下限 下一个 SCN 下一次
---- ------- ---------- ---------- ---------- ---------
1 5 986340 06-7月 -10 1006590 07-7月 -10
1 6 1006590 07-7月 -10 1008501 07-7月 -10
BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
2 Full 974.46M DISK 00:01:33 07-7月 -10
BP 关键字: 2 状态: AVAILABLE 已压缩: NO 标记: TAG20100707T200956
段名:F:/BACKUP/BL_02LI7BSK_1_1.BAK
备份集 2 中的数据文件列表
文件 LV 类型 Ckp SCN Ckp 时间 名称
---- -- ---- ---------- ---------- ----
1 Full 1008510 07-7月 -10 D:/APP/ADMINISTRATOR/ORADATA/BL/SYSTEM01.DBF
2 Full 1008510 07-7月 -10 D:/APP/ADMINISTRATOR/ORADATA/BL/SYSAUX01.DBF
3 Full 1008510 07-7月 -10 D:/APP/ADMINISTRATOR/ORADATA/BL/UNDOTBS01.DBF
4 Full 1008510 07-7月 -10 D:/APP/ADMINISTRATOR/ORADATA/BL/USERS01.DBF
5 Full 1008510 07-7月 -10
修改一个备份或副本时,必须引用与这个备份关联的备份集关键字。
另外,keep forever 选项有两个重要的限制:
(1)只有在使用恢复目录时,才可以使用该选项
(2)如果使用FRA,则不能使用该选项
修改备份为永久保存并将以及该备份的相关的日志保存下来,保证总能将备份恢复到当前时间点
change backupset 31 keep forever logs;
设置备份丢弃的新日期,将备份在多保存7 天,7 天后将删除
change backupset 32 keep until time 'sysdata + 7' logs;
检查完报告后,可以使用带有obsolete 参数的delete 命令指示Oracle 删除要丢弃的备份,如:
Delete obsolete;
如果要使一个备份不受所选冗余策略的影响,可以使用backup命令的keep 参数来为这个备份指定另一个保存标准。 如:
Backup database keep forever;
Backup database keep until time "to_date('2010-7-10','yyyy-mm-dd')";
Backup database keep 5 days;
4、change 命令
Change 命令允许用户修改备份的状态。我们可能会遇到备份介质设备在某个时间爱你段中无效的情况(如突然断电)。这时,我们就可以使用change 命令来指示这个设备上的备份是不可用的。
解决硬件故障和修复磁盘后,额可以再次执行change 命令,将备份改为可用的状态。也可以将备份修改为不可用的状态。在还原和恢复操作期间,不会考虑哪些不可用的备份,但在执行delete expired命令期间这些备份记录不会被删除。 相关示例:
Change backup of database tag='TEST' unavailable;
Change backup of database like '%TEST%' unavailable;
Change backupset 33 unavailable;
Change backupset 33 available;
Change archivelog 'd:/archivelog/arc0001.log' unavailable;
可以使用change命令修改归档的重做日志备份的状态。如:将已经备份了指定次数的所有归档的重做日志备份修改为不可用的状态,也可以修改特定设备上的所有备份的状态。
Change archivelog all backed up 5 times to device type disk unavailable;
Change backup of database device type disk unavailable;
可是使用带有delete 参数的change 命令删除备份集,即在备份介质上的物理删除,并且从控制文件和恢复目录中删除。 前提是要知道备份集关键字,可以使用list backup 或 list copy 命令查看。
RMAN> list backup;
备份集列表
===================
BS 关键字 大小 设备类型占用时间 完成时间
------- ---------- ----------- ------------ ----------
1 52.15M DISK 00:00:04 07-7月 -10
BP 关键字: 1 状态: AVAILABLE 已压缩: NO 标记: TAG20100707T200948
段名:F:/BACKUP/BL_01LI7BSC_1_1.BAK
备份集 1 中的已存档日志列表
线程序列 低 SCN 时间下限 下一个 SCN 下一次
---- ------- ---------- ---------- ---------- ---------
1 5 986340 06-7月 -10 1006590 07-7月 -10
1 6 1006590 07-7月 -10 1008501 07-7月 -10
BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间
------- ---- -- ---------- ----------- ------------ ----------
2 Full 974.46M DISK 00:01:33 07-7月 -10
BP 关键字: 2 状态: AVAILABLE 已压缩: NO 标记: TAG20100707T200956
段名:F:/BACKUP/BL_02LI7BSK_1_1.BAK
备份集 2 中的数据文件列表
文件 LV 类型 Ckp SCN Ckp 时间 名称
---- -- ---- ---------- ---------- ----
1 Full 1008510 07-7月 -10 D:/APP/ADMINISTRATOR/ORADATA/BL/SYSTEM01.DBF
2 Full 1008510 07-7月 -10 D:/APP/ADMINISTRATOR/ORADATA/BL/SYSAUX01.DBF
3 Full 1008510 07-7月 -10 D:/APP/ADMINISTRATOR/ORADATA/BL/UNDOTBS01.DBF
4 Full 1008510 07-7月 -10 D:/APP/ADMINISTRATOR/ORADATA/BL/USERS01.DBF
5 Full 1008510 07-7月 -10
删除备份集1:
RMAN> change backupset 1 delete;
使用通道 ORA_DISK_1
备份片段列表
BP 关键字 BS 关键字 Pc# Cp# 状态 设备类型段名称
------- ------- --- --- ----------- ----------- ----------
1 1 1 1 AVAILABLE DISK F:/BACKUP/BL_01LI7BSC_1_1.BAK
是否确定要删除以上对象 (输入 YES 或 NO) yes
已删除备份片段
备份片段句柄=F:/BACKUP/BL_01LI7BSC_1_1.BAK RECID=1 STAMP=723758988
1 对象已删除
在上面的这个示例中,我们删除了备份集和它关联的备份片。 也可以删除一些备份片。 通过 list backup命令我们可以看到备份片的名称,比如:段名:F:/BACKUP/BL_01LI7BSC_1_1.BAK。
我们也可以查看备份片的号码,用catalog 用户连接数据库后,查看rc_backup_piece 表,SQL如下:
SQL> select bs_key,bp_key,piece#,handle from rc_backup_piece;
BS_KEY BP_KEY PIECE# HANDLE
---------- ---------- ---------- -----------------------------------------------
52 55 1 D:/BACKUP/ORCL_02LI47UA_1_1
53 56 1 D:/BACKUP/ORCL_03LI47UF_1_1
75 82 1 D:/BACKUP/ORCL_04LI4816_1_1
删除备份片,我们可以用BP_KEY,也可以直接用段名(handle),如:
RMAN> Change backuppiece 'F:/BACKUP/BL_02LI7BSK_1_1.BAK' delete;
使用通道 ORA_DISK_1
备份片段列表
BP 关键字 BS 关键字 Pc# Cp# 状态 设备类型段名称
------- ------- --- --- ----------- ----------- ----------
2 2 1 1 AVAILABLE DISK F:/BACKUP/BL_02LI7BSK_1_1.BAK
是否确定要删除以上对象 (输入 YES 或 NO) yes
已删除备份片段
备份片段句柄=F:/BACKUP/BL_02LI7BSK_1_1.BAK RECID=2 STAMP=723758997
1 对象已删除
使用备份集片,如:
Change backuppiece 622 delete;
Change archivelog until logseq=54 delete;
最后,可以使用change backuppiece uncataog命令从目录中删除备份集片。 如果删除最后剩余的备份集片,那么它也将删除备份集记录。如:
Change backuppiece 'F:/BACKUP/BL_02LI7BSK_1_1.BAK' uncatalog;
5、delete 命令
备份集不是永远存在的。我们可以使用保存策略标记备份有效性和生存期的结束。但是,备份策略的实施不会从RMAN目录中删除备份,而只是将这些备份标记为丢弃状态。
Delete 命令对备份和副本的影响很大。通过delete命令,可以删除基于保存标准被标记为丢弃的任何备份,还可以将恢复目录或控制文件中的备份从expired状态变为deleted状态。 如:
Delete expired;
Delete obsolete;
执行delete命令时,RMAN会请求用户确认这个删除命令,如果确认了这个删除命令,RMAN 就会完成delete操作。
注意: 如果一个备份被标记为deleted 状态,就不能恢复这个备份。 如果该备份物理可用,我们仍然可以使用dbms_backup_restore过程来恢复这个备份。
1.6 在RMAN中为其他备份编写目录
使用catalog 命令可以在RMAN中记录数据文件备份,归档日志备份和控制文件备份,随后还能使用这些备份来还原和恢复数据库。 Oracle 10g允许使用catalog命令来为控制文件中已有的备份集片编写目录。当使用一个不包含最新的RMAN信息的较早备份控制文件还原数据库时,则可以很方便得使用该功能来完成。
示例:
我们先备份一个表空间,归档文件,控制文件。 然后通过catalog 把这些信息添加到恢复目录里。
SQL> conn /@bl as sysdba;
已连接。
SQL> alter tablespace users begin backup;
表空间已更改。
SQL> select file_name from dba_data_files;
FILE_NAME
------------------------------------------------------------------------------
D:/APP/ADMINISTRATOR/ORADATA/BL/USERS01.DBF
D:/APP/ADMINISTRATOR/ORADATA/BL/UNDOTBS01.DBF
D:/APP/ADMINISTRATOR/ORADATA/BL/SYSAUX01.DBF
D:/APP/ADMINISTRATOR/ORADATA/BL/SYSTEM01.DBF
D:/APP/ADMINISTRATOR/ORADATA/BL/BL01.DBF
SQL> host copy D:/APP/ADMINISTRATOR/ORADATA/BL/USERS01.DBF F:/backup;
已复制 1 个文件。
SQL> alter tablespace users end backup;
表空间已更改。
SQL> alter system archive log current;
系统已更改。
SQL> host copy d:/archivelog/BL_ARC0000000017_0723658881.0001 F:/backup
已复制 1 个文件。
SQL> alter database backup controlfile to 'F:/backup/bl-2010-7-11.ctl';
数据库已更改。
现在在RMAN中将上面的备份信息写入catalog
C:/Users/Administrator.DavidDai>rman target /@bl;
恢复管理器: Release 11.2.0.1.0 - Production on 星期日 7月 11 08:51:50 2010
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
连接到目标数据库: BL (DBID=680066685)
RMAN> catalog datafilecopy 'F:/backup/users01.dbf';
已将数据文件副本列入目录
数据文件副本文件名=F:/BACKUP/USERS01.DBF RECID=3 STAMP=724063951
RMAN> catalog archivelog 'f:/backup/BL_ARC0000000017_0723658881.0001';
已编目的归档日志
归档日志文件名=F:/BACKUP/BL_ARC0000000017_0723658881.0001 RECID=14 STAMP=724063994
RMAN> catalog controlfilecopy 'f:/backup/BL-2010-7-11.CTL';
已列入目录的控制文件副本
控制文件副本文件名=F:/BACKUP/BL-2010-7-11.CTL RECID=4 STAMP=724064022
Catalog命令允许将与新的备份集相关的信息输入到控制文件或恢复目录中。 RMAN将重写与编写目录的信息冲突的已存在的目录信息。 如果需要移动备份集片的位置,也可以使用该命令。
查看备份集信息
RMAN> list backup;
备份集列表
===================
BS 关键字 大小 设备类型占用时间 完成时间
------- ---------- ----------- ------------ ----------
3 7.50K DISK 00:00:01 07-7月 -10
BP 关键字: 3 状态: AVAILABLE 已压缩: NO 标记: TAG20100707T201132
段名:F:/BACKUP/BL_03LI7BVK_1_1.BAK
将备份集移到其他位置,然后用catalog修改控制文件中每个移动的备份片的正确位置:
RMAN> catalog backuppiece 'f:/BL_03LI7BVK_1_1.BAK';
已将备份片段列入目录
备份片段句柄=F:/BL_03LI7BVK_1_1.BAK RECID=12 STAMP=724064512
也可以使用带有start with 选项的catalog命令,该命令允许定义包含将要编写目录的RMAN 备份集片的目录,RMAN 然后对该目录中的所有备份集片编写目录。
RMAN>catalog start with 'f:/backup';
该命令会提示编写目录的文件列表,并询问是否希望对所列出的文件编写目录,如果确定编写目录,RMAN就会对列出的所有备份集片编写目录。该命令也允许对一些具有类似名称的备份集片编写目录。
当使用catalog start with命令时,不会局限与特定的文件编写目录;该命令将尝试对符合参数列表的所有文件编写目录。 然后,在执行catalog过程中,非备份集片的文件将会使编写目录的过程失败,并且产生一个错误,如果作为备份集片文件被成功编写目录,则不管是否会产生其他错误。
oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html