OGG add Supplemental Logging 时失败,报错为 块损坏(Block Corruption)
适用于:
Oracle Server - Enterprise Edition - Version 10.2.0.5 to 12cBETA1 [Release 10.2 to 12.1]
Information in this document applies to any platform.
症状:
在GoldenGate环境中,GoldenGate是基于 supplemental logging的。
突然你发现 supplemental logging 没有设置,然后你尝试开启 supplemental logging,但是失败了,报错如下:
SQL> alter database add supplemental log data;
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 234, block #3760863)
ORA-01110: data file 1257:'+CRMDB01/oradata/prdcrmdb/loy119.dbf'
变化:
控制文件被重建过
原因:
当你重建控制文件时,supplemental logging 被设置为默认值,即:none
尝试手工enable supplemental logging 时,oracle会检查有无active transaction,
oracle 会等待这些active transaction完成,同时,oracle也会检查涉及到的objects
如果被active transaction涉及到的objects 有坏块(corruption),那么add supplemental logging 会失败。
解决方案:
无论什么时候,当你需要重新创建控制文件时,你需要在控制文件创建脚本中加入下面一行:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
当你手工add supplemental logging,并且 active transaction涉及到的objects有坏块时,add supplemental logging 会报错:ora-1578
你必须首先解决掉坏块,然后再add the supplemental logging.
注意:从该篇mos文档中,我体会到了该mos文章的潜在作用:
1.找到了一种检查坏块(block corrupt)的方法,虽然该方法有点歪门邪道。
该方法的使用场景有限:
A. 用OGG(做alter database add supplemental log data时)
B. 有active transaction
C. active transaction中涉及到的object 有损坏。
以上ABC三点必须同时满足,才能检查出坏块(corruption)
2.在客户现场实施OGG时,有可能会遇到此种情况,那么有些人可能说:你看看,OGG把Oracle 数据库弄出坏块(block corrupt)来了。
此时,可以搬出本mos文章救驾---OGG不会让Oracle 数据库出现坏块,相反:OGG的 alter database add supplemental log data会检查 active transaction 涉及到的object有无坏块。