合 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选择。