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有无坏块。