在备份数据库的时候,出现RMAN-03009、ORA-19566报错:
RMAN-03009: backup 命令 (c3 通道上, 在 04/29/2023 10:58:11 上) 失败
ORA-19566: 超出损坏块限制 0 (文件 E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMR2.DBF)
继续执行其他作业步骤, 将不重新运行失败的作业
RMAN-03009: backup 命令 (c2 通道上, 在 04/29/2023 10:58:18 上) 失败
ORA-19566: 超出损坏块限制 0 (文件 E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMRV63.DBF)
继续执行其他作业步骤, 将不重新运行失败的作业
RMAN-03009: backup 命令 (c1 通道上, 在 04/29/2023 11:04:03 上) 失败
ORA-19566: 超出损坏块限制 0 (文件 E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMRV64.DBF)
继续执行其他作业步骤, 将不重新运行失败的作业
看报错描述是有坏块,而且坏块较多,导致备份失败,检查数据库alert日志:
Fri Apr 28 16:06:43 2023
Corrupt Block Found
TSN = 6, TSNAME = TSP_JHEMR
RFN = 10, BLK = 498361, RDBA = 42441401
OBJN = 76083, OBJD = 79812, OBJECT = PAT_MASTER_INDEX, SUBOBJECT =
SEGMENT OWNER = JHEMR, SEGMENT TYPE = Table Segment
Errors in file e:\app\administrator\diag\rdbms\jhemr\jhemr\trace\jhemr_ora_5364.trc (incident=51031):
ORA-01578: ORACLE 数据块损坏 (文件号 10, 块号 498361)
ORA-01110: 数据文件 10: 'E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMRV63.DBF'
Incident details in: e:\app\administrator\diag\rdbms\jhemr\jhemr\incident\incdir_51031\jhemr_ora_5364_i51031.trc
Fri Apr 28 16:07:01 2023
Trace dumping is performing id=[cdmp_20230428160701]
Fri Apr 28 16:07:01 2023
Sweep [inc][51031]: completed
Hex dump of (file 10, block 498352) in trace file e:\app\administrator\diag\rdbms\jhemr\jhemr\incident\incdir_51031\jhemr_m000_8072_i51031_a.trc
Corrupt block relative dba: 0x02879ab0 (file 10, block 498352)
Fractured block found during validation
Data in bad block:
type: 6 format: 2 rdba: 0x02879ab0
last change scn: 0x0000.9d71bca2 seq: 0x1 flg: 0x06
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0x00000000
check value in block header: 0x2919
computed block checksum: 0xa86b
Reread of blocknum=498352, file=E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMRV63.DBF. found same corrupt data
Reread of blocknum=498352, file=E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMRV63.DBF. found same corrupt data
Reread of blocknum=498352, file=E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMRV63.DBF. found same corrupt data
Reread of blocknum=498352, file=E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMRV63.DBF. found same corrupt data
数据库alert日志中有出现ORA-01578、ORA-01110数据坏块告警。
先通过RMAN VALIDATE校验一下坏块情况:
C:\Users\Administrator>rman target /
恢复管理器: Release 11.2.0.1.0 - Production on 星期六 4月 29 10:24:25 2023
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
连接到目标数据库: JHEMR (DBID=1381176348)
RMAN> validate database;
启动 validate 于 29-4月 -23
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=15 设备类型=DISK
通道 ORA_DISK_1: 正在开始验证数据文件
通道 ORA_DISK_1: 正在指定数据文件进行验证
输入数据文件: 文件号=00008 名称=E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMR1.DBF
输入数据文件: 文件号=00009 名称=E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMR2.DBF
输入数据文件: 文件号=00005 名称=E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMRV61.DBF
输入数据文件: 文件号=00006 名称=E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMRV62.DBF
输入数据文件: 文件号=00007 名称=E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\APJHEMRV64.DBF
输入数据文件: 文件号=00010 名称=E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMRV63.DBF
输入数据文件: 文件号=00011 名称=E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMRV64.DBF
输入数据文件: 文件号=00001 名称=E:\APP\ADMINISTRATOR\ORADATA\JHEMR\SYSTEM01.DBF
输入数据文件: 文件号=00003 名称=E:\APP\ADMINISTRATOR\ORADATA\JHEMR\UNDOTBS01.DBF
输入数据文件: 文件号=00002 名称=E:\APP\ADMINISTRATOR\ORADATA\JHEMR\SYSAUX01.DBF
输入数据文件: 文件号=00012 名称=E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMR65.DBF
输入数据文件: 文件号=00004 名称=E:\APP\ADMINISTRATOR\ORADATA\JHEMR\USERS01.DBF
通道 ORA_DISK_1: 验证完成, 用时: 00:12:35
数据文件列表
=================
文件状态 标记为损坏 空块 已检查的块 高 SCN
---- ------ -------------- ------------ --------------- ----------
1 OK 0 28971 663041 2642827419
文件名: E:\APP\ADMINISTRATOR\ORADATA\JHEMR\SYSTEM01.DBF
块类型 失败的块 已处理的块
---------- -------------- ----------------
数据 0 617083
索引 0 13785
其他 0 3201
文件状态 标记为损坏 空块 已检查的块 高 SCN
---- ------ -------------- ------------ --------------- ----------
2 OK 0 34430 377622 2642832275
文件名: E:\APP\ADMINISTRATOR\ORADATA\JHEMR\SYSAUX01.DBF
块类型 失败的块 已处理的块
---------- -------------- ----------------
数据 0 97534
索引 0 57480
其他 0 188156
文件状态 标记为损坏 空块 已检查的块 高 SCN
---- ------ -------------- ------------ --------------- ----------
3 OK 0 3688 598400 2642827456
文件名: E:\APP\ADMINISTRATOR\ORADATA\JHEMR\UNDOTBS01.DBF
块类型 失败的块 已处理的块
---------- -------------- ----------------
数据 0 0
索引 0 0
其他 0 594712
文件状态 标记为损坏 空块 已检查的块 高 SCN
---- ------ -------------- ------------ --------------- ----------
4 OK 0 481 640 942238
文件名: E:\APP\ADMINISTRATOR\ORADATA\JHEMR\USERS01.DBF
块类型 失败的块 已处理的块
---------- -------------- ----------------
数据 0 15
索引 0 2
其他 0 142
文件状态 标记为损坏 空块 已检查的块 高 SCN
---- ------ -------------- ------------ --------------- ----------
5 OK 0 32532 4194176 2642835455
文件名: E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMRV61.DBF
块类型 失败的块 已处理的块
---------- -------------- ----------------
数据 0 720563
索引 0 1064182
其他 0 2376899
文件状态 标记为损坏 空块 已检查的块 高 SCN
---- ------ -------------- ------------ --------------- ----------
6 OK 0 41704 4194176 2642834758
文件名: E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMRV62.DBF
块类型 失败的块 已处理的块
---------- -------------- ----------------
数据 0 720155
索引 0 1049984
其他 0 2382333
文件状态 标记为损坏 空块 已检查的块 高 SCN
---- ------ -------------- ------------ --------------- ----------
7 FAILED 0 32125 4194176 2642835935
文件名: E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\APJHEMRV64.DBF
块类型 失败的块 已处理的块
---------- -------------- ----------------
数据 0 708816
索引 0 1035407
其他 14 2417828
文件状态 标记为损坏 空块 已检查的块 高 SCN
---- ------ -------------- ------------ --------------- ----------
8 OK 0 7 4194302 2642838719
文件名: E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMR1.DBF
块类型 失败的块 已处理的块
---------- -------------- ----------------
数据 0 504239
索引 0 580859
其他 0 3109197
文件状态 标记为损坏 空块 已检查的块 高 SCN
---- ------ -------------- ------------ --------------- ----------
9 FAILED 0 3353 4194302 2642836629
文件名: E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMR2.DBF
块类型 失败的块 已处理的块
---------- -------------- ----------------
数据 0 421677
索引 0 312738
其他 1 3456534
文件状态 标记为损坏 空块 已检查的块 高 SCN
---- ------ -------------- ------------ --------------- ----------
10 FAILED 0 29169 1615872 2642835408
文件名: E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMRV63.DBF
块类型 失败的块 已处理的块
---------- -------------- ----------------
数据 1 175544
索引 0 108430
其他 12 1302729
文件状态 标记为损坏 空块 已检查的块 高 SCN
---- ------ -------------- ------------ --------------- ----------
11 FAILED 0 136817 1615872 2642835685
文件名: E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMRV64.DBF
块类型 失败的块 已处理的块
---------- -------------- ----------------
数据 0 162777
索引 0 84571
其他 33 1231707
文件状态 标记为损坏 空块 已检查的块 高 SCN
---- ------ -------------- ------------ --------------- ----------
12 OK 0 129817 131072 2642835621
文件名: E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMR65.DBF
块类型 失败的块 已处理的块
---------- -------------- ----------------
数据 0 1104
索引 0 0
其他 0 151
验证找到一个或多个损坏的块
有关详细资料, 请参阅跟踪文件 e:\app\administrator\diag\rdbms\jhemr\jhemr\trace\jhemr_ora_6936.trc
通道 ORA_DISK_1: 正在开始验证数据文件
通道 ORA_DISK_1: 正在指定数据文件进行验证
包括要进行验证的当前控制文件
备份集内包括当前的 SPFILE
通道 ORA_DISK_1: 验证完成, 用时: 00:00:01
控制文件和 SPFILE 的列表
===============================
文件类型 状态 失败的块 已检查的块
------------ ------ -------------- ---------------
SPFILE OK 0 2
控制文件 OK 0 892
完成 validate 于 29-4月 -23
RMAN VALIDATE后,错误信息会记录到v d a t a b a s e b l o c k c o r r u p t i o n 视图中,查询 v database_block_corruption视图中,查询v databaseblockcorruption视图中,查询vdatabase_block_corruption视图:
SQL> select file#,block#,corruption_type from v$database_block_corruption;
FILE# BLOCK# CORRUPTIO
---------- ---------- ---------
7 4109671 ALL ZERO
7 4109668 ALL ZERO
9 504703 CORRUPT
10 498352 FRACTURED
11 913502 ALL ZERO
11 914363 ALL ZERO
11 914358 ALL ZERO
11 914356 ALL ZERO
11 914353 ALL ZERO
11 914350 ALL ZERO
11 914219 ALL ZERO
FILE# BLOCK# CORRUPTIO
---------- ---------- ---------
11 914216 ALL ZERO
11 914213 ALL ZERO
11 914210 ALL ZERO
11 914206 ALL ZERO
已选择15行。
可看到,数据文件坏块较多,通过dba_extents查看坏块上的对象是什么。
SELECT * FROM dba_extents
WHERE file_id = &AFN
and &BL between block_id AND block_id + blocks - 1;
统计了一下,除了一个是索引,其他都是同一张表,索引好处理,drop掉重建,表中有业务数据,需要另外想办法。参考MOS文档:Extracting Data from a Corrupt Table using DBMS_REPAIR or Event 10231 (文档 ID 33405.1)
先通过设置10231事件后尝试创建表。
此次处理过程中,表创建成功,比对下跟原表的数据差异。
比原表少了1473条记录,相对于35W+条记录的表来说,1473算比较可观的数据了,跟业务沟通后,该表是通过另一个库的视图获取数据,业务部门比对下缺失的数据,通过工具重新拉一下数据即可。
表创建成功后,需要马上备份一下数据库,防止有更多的坏块发生,甚至系统表空间坏块发生导致数据库无法启动,但是数据文件有大量的坏块,备份是会有RMAN-03009、ORA-19566报错的。
RMAN-03009: backup 命令 (c3 通道上, 在 04/29/2023 10:58:11 上) 失败
ORA-19566: 超出损坏块限制 0 (文件 E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMR2.DBF)
继续执行其他作业步骤, 将不重新运行失败的作业
RMAN-03009: backup 命令 (c2 通道上, 在 04/29/2023 10:58:18 上) 失败
ORA-19566: 超出损坏块限制 0 (文件 E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMRV63.DBF)
继续执行其他作业步骤, 将不重新运行失败的作业
RMAN-03009: backup 命令 (c1 通道上, 在 04/29/2023 11:04:03 上) 失败
ORA-19566: 超出损坏块限制 0 (文件 E:\APP\ADMINISTRATOR\ORADATA\JHSEMR\JHEMRV64.DBF)
继续执行其他作业步骤, 将不重新运行失败的作业
此时RMAN备份可通过添加set maxcorrupt for datafile参数解决。
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
allocate channel c5 type disk;
set maxcorrupt for datafile 7 to 10;
set maxcorrupt for datafile 9 to 10;
set maxcorrupt for datafile 10 to 10;
set maxcorrupt for datafile 11 to 10;
backup as compressed backupset full database filesperset = 5 format "e:\rman\full_%d_%T_%s";
}
备份完成后,此时,数据库中仍然出现坏块报错,处理步骤规划:
1、新表按照坏表的规格创建索引
2、申请业务停机时间,坏表重命名,例如xxx_old
3、新表重命名为正式业务表名
4、业务比对数据
5、drop坏表