OGG-01387 【goldengate】表列數超過33個

zhangsharp20發表於2014-09-22

近期在給一客戶配置GoldenGate,在個表新增supplemental log時,即執行add trandata時,有大量的表報如下錯誤:

[html] view plaincopy
  1. GGSCI (racdb1) 148> add trandata ▇▇▇▇▇▇▇▇▇▇  
  2.   
  3. 2013-07-10 10:24:55  WARNING OGG-00869  No unique key is defined for table ▇▇▇▇▇▇▇▇▇▇'.   
  4. All viable columns will be used to represent the key, but may not guarantee uniqueness.  KEYCOLS may be used to define the key.  
  5.   
  6. 2013-07-10 10:24:55  WARNING OGG-01387  Table ▇▇▇▇▇▇▇▇▇▇ has no valid key columns,   
  7. added unconditional supplemental log group for all table columns.  
  8.   
  9. Logging of supplemental redo log data is already enabled for table ▇▇▇▇▇▇▇▇▇▇.  


OGG-00869 是由於表不存在primary key或unique index所致,倒不會有太大影響。但OGG-01387錯誤引起了我的注意,不清楚其究竟,所以不敢忽略它,因此查詢MOS得知,是因為該類的表的列的數量均超過了33列。

 

如果一張表,其列的數量超過33列(含),且沒有primary key的話,則在執行add trandata命令時,會報OGG-01387錯誤,看提示說supplemental redo log data已經被啟用,其實你查詢 dba_log_group_columns可以得到驗證。

 

實際情況是,這樣的表存在200多個,確實挺恐怖的,有的表的列數高達200餘個(不清楚這樣的設計是不是存在缺陷?),於是我透過生成sql指令碼的方式,給這些特殊的表啟用supplemental redo log data。

 

舉一個例子,如表 SCOTT.EMP存在超過33個列,且沒有主鍵的話,那麼手動新增supplemental redo log data的方法是:

  1. alter table scott.emp add supplemental log group ggs_emp_1(col1,col2,...,col33) always;  
  2.   
  3. add table scott.emp add supplemental log  group ggs_emp_2(col34,col35....) always;  


額外提供一個驗證表supplemental log新增是否成功的語句:

  1. select owner,table_name  
  2.      from all_tables  
  3.     where owner in ('SCOTT')  
  4.       and table_name not in (select distinct table_name  
  5.                                from dba_log_group_columns  
  6.                               where owner in ('SCOTT'));  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29802484/viewspace-1276810/,如需轉載,請註明出處,否則將追究法律責任。

相關文章