GoldenGate 12c 在原有同步程式中新增同步表的操作步驟
在原有同步程式裡新增同步表的時候,考慮到源端表上可能會有事務,資料是實時變化的,不能單純的使用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- pg 用ogg 同步大概步驟
- Promise-在Java中以同步的方式非同步程式設計PromiseJava非同步程式設計
- ogg 同步pg資料到oracle--步驟Oracle
- Win10便箋如何同步 Win10便籤同步的設定步驟Win10
- 可以中斷的非同步操作非同步
- DKHhadoop叢集新增節點管理功能的操作步驟Hadoop
- 操作步驟
- JS中的非同步操作總結JS非同步
- Win10系統中PIN碼新增、修改以及刪除的操作步驟Win10
- win10新增輸入法的操作步驟是什麼Win10
- Oracle切換undo表空間操作步驟Oracle
- 在Python中實現非同步程式設計,只需要這幾步就夠了Python非同步程式設計
- AJAX 操作步驟
- 使用隱含引數testMappingSpeed排查GoldenGate抽取慢的步驟APPGo
- Oracle GoldenGate同步服務歸檔空間維護OracleGo
- Javascript中的非同步程式設計JavaScript非同步程式設計
- 在 Emit 程式碼中如何await一個非同步方法MITAI非同步
- oracle 資料透過goldengate 實時同步到kafka訊息佇列中OracleGoKafka佇列
- javascript中同步和非同步JavaScript非同步
- 用物化檢視單行同步資料庫時,源表結構變化時的處理步驟資料庫
- 正思維的操作步驟
- javascript - 非同步操作JavaScript非同步
- 網路同步在遊戲歷史中的發展變化(五)—— 物理同步遊戲
- RocketMQ-環境部署-2主2從部署-同步雙寫-非同步刷盤-詳細步驟圖解MQ非同步圖解
- Win7系統電腦新增共享網路磁碟的操作步驟Win7
- 在 javascript 面試中對非同步的理解JavaScript面試非同步
- 在 DotNetty 中實現同步請求Netty
- Flutter Bloc 03 - 基礎物件 同步、非同步 await yield 操作FlutterBloC物件非同步AI
- 【譯】async 的非同步操作模式非同步模式
- 最佳化系統效能:同步與非同步操作的巧妙平衡非同步
- JavaScript在瀏覽器環境中的非同步JavaScript瀏覽器非同步
- JavaScript 非同步操作原理JavaScript非同步
- LINUX 時間操作及其同步Linux
- Flutter 中的非同步程式設計總結Flutter非同步程式設計
- 【譯】Dart/Flutter中的非同步程式設計DartFlutter非同步程式設計
- 非同步程式設計在ArkTS中具體怎麼實現?非同步程式設計
- 在Kotlin中如何利用協程進行非同步程式設計Kotlin非同步程式設計
- Flutter中的非同步Flutter非同步