Email: service@parnassusdata.com 7 x 24 online support!

ORA-00600: internal error code, arguments:[3020] 的解决

ORA-00600: internal error code, arguments:[3020] 的解决

Oracle 解决在恢复时生成的ORA-600[3020] ORA-00600[3020]

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com

ORA-00600: internal error code, arguments:[3020]

 

适用于:

Oracle Database – Enterprise Edition – 版本 9.2.0.1  11.2.0.2 [Release 9.2 to 11.2]
Oracle Database – Enterprise Edition – 版本 11.2.0.4 11.2.0.4 [Release 11.2]
本文信息适用于任何平台。

症状

恢复会话失败:

SQL> recover database;
ORA-00283: recovery session canceled due to errors
ORA-00600: internal error code, arguments: [3020], [13204236], [1], [1],
[33082], [236], [], []
ORA-10567: Redo is inconsistent with data block (file# 3, block# 621324)
ORA-10564: tablespace DATA
ORA-01110: data file 3: ‘<dir>/PROD_Data01.dbf’
ORA-10561: block type ‘TRANSACTION MANAGED DATA BLOCK’, data object# 25535

原因

该错误被称为stuck recovery。当由于当从磁盘读时,块的scn不是预期的scn,重做无法被用于块该错误时,生成该错误。 

解决方案

如果受影响的文件属于SYSTEMUNDO表空间,你应该从备份中还原数据库,并在问题日志被应用之前进行时间点恢复。

如果受影响的文件属于SYSAUX,这是唯一受影响的文件且处于脱机,则比对这个数据库进行时间点恢复更好的选择是创建一个新的数据库,然后使用Transportable Tablespace 功能插入所有其他表空间。另一个要注意的点是:如果SYSAUX 联机ONLINE但包含损坏块,则在考虑还原和恢复之前,使用以上第3点中的SQL来识别受影响的对象并呼叫Oracle Support 询问是否能drop并重建对象。 

对于Data Guard环境,参阅 Note:1265884.1

有关此错误和已知问题的更多细节,请参见:

Note 30866.1 ORA-600 [3020] “Stuck Recovery”

如果你没有可用的备份,那么选择是非常有限的。请打开Service Request请求Oracle Support Service的援助。 除此以外:

1. 使用 Trial Recovery 来确认问题的范围:

SQL> recover database test;

这会告诉你有多少块在恢复后会有损坏 – 检查警报日志获得受影响的块的详情。如果有大量报告的损坏,你可能要考虑从备份中还原并发出时间点恢复。但是,如果仅有一些块被报告损坏,你可以继续恢复:

2. 跳过损坏的块

SQL> recover database allow 1 corruption;

这样进行<n>次,<n>是在上述步骤1中报告的损坏块数量。

这将允许恢复继续,跳过无法被恢复的块,并让他们标记为损坏,在此之后,数据库可以被打开。

3. 取在警报日志中报告的损坏块,并为每个识别块所属的对象:

SQL> SELECT tablespace_name, segment_type, owner, segment_name
FROM dba_extents
WHERE file_id = <file#>
and <block> between block_id AND block_id + blocks – 1;

使用警报日志中报告的file# 和块id替换 <file#> <block>

对于每个被识别的对象– 采取各步骤来解决损坏:

– 如果它属于一个索引,则只要drop并重建索引

– 如果它属于一个用户对象,则考虑重建对象或从对象中尽可能抽取;如果有必要,发出Service Request请求Oracle帮助从损坏对象中抽取数据。 

 

其他相关文档:

Note 1265884.1 Resolving ORA-752 or ORA-600 [3020] During Standby Recovery

Note 283269.1 Stuck recovery of database ORA-00600[3020]

参考

NOTE:28814.1 – Handling Oracle Block Corruptions
NOTE:283269.1 – Stuck recovery of database ORA-00600[3020]
NOTE:1265884.1 – Resolving ORA-752 or ORA-600 [3020] During Standby Recovery
NOTE:30866.1 – ORA-600 [3020] “Stuck Recovery”