OGG初始單表的方法 goldengate–使用filter+@GETENV線上重新初始化指定的table

秋去天無邊發表於2016-05-26

在oracle-oracle goldengate的複製環境中,有時候會碰到一些緊急的問題一時無法修復,為了避免影響整個複製環境的複製進度,採取跳過錯誤事務或者跳過特定物件的辦法使得goldengate繼續同步;如果後續某個表不得不需要重新同步,而且應用是不間斷進行事務操作的,在不停止應用和重建整個複製環境的情況下,為了保證資料的一致性,如何線上對特定的問題物件重新初始化和繼續同步呢?

處理的辦法還是不少的,下面給出一個在replicat端過濾SCN事務的辦法,來實現資料的一致同步。

處理的思路就是首先在target上獲得該表上某個特定SCN版本上的資料(比如使用匯入匯出或者資料泵),然後透過filter功能來篩選出該表上大於該commit scn的事務,從而確保事務的一致性。在goldengate v10之後,可以透過@GETENV函式直接獲得事務的CSN。

簡單看一下處理步驟,假設目前gg環境中hr.translog表需要重新初始化,由source端hr使用者同步到target端hr2使用者下。

1.停止target上的replicat程式

GGSCI (sh) 44> stop rep_hr2

Sending STOP request to REPLICAT REP_HR2 …
Request processed.

2.獲得source上hr.translog表的特定SCN一致性版本

SQL> select dbms_flashback.get_system_change_number from dual;

9543774

使用exp進行一致性版本匯出

[oracle@gz ~]$ exp hr/hr tables=translog file=translog.dmpflashback_scn=9543774

Export: Release 10.2.0.1.0 – Production on Tue Aug 9 00:27:42 2011

Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – 64bit Production
With the Partitioning, OLAP and Data Mining options 
Export done in US7ASCII character set and AL16UTF16 NCHAR character set 
server uses ZHS16GBK character set (possible charset conversion)

About to export specified tables via Conventional Path …
. . exporting table TRANSLOG 5062409 rows exported 
EXP-00091: Exporting questionable statistics. 
Export terminated successfully with warnings.

3. target上匯入一致性版本

[oracle@gz ~]$ imp hr2/hr2@sh tables=translog file=translog.dmp ignore=y

Import: Release 10.2.0.1.0 – Production on Tue Aug 9 00:28:36 2011

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – 64bit Production
With the Partitioning, OLAP and Data Mining options

Export file created by EXPORT:V10.02.01 via conventional path

Warning: the objects were exported by HR, not by you

import done in US7ASCII character set and AL16UTF16 NCHAR character set
import server uses ZHS16GBK character set (possible charset conversion) 
. importing HR’s objects into HR2 
. importing HR’s objects into HR2 
. . importing table "TRANSLOG" 50624 rows imported 
IMP-00017: following statement failed with ORACLE error 30567: 
"ALTER TABLE "TRANSLOG" ADD SUPPLEMENTAL LOG GROUP "GGS_TRANSLOG_56459" ("OB"
"JECT_ID") ALWAYS" 
IMP-00003: ORACLE error 30567 encountered 
ORA-30567: name already used by an existing log group 
Import terminated successfully with warnings.

4. 修改replicat引數,過濾hr.translog上小於SCN 9543774上的事務。

GGSCI (sh) 43> view param rep_hr2

replicat rep_hr2
USERID gg, PASSWORD AACAAAAAAAAAAACANJPHHDSJCIYCFCZB,ENCRYPTKEY DEFAULT 
assumetargetdefs 
map hr.translog, target hr2.translog,filter (@GETENV ("transaction", "csn") > 9 
543774); 
map hr.org, target hr2.org;

map hr.unp_file, target hr.unp_file;

5. 啟動replicat程式

GGSCI (sh) 2> start rep_hr2

Sending START request to MANAGER …
REPLICAT REP_HR2 starting

採用這種辦法,即使source上hr.translog表不斷被DML,因為SCN過濾的存在,保證了複製過程中的資料一致性。對source上的應用來講,也無須額外的停機時間。在初始化過程中,因為target上覆制程式的暫停,會影響到複製的實時性, 為減少target上replicat的暫停時間,可以採用分割datapump和replicate group的方法,也可實現特定物件的線上初始化

轉載地址:http://blog.csdn.net/xmallwood/article/details/8964621

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

相關文章