有時候ogg兩端數據不一致,且數據量較大,手工修改比較複雜的情況下,我們需要對這些表進行初始化。初始化的大概思路是:

1. 停止兩端OGG

2. 如果業務不可以停很長時間,就需要配置目標端進程,暫停這些問題表的同步。待新數據導入後,再次停啓進程

3. 源端通過SCN號備份問題表,傳送到目標端還原

4. 修改目標端進程配置,從SCN開始恢復

5. 開啓OGG進程

源端簡陋配置:

GGSCI (db1) 9> info all 
Program Status Group Lag at Chkpt Time Since Chkpt 
MANAGER RUNNING 
EXTRACT RUNNING EXTFPZX 00:00:00 00:00:05 

GGSCI (db1) 10> view params EXTFPZX 
extract extfpzx 
userid ogg,password ogg 
rmthost 192.168.25.101,mgrport 7809  
rmttrail /u01/goldengate/dirdat/fp 
ddl include mapped objname db_fpzx.*; 
table db_fpzx.*;

目標端簡陋配置:

GGSCI (db2) 6> info all 
Program Status Group Lag at Chkpt Time Since Chkpt 
MANAGER RUNNING 
REPLICAT RUNNING REPFPZX 00:00:00 00:00:01 
GGSCI (db2) 7> view params REPFPZX 
REPLICAT repfpzx 
USERID ogg,PASSWORD ogg 
discardfile /u01/goldengate/discard/rep2_discard.dsc, append, megabytes 10 
DDL INCLUDE MAPPED 
DDLERROR DEFAULT IGNORE RETRYOP 
ASSUMETARGETDEFS  
map db_fpzx.*, target db_fpzx.*;

我們對”liuliu”這張表進行初始化

SQL> select * from liuliu; 
ID AGE NAME EEE WWW 
---------- ---------- -------------------- -------------------- -------------------- 
2 liu liuliu222 
3 liu 123 liuliu333 
4 liu liuliu444 
5 liu liuliu555 
6 liu liuliu666 
1 liu liuliu222 
7 liu liuliu222 
8 shshshs liuliu222 
9 liu liuliu222 
9 rows selected.

我們將目標端中的數據刪除,再在源端插入幾條數據,是不會報錯的,但是此時兩端數據已經不一致了,需要對目標端進行初始化。一般來説初始化是在你不知道丟失哪些數據的情況下進行,如果差個兩三條你知道的數據,直接在目標端進行插入或修改更快。

SQL> delete from liuliu; 
9 rows deleted. 
SQL> commit; 
Commit complete. 
SQL> select * from liuliu;  
no rows selected

1、停止兩端OGG進程

源端查詢SCN號:

SQL> select dbms_flashback.get_system_change_number from dual; 
GET_SYSTEM_CHANGE_NUMBER 
------------------------ 
729295

2、源端通過SCN號備份問題表,傳送到目標端還原

l 備份

exp db_fpzx/fpzx file=/u01/backup/db_fpzx20161129.dmp tables=(liuliu) log=/u01/backup/db_fpzx20161129.log flashback_scn=729295

l 傳輸

scp db_fpzx20161129.dmp oracle@192.168.25.101:/u01/backup

l 還原

imp system/oracle file=/u01/backup/db_fpzx20161129.dmp fromuser=db_fpzx touser=db_fpzx tables=liuliu ignore=y

3、修改目標端進程配置,從SCN開始還原

GGSCI (db2) 44> edit params REPFPZX  
REPLICAT repfpzx 
USERID ogg,PASSWORD ogg 
discardfile /u01/goldengate/discard/rep2_discard.dsc, append, megabytes 10 
DDL INCLUDE MAPPED 
DDLERROR DEFAULT IGNORE RETRYOP 
ASSUMETARGETDEFS 
map db_fpzx.liuliu, target db_fpzx.liuliu, filter (@GETENV("transaction","csn") >729295);
map db_fpzx.*,target db_fpzx.*; 
~

~4、啓動OGG,查詢兩端狀態