诊断和响应故障_验证数据库文件和备份
迪丽瓦拉
2024-03-26 22:56:28
0

本章阐述如何检查数据库文件和备份的完整性。

1.RMAN验证概述

验证让你可以检查备份的完整性。

1.1.RMAN验证的目的

RMAN验证的主要目的是检查损坏块和缺失的文件。也可以使用RMAN确认备份是否可以被还原。

可以使用以下RMAN命令来执行验证:
1) VALIDATE
2) BACKUP … VALIDATE
3) RESTORE … VALIDATE


1.2.RMAN验证的基本概念

数据库阻止会导致备份文件不可用或还原的数据文件损坏的操作。

数据库自动执行以下操作:
1)当正在进行还原或恢复时阻止对数据文件访问
2)每个数据文件一次只允许一个还原操作
3)确保增量备份以正确的顺序应用
4)存储信息在备份文件中来允许检测损坏
5)每次读或写时检查块试图在检测到损坏时尽快报告


1.2.1.关于校验和与损坏块

损坏块是一个已经被更改但与Oracle数据库预计找到的不同的块。

块损坏可能是几种不同的故障造成,包含但不限于以下几种:
1) 故障磁盘和磁盘控制器
2) 故障内存
3) 数据库软件缺陷

DB_BLOCK_CHECKSUM是为数据库中的数据文件和在线redo日志文件(不是备份)的块控制写校验和的初始化参数。如果DB_BLOCK_CHECKSUM是typical,那么数据库在正常操作过程中为每个块计算校验和,在写到磁盘之前存储它在块的头部。当数据库以后从磁盘读取块时,它重新计算校验和并与存储的值比较。如果值不匹配,那么块是损坏的。

缺省情况下,BACKUP命令为每个块计算校验和并存储它在备份中BACKUP命令忽略DB_BLOCK_CHECKSUM的值,因为这个初始化参数应用到数据库中的数据文件,而不是备份

注:如果指定NOCHECKSUM选项,那么当创建备份时,RMAN不为块执行校验和计算。


1.2.2.关于物理和逻辑块损坏

在物理损坏中,也被称为介质损坏,数据库根本不能识别到块:校验和是无效的,块包含的全是零,或块的头部和尾部不匹配。

在逻辑损坏中,块的内容是逻辑不一致的。逻辑损坏的示例包括行片或索引条目的损坏。如果RMAN检测到逻辑损坏,那么它记录块在alert日志和服务器会话跟踪文件中。

缺省情况下,RMAN不检查逻辑损坏。如果在BACKUP命令中指定CHECK LOGICAL,那么RMAN测数试据和索引块的逻辑损坏,比如行片或索引条目的损坏,记录它们在ADR(Automatic Diagnostic Repository)中的alert日志中。当备份或还原文件时,如果与以下配置一起使用RMAN,那么它检测所有可能检测到的块损坏类型:
1)在数据库的初始化参数文件中,设置DB_BLOCK_CHECKSUM=typical,这样数据库自动计算数据文件(不是为备份,而是为数据库使用的数据文件)的校验和
2)不在BACKUP命令前设置SET MAXCORRUPT,以便RMAN不容许任何未标记的块损坏
3)在BACKUP命令中,不指定NOCHECKSUM选项,以便RMAN在写备份时计算校验和
4)在BACKUP和RESTORE命令中,指定CHECK LOGICAL选项,以便RMAN检查逻辑和物理损坏


1.2.3.关于RMAN备份中的损坏块的限制

可以使用SET MAXCORRUPT命令设置RMAN备份的文件中允许的未标记的损坏总数。缺省值是0,意味着RMAN不容许任何类型的未标记损坏块。

当RMAN在备份过程中遇到一个未标记的损坏块时,如果超过MAXCORRUPT限制,那么RMAN终止备份。否则,RMAN使用一个特殊的标记块损坏的头部将新的检测到的损坏块写到备份。可以使用VALIDATE命令确认哪些块被标记为损坏和找到任何未标记的损坏块。

因为RMAN在备份中允许标记的损坏块和因为RMAN可以被指示允许未标记的损坏块在备份中标记为损坏(当使用MAXCORRUPT时),是可能还原有几个块被标记为损坏的数据文件。如果备份这个还原的数据文件(假设没有新的损坏发生),即使没有设置MAXCORRUPT,备份也会成功。这是因为之前标记的损坏不会阻止RMAN完成备份


1.2.4.关于检测块损坏

Oracle数据库支持不同的技术来检测,修复和监控块损坏。

这个技术取决于损坏是否是块间损坏(interblock corruption)或块内(intrablock corrupt)。在块内损坏中,损坏只发生在块本身。这个损坏可以是物理或逻辑的。在块间损坏中,损坏发生在块之间和只能是逻辑的

例如,视图V$DATABASE_BLOCK_CORRUPTION记录块内损坏,而自动诊断仓库(ADR)跟踪所有损坏类型。下表总结了数据库如何对待不同的块损坏类型。

反应块内损坏块间损坏
检测所有数据库工具检查块内损坏,包括RMAN(例如BACKUP命令)和DBVERIFY工具。如果数据库进行遇到ORA-1578错误,那么它能检测到损坏和监控它。只有DBVERIFY和ANALYZE语句检测到块间损坏。
跟踪视图V$DATABASE_BLOCK_CORRUPTION显示数据库组件比如RMAN命令,ANALYZE,SQL查询等标记的损坏。任何遇到块内损坏的进程记录块损坏在这个视图和ADR中。数据库监控这种类型的块损坏在ADR中。
修复修复技术包括块介质恢复,还原数据文件,使用增量备份恢复,块新化(newing)。块介质恢复可以修复物理损坏,但不可以修复逻辑损坏。任何修正或检测块被修复的RMAN命令更新V$DATABASE_BLOCK_CORRUPTION。例如,RMAN在成功块介质恢复的末尾更新仓库。如果BACKUP,RESTORE或VALIDATE命令检测到块不再损坏,那么它从视图中移除修复的块。必须使用手动技术比如删除对象,重建索引等修正块间损坏

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命令和期望的选项。

