星期五, 3月 24, 2017

[轉載] Oracle Goldengate on 9i DB當某個table的column超過32個欄位的時候, 對表格的處理方法

Ref: http://www.itpub.net/thread-1751245-1-1.html

add trandata user.table的含義
有兩層含義:
第一層含義: tablePK or UK ,則目標端能準確依據PK or UK,從而找到來源端DML更新的資料,從而在目標端同步。
第二層含義: table沒有PK or UK,則目標端只能依據該table的所有列,從而找到源端DML更新的資料,從而在目標端同步。

還有一種語法和add trandata作用相同,如下:
alter table user.table add  supplemental log group ggs_table_1 (PK or UK) always;   ---和第一層含義等效(有主鍵或唯一建)。
alter table user.table add  supplemental log group ggs_table_1 (all column) always;  ---和第二層含義等效(沒有主鍵或唯一建)。

延伸一下:

當某個tablecolumn超過32個欄位且無PK的時候,使用add trandata去新增supplemental log就會報出錯(Oracle 10g之後的版本已經沒有這個add supplemental log32個欄位的限制):
WARNING OGG-00706 Failed to add supplemental log group on table user.table due to ORA-02257: maximum number of columns exceeded ......
這個時候,就要使用
alter table user.table add  supplemental log .....這種方式才可。
這個時候,要分兩種情況:
第一情況是,表格欄位超過32個,但是有主鍵或唯一建
第二情況是,表格欄位超過32個,沒有主鍵或唯一建

對於第一種情況,如下解決:

alter table user.table add  supplemental log group ggs_table_1 (PK or UK) always;

對於第二種情況,要複雜一些:

alter table user.table add  supplemental log group ggs_table_1 (all column <32) always;

alter table user.table add  supplemental log group ggs_table_2 (all colum >32) always;

在延伸一下:
還有一種情況是,使用add trandata的時候,但table沒有UK,PK的時候,又不允許把所有的列當做關鍵列來同步資料,這時候,怎麼辦?

這個問題,解決起來,比較複雜:
可以參考這個連結:

或是我在blogger寫的另一篇文章
  alter table <table_name> add OGG_KEY_ID raw(16);
 .
 .
alter table default sys_guid();

沒有留言:

LinkWithin-相關文件

Related Posts Plugin for WordPress, Blogger...