合 Oracle备份有效性校验
1、RMAN校验
RMAN校验的主要目的是检验坏块和丢失的文件,数据库一般会阻止可能导致失效的备份文件或者损坏的还原文件的操作。
RMAN校验主要会进行以下操作:
- 在恢复或还原数据文件的过程中阻止对其进行访问
- 针对一个数据文件每次只允许一个还原操作
- 确保增量备份的有序性
- 将存储信息存放在备份文件中以便可以检查文件损坏
- 在每次读写块的时候都做检查,使得坏块及时被发现
>关于校验和与坏块
所谓坏块指的是块中的数据改变了,跟Oracle预期想要查找的数据不同,坏块产生的原因包含但不局限于以下几种:
- 磁盘和磁盘控制器故障
- 内存故障
- Oracle数据库软件的缺陷
DB_BLOCK_CHECKSUM是一个数据库初始化参数,用于控制数据库(而非备份)中的数据文件和联机重做日志文件中的块的校验和的写入。 如果DB_BLOCK_CHECKSUM是Typical的,那么数据库在正常操作期间计算每个块的校验和,并在写入磁盘之前将其存储在块头中。 当数据库稍后从磁盘读取块时,会重新计算校验和并与存储的值进行比较。 如果值不匹配,则块已损坏。
默认情况下,BACKUP命令计算每个块的校验和,并将其存储在备份中。 BACKUP命令忽略DB_BLOCK_CHECKSUM的值,因为此初始化参数适用于数据库中的数据文件,而不是备份。
>认识物理和逻辑坏块
- 在物理坏块(介质损坏)中,数据库根本无法识别该块:校验和无效,块包含全零,或块头和块尾不匹配。
默认情况下,BACKUP命令计算每个块的校验和,并将其存储在备份中。 如果指定NOCHECKSUM选项,则创建备份时,RMAN不会执行块的校验和。
- 在逻辑坏块中,块的内容在逻辑上不一致。 逻辑坏块的示例包括行或索引条目的损坏。 如果RMAN检测到逻辑损坏,则会将该块记录在告警日志和服务器会话跟踪文件中。
默认情况下,RMAN不检查逻辑损坏。 但是,如果在BACKUP命令上指定CHECK LOGICAL,则RMAN会对数据和索引块进行逻辑损坏(例如行片或索引条目的损坏)进行测试,并将其记录在位于自动诊断信息库(ADR)中的告警日志中, 如果在备份或恢复文件时使用具有以下配置的RMAN,则它会检测可能检测到的所有类型的块损坏:
- 在数据库的初始化参数文件中,设置DB_BLOCK_CHECKSUM = typical,以便数据库自动计算数据文件校验和(不用于备份,而是用于数据库使用的数据文件)
- 不要在BACKUP命令之前使用SET MAXCORRUPT,因为RMAN不会容忍任何未标记的块损坏。
- 在BACKUP命令中,不要指定NO CHECKSUM选项,方便RMAN在写入备份时计算校验和
- 在BACKUP和RESTORE命令中,指定CHECK LOGICAL选项,使得RMAN能够检查逻辑和物理损坏
>RMAN备份中的坏块限制
可以通过SET MAXCORRUPT 命令限制在RMAN备份的一个文件中的未标记的坏块的总数。默认值为0,表示Oracle不允许备份文件中存在任何未标记的块损坏。
如果在备份期间RMAN遇到未标记的损坏块时超过MAXCORRUPT限制,则RMAN终止备份。 否则,RMAN将新检测到的损坏块写入备份,并使用特殊标头指示该块已标记为已损坏。 可以使用VALIDATE命令确定哪些块被标记为已损坏,并找到任何未标记的已损坏块。
缺陷:
因为RMAN允许在备份中标记损坏的块,并且可以指示RMAN允许未标记的损坏块在备份中被标记为损坏(当使用MAXCORRUPT时),可以恢复具有被标记为损坏的块,因此 如果备份此恢复的数据文件(假设没有发生新的损坏),即使没有设置MAXCORRUPT,备份也会成功。 这是因为先前标记的损坏不会阻止RMAN完成备份。
>坏块的检测
Oracle数据库支持对数据库坏块的监控、检测和修复。该技术取决于损坏是块间损坏还是块内损坏。 在块内损坏中,损坏发生在块本身内。 这种损坏可以是物理的或逻辑的。 而块间损坏只能是逻辑的。
例如,V$DATABASE_BLOCK_CORRUPTION视图记录intrablock损坏,而自动诊断信息库(ADR)跟踪所有类型的损坏。 下表总结了数据库如何处理不同类型的数据块损坏。
2、使用VALIDATE命令检查坏块
可以使用VALIDATE命令手动检查数据库文件中的物理和逻辑损坏。 此命令执行与BACKUP VALIDATE相同类型的检查,但VALIDATE可检查更大的对象选择。 例如:
- 可以使用VALIDATE DATAFILE ... BLOCK命令验证单个块。
- 如果指定要验证的备份片段的副本号,请运行VALIDATE FROM COPY NUMBER命令。
- 当验证整个文件时,RMAN检查每个输入文件块。 如果备份验证发现先前未标记的损坏块,则RMAN将使用描述损坏的行更新V$ DATABASE_BLOCK_CORRUPTION视图。
若怀疑备份集中的一个或多个备份块丢失或已损坏时,可以使用VALIDATE BACKUPSET。 此命令检查备份集中的每个块,以确保备份可以还原。 如果RMAN发现块损坏,则它发出错误并终止验证。 使用命令VALIDATE BACKUPSET可以选择要检查的备份,而RESTORE命令的VALIDATE选项允许RMAN选择。
>使用VALIDATE命令进行有效性校验的案例
1、打开RMAN并连接到目标数据库
2、根据需求执行不同的VALIDATE命令
例如:如果要校验所有的数据文件和控制文件(如果有使用参数文件的话也包含),则在RMAN中执行以下命令:
1 | RMAN> VALIDATE DATABASE; |
也可以校验制定的备份集,使用如下命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | RMAN> VALIDATE BACKUPSET 22; Starting validate at 17-AUG-13 using channel ORA_DISK_1 allocated channel: ORA_SBT_TAPE_1 channel ORA_SBT_TAPE_1: SID=89 device type=SBT_TAPE channel ORA_SBT_TAPE_1: Oracle Secure Backup channel ORA_DISK_1: starting validation of datafile backup set channel ORA_DISK_1: reading from backup piece /disk1/oracle/work/orcva/RDBMS/backupset/2013_08_16/o1_mf_nnndf_ TAG20130816T153034_2g774bt2_.bkp channel ORA_DISK_1: piece handle=/disk1/oracle/work/orcva/RDBMS/backupset/2013_08_16/o1_mf_nnndf_ TAG20130816T153034_2g774bt2_.bkp tag=TAG20130816T153034 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: validation complete, elapsed time: 00:00:01 Finished validate at 17-AUG-13 |
以下示例说明如何检查数据文件中的各个数据块是否损坏。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | RMAN> VALIDATE DATAFILE 1 BLOCK 10; Starting validate at 17-AUG-13 using channel ORA_DISK_1 channel ORA_DISK_1: starting validation of datafile channel ORA_DISK_1: specifying datafile(s) for validation input datafile file number=00001 name=/disk1/oracle/dbs/tbs_01.f channel ORA_DISK_1: validation complete, elapsed time: 00:00:01 List of Datafiles ================= File Status Marked Corrupt Empty Blocks Blocks Examined High SCN ---- ------ -------------- ------------ --------------- ---------- 1 OK 0 2 127 481907 File Name: /disk1/oracle/dbs/tbs_01.f Block Type Blocks Failing Blocks Processed ---------- -------------- ---------------- Data 0 36 Index 0 31 Other 0 58 Finished validate at 17-AUG-13 |
>并行的数据文件校验
如果验证大数据文件,RMAN可以通过将文件划分为多个部分并行处理每个部分。 如果配置或分配多个通道,并且希望通道进行并行验证,则指定VALIDATE命令的SECTION SIZE参数。
如果指定的段大小大于文件的大小,则RMAN不会创建文件段。 如果指定的小段大小将产生超过256个段,则RMAN将段大小增加到导致正好256个段的值。
并行校验的实现过程如下:
1、打开RMAN并连接到目标数据库,目标数据库必须是mount或者open状态 。
2、执行包含section size参数的VALIDATE命令:以下命令设置了两个Channel校验一个大数据文件,分区大小设置为1200MB。
1 2 3 4 5 6 | RUN { ALLOCATE CHANNEL c1 DEVICE TYPE DISK; ALLOCATE CHANNEL c2 DEVICE TYPE DISK; VALIDATE DATAFILE 1 SECTION SIZE 1200M; } |
3、使用BACKUP VALIDATE 校验数据文件
可以使用BACKUP VALIDATE命令执行以下操作:
- 检查数据文件的物理或者逻辑坏块
- 确保所有的数据库文件都存在并且存放在正确的位置
当运行BACKUP VALIDATE时,RMAN读取要完整备份的文件,与在实际备份过程中一样。 但是,RMAN实际上不会生成任何备份集或映像副本。
注意
不能将BACKUPSET,MAXCORRUPT或PROXY参数与BACKUP VALIDATE一起使用。 要验证特定的备份集,需要运行VALIDATE命令
本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!