驗證ogg同步數據庫表無主鍵表且目標表包含隱藏字段



問題描述:

已知:OGG在同步無主鍵的表時,OGG會自動設置表的全字段為主鍵,若目標表字段多於源表,同步過程中replicat進程可以讀取insert操作但無法進行update/delete操作,從而導致replicat進程abend。

探究Oracle12c引入了一個新特性——隱藏字段,若將目標表多的字段隱藏,ogg是否能進行正常同步。

環境准備:

在同一數據庫中不同用戶下進行ogg同步,源端用戶oggs,目標端用戶oggt。

源端創建A表結構:

SQL>create table oggs.A(id number,name varchar2(12));

clip_image001

目標端創建A表結構:

SQL>create table oggt.A(id number,name varchar2(12),time timestamp(6) invisible);

clip_image002

注:seletc * from…不會出現隱藏字段,必須顯示select隱藏字段 才能顯示。

OGG進程配置:

extract進程配置

extract ex

dynamicresolution

userid oggs,password oggs

exttrail ./dirdat/as

table oggs.A;

pump進程配置

extract pu

RMTHOST 127.0.0.1, MGRPORT 7909

RMTTRAIL ./dirdat/at

table oggs.A;

replicat進程配置

REPLICAT re

DBOPTIONS INTEGRATEDPARAMS(parallelism 6)

USERID oggt, PASSWORD oggt

MAP oggs.A, target oggt.A, colmap(useDefaults, oggtime=@datenow());

啟動測試:

1啟動源端ex、pu進程,目標端re進程;

在啟動ex過程中OGG報錯: ERROR OGG-02022 Logmining server does not exist on this Oracle database.

***解決方案:GGSCI>register extract ex database

2源端A表插入數據:

SQL> insert into oggs.A values(1,'a');

1 row inserted

SQL> commit;

Commit complete

SQL> select * from oggs.A;

ID NAME

---------- ------------

1 a

3目標端查詢數據是否插入:

SQL> select id,name,time from oggt.A;

ID NAME TIME

---------- ------------ --------------------------------------------------------------------------------

1 a 20-9月 -19 02.06.22.000000 下午

4源端update數據:

SQL> update oggs.A set name='b' where id=1;

1 row updated

SQL> commit;

Commit complete

SQL> select * from oggs.A;

ID NAME

--------- ------------

1 b

5目標端查詢數據是否更新:

SQL> select id,name,time from oggt.A;

ID NAME TIME

--------- ------------- --------------------------------------------------------------------------------

1 a 20-9月 -19 02.06.22.000000 下午

6查看目標端OGG replicat進程報告:

GGSCI>view report re

2019-09-20 14:15:28 ERROR OGG-01296 Error mapping from OGGS.A to OGGT.A.

2019-09-20 14:15:34 ERROR OGG-01668 PROCESS ABENDING.

Report at 2019-09-20 14:15:34 (activity since 2019-09-20 14:06:22)

From Table OGGS.A to OGGT.A:

# inserts: 1

# updates: 0

# deletes: 0

# discards: 1

顯示插入一個數據,丟棄一個數據。

結果:同步失敗。

*若給re進程重新配置,添加指定keycols(id,name)

REPLICAT re

DBOPTIONS INTEGRATEDPARAMS(parallelism 6)

USERID oggt, PASSWORD oggt

MAP oggs.A, target oggt.A, keycols(id,name),colmap(useDefaults, time=@datenow());

*重啟re進程,目標端查詢數據:

SQL> select id,name,time from oggt.A;

ID NAME TIME

---------- ------------ --------------------------------------------------------------------------------

1 b 20-9月 -19 02.29.07.000000 下午

GGSCI>view report re

Report at 2019-09-20 14:36:31 (activity since 2019-09-20 14:29:07)

From Table OGGS.A to OGGT.A:

# inserts: 1

# updates: 1

# deletes: 0

# discards: 0

顯示插入一個數據,更新一個數據。

結果:同步正常進行

結論:在同步無主鍵的表時,即使將目標表的多出的字段隱藏,若不指定keycols,同樣會導致OGG 同步update、delete失敗。

因此,在同步沒有主鍵的表時,且目標字段與源字段數量不同,此時需在進程中配置keycols或在同步開始之前在數據庫中為需要同步的表設定主鍵。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM