GoldenGate 12c 在原有同步程式中新增同步表的操作步驟

gaia發表於2020-09-03


  在原有同步程式裡新增同步表的時候,考慮到源端表上可能會有事務,資料是實時變化的,不能單純的使用expdp直接匯出再匯入,這樣可能會導致丟失資料或者資料重複衝突。針對這種情況,有兩種方法可以實現在原有同步程式裡新增新表並且可以保證資料一致性,一種是基於SCN的expdp匯出,還有一種是基於SCN的flashback query和dblink遠端插入(適用於表資料量不大的情況)。



示例:



1.使用基於SCN的expdp匯出方法新增表的同步:

 1.1 在登入主庫,新增該表的附加日誌


GGSCI (ngppdg) 4> info credentialstore
Reading from ./dircrd/:
Default domain: OracleGoldenGate
  Alias: NGPDBDG
  Userid: ogg@ngppdg
  Alias: NGPDB
  Userid: ogg@NGPDB
GGSCI (ngppdg) 5> dblogin useridalias NGPDB
Successfully logged into database.
GGSCI (ngppdg as ogg@ngpdb2) 6> ADD TRANDATA,ZYNGPRD.PRODUCT_YPDX_GEO;
檢視附加日誌是否新增成功:


GGSCI (ngppdg as ogg@ngpdb2) 7> INFO TRANDATA,ZYNGPRD.PRODUCT_YPDX_GEO
Logging of supplemental redo log data is enabled for table ZYNGPRD.PRODUCT_YPDX_GEO.
Columns supplementally logged for table ZYNGPRD.PRODUCT_YPDX_GEO: GEO_ID, PRODUCT_ID, SALE_PRODUCT_ID.
Prepared CSN for table ZYNGPRD.PRODUCT_YPDX_GEO: 33731391784


1.2 編輯抽取程式新增該表,重啟抽取程式


GGSCI (ngppdg as ogg@ngpdb2) 8> edit params ngp_e01
GGSCI (ngppdg as ogg@ngpdb2) 9> view params ngp_e01
EXTRACT NGP_E01
SETENV (NLS_LANG = "AMERICAN_AMERICA.AL32UTF8")
USERIDALIAS NGPDBDG
FETCHOPTIONS USESNAPSHOT
FETCHOPTIONS USELATESTVERSION
LOGALLSUPCOLS
UPDATERECORDFORMAT FULL
TRANLOGOPTIONS MINEFROMACTIVEDG
EXTTRAIL /u01/app/OGG12_2/dirdat/ng
TABLE ZYNGPRD.PRODUCT_SHIPMENT_BOX_TYPE;
TABLE ZYNGPRD.E_PRODUCT_STORE_ADDRESS;
TABLE ZYNGPRD.STORE_STATUS;
TABLE ZYNGPRD.PARTY_TYPE;
TABLE ZYNGPRD.PARTY_GROUP;
TABLE ZYNGPRD.GEO;
TABLE ZYNGPRD.PRODUCT_STORE_TYPE;
TABLE ZYNGPRD.PRODUCT_STORE;
TABLE ZYNGPRD.PRODUCT;
TABLE ZYNGPRD.PRODUCT_TYPE;
TABLE ZYNGPRD.ZDEV_PARAM_CONTENT;
TABLE ZYNGPRD.UOM;
TABLE ZYNGPRD.GOOD_IDENTIFICATION;
--20200821
TABLE ZYNGPRD.PRODUCT_YPDX_GEO;
GGSCI (ngppdg as ogg@ngpdb2) 10> stop ngp_e01
Sending STOP request to EXTRACT NGP_E01 ...
STOP request pending end-of-transaction (1 records so far)..
GGSCI (ngppdg as ogg@ngpdb2) 11> start ngp_e01
Sending START request to MANAGER ...
EXTRACT NGP_E01 starting

1.3編輯pump程式,新增該表


GGSCI (ngppdg as ogg@ngpdb2) 13> edit params ngp_p01    
GGSCI (ngppdg as ogg@ngpdb2) 14> stop ngp_p01        
Sending STOP request to EXTRACT NGP_P01 ...
Request processed.
GGSCI (ngppdg as ogg@ngpdb2) 15> start ngp_p01
Sending START request to MANAGER ...
EXTRACT NGP_P01 starting
GGSCI (ngppdg as ogg@ngpdb2) 16> view params ngp_p01

1.4 檢視當前複製程式狀態,確認無延遲後,停止複製程式,查詢主庫當前的SCN

GGSCI (zysf as ogg@crmngpsd) 8> lag ngp_r01
Sending GETLAG request to REPLICAT NGP_R01 ...
Last record lag 5 seconds.
Low watermark lag: 6.
High watermark lag: 6.
Low watermark position: 37244483463.
High watermark position: 37244483468.
At EOF, no more records to process.
GGSCI (zysf as ogg@crmngpsd) 9> stop ngp_r01
Sending STOP request to REPLICAT NGP_R01 ...
Request processed.
[oracle@NGPDB01 ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Thu Sep 3 14:54:38 2020
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
SQL> select to_char(current_scn) from v$database;
TO_CHAR(CURRENT_SCN)
----------------------------------------
33731759127

1.5 在主庫執行基於SCN的expdp匯出,並上傳到目標資料庫伺服器上進行匯入


expdp \'/ as sysdba\' directory=dmpdir dumpfile=T.dmp tables=ZYNGPRD.PRODUCT_YPDX_GEO compression=all flashback_scn=33731759127
impdp \'/ as sysdba\' directory=dumpdir dumpfile=T.dmp
 


1.6 編輯複製經常,新增同步表的對映關係


GGSCI (zysf as ogg@crmngpsd) 12> edit params ngp_r01


--新增如下內容,注意標紅的部份,新增匯出時的SCN號,這樣啟動程式後,該表會從該SCN往後應用trail日誌,實現資料的一致性
MAP ZYNGPRD.PRODUCT_YPDX_GEO, TARGET ZYNGPRD.PRODUCT_YPDX_GEO, FILTER ( @GETENV ('TRANSACTION', 'CSN') >33731759127);


1.7 啟動複製程式


GGSCI (zysf as ogg@crmngpsd) 13> start ngp_r01
Sending START request to MANAGER ...
REPLICAT NGP_R01 starting

2.使用基於SCN的flashback query +dblink遠端插入


  和第一種方式相比,該方式除了上面1.5的步驟不一樣,其他步驟基本上是一致的。這裡就不重複把全部步驟寫出,只寫出和第一種方式不同的步驟,之前的操作參考1.1-1.4

 2.1 源端匯出表結構建表語句.sql的檔案,並去目標端資料庫執行建立表

 CREATE TABLE "ZYNGPRD"."PRODUCT_YPDX_GEO"
   ("GEO_ID" VARCHAR2(20),
"SALE_PRODUCT_ID" VARCHAR2(20),
"PRODUCT_ID" VARCHAR2(20),
"MEMO" VARCHAR2(200),
"UDP1" VARCHAR2(200),
"USER_ID" VARCHAR2(25),
"UPDATE_USER_ID" VARCHAR2(25),
"LAST_UPDATED_STAMP" TIMESTAMP (6),
"LAST_UPDATED_TX_STAMP" TIMESTAMP (6),
"CREATED_STAMP" TIMESTAMP (6),
"CREATED_TX_STAMP" TIMESTAMP (6),
  CONSTRAINT "PK_PRODUCT_YPDX_GEO" PRIMARY KEY ("GEO_ID", "SALE_PRODUCT_ID", "PRODUCT_ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "ZYNGPRD_TBS"


 2.2 進行基於flashback query和dblink的遠端插入操作

 --目標端資料庫執行下面插入,其中 NGPDBDG 是源端資料庫的dblink

  INSERT INTO ZYNGPRD.PRODUCT_YPDX_GEO SELECT * FROM ZYNGPRD.PRODUCT_YPDX_GEO@NGPDBDG AS OF SCN 33731759127;

後續操作參考1.6-1.7



總結:這兩種在原有程式裡新增表同步的方法實質上都是基於SCN的匯出操作,如果時從備庫抽取資料,並且主庫有一定限制不方便使用expdp進行匯出,那麼就可以使用第二種方法,否則可以在大量資料的情況下,第一種方法的效率更高。需要注意的兩點就是:1.執行scn的匯出或者閃回查詢遠端插入之前, 一定要停止複製程式,這樣防止丟失匯出到停止複製程式這段時間的事務變化的資料。2.最後啟動複製程式的時候, 不能執行start XXX,aftercsn xxxxxxxx這樣去啟動,否則會丟失除了這張表以外該程式所有表在停止複製程式和開始基於SCN匯出時這段時間內的所有資料,這種方法只適用於新增同步程式裡新增表的操作。


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

相關文章