例如,验证所有数据文件和控制文件(和spfile如果使用的话),在RMAN提示符下执行以下命令:
RMAN> VALIDATE DATABASE;

或者,通过使用以下示例显示的命令格式可以验证一个特定的备份集:
RMAN> VALIDATE BACKUPSET 22;

以下示例说明如何检查数据文件中的个别数据块的损坏:
RMAN> VALIDATE DATAFILE 1 BLOCK 10;

并行验证数据文件
如果必须验证一个大的数据文件,那么RMAN可以通过把文件分成段和并行处理每个文件段来让工作并行执行。如果配置或分配了多个通道,想让通道并行验证,那么在VALIDATE命令中指定SECTION SIZE参数。

如果指定的SECTION SIZE大于文件大小,那么RMAN不创建文件段。如果指定一个小的会产生多于256个段的段大小,那么RMAN增大段大小到一个会刚好产生256段的值。

并行验证数据文件:
1) 启动RMAN,连接到目标数据库。目标数据库必须处于挂载或打开状态。

2) 运行VALIDATE和SECTION SIZE参数。
以下示例分配两个通道验证大数据文件。
RUN
{
ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
ALLOCATE CHANNEL c2 DEVICE TYPE DISK;
VALIDATE DATAFILE 1 SECTION SIZE 1200M;
}


3.使用BACKUP VALIDATE命令验证数据库文件

也可以使用BACKUP VALIDATE命令执行验证。

这个命令可以执行以下任务:
1)检查数据文件的物理和逻辑块损坏
2)确认所有数据库文件存在和位于正确的位置

当运行BACKUP VALIDATE命令时,RMAN如真正备份的过程中一样全面读取要备份的文件。然而,RMAN不会实际产生任何备份集或映像副本。

可以在BACKUP VALIDATE中使用BACKUPSET,MAXCORRUPT或PROXY参数。验证特定的备份集,请运行VALIDATE命令。

使用BACKUP VALIDATE命令验证文件:
1) 启动RMAN,连接到目标数据库和恢复目录(如果有使用的话)。

2)运行BACKUP VALIDATE命令。

例如,可以运行以下示例中的命令验证所有可以备份的数据库文件和归档日志。这个命令只检查物理损坏。
BACKUP VALIDATE
    DATABASE
    ARCHIVELOG ALL;

检查除了物理损坏以外的逻辑损坏,运行以下命令:
BACKUP VALIDATE
    CHECK LOGICAL

    DATABASE
    ARCHIVELOG ALL;

在命令执行过程中,RMAN客户端显示真正备份文件一样的输出。如果RMAN不能备份一个或多个文件,那么它报告错误信息。例如,RMAN可能会显示类似以下的输出:

RMAN-00571:==========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS===============
RMAN-00571:==========================================================
RMAN-03002: failure of backup command at 08/29/2013 14:33:47
ORA-19625: error identifying file /oracle/oradata/trgt/arch/archive1_6.dbf
ORA-27037: unable to obtain file status
SVR4 Error: 2: No such file or directory
Additional information: 3

4.在还原前验证备份

可以使用RESTORE … VALIDATE来测试RMAN是否可以从备份中还原特定的文件或文件集。RMAN选择使用哪个备份。

命令要求数据库必须处于挂载或打开的状态。当验证数据文件的还原时,不需要将数据文件脱机,因为数据文件的备份的验证只读取备份,不影响生产的数据文件。

当验证文件在磁盘或磁带上时,RMAN读取备份片或映像副本中的所有块。RMAN也验证异地的备份。验证等同于一个真正的还原操作,除了RAMN不写输出文件之外。

RMAN也允许指定正在验证的备份片的副本序号。

注:作为额外的测试方法,可以使用RECOVER … TEST命令执行试验恢复。试验恢复以一种类似正常恢复的方式应用redo,但只在内存中,在试验之后回滚它的更改。

使用RESTORE命令验证备份:
1)运行RESTORE命令和VALIDATE选项。
以下示例说明验证数据库和所有归档redo日志的还原:
RESTORE DATABASE VALIDATE;
RESTORE ARCHIVELOG ALL VALIDATE;

如果没有看到RMAN错误堆栈,那么跳过接下来的步骤。缺少错误信息意味着RMAN已经确认可以在真正的还原和恢复过程中成功使用这些备份。

2)如果在输出中看到错误信息和RMAN-06026信息,那么调查问题的起因。如果可能,修正阻止RMAN验证备份的问题和重新尝试验证。

以下错误意味着RMAN不能从可用的备份中还原一个或多个指定的文件:

RMAN-06026: some targets not found - aborting restore

以下输出显示RMAN遇到读取特定备份的问题:

RMAN-03009: failure of restore command on c1 channel at 12-DEC-12 23:22:30
ORA-19505: failed to identify file "oracle/dbs/1fafv9gl_1_1"
ORA-27037: unable to obtain file status
SVR4 Error: 2: No such file or directory
Additional information: 3



来源:《Oracle Database Backup and Recovery User’s Guide,19c》

相关内容