1. OGG 拆分EXTRACT程序
1.1. OGG 拆分EXTRACT程序
程序拆分注意事項:
—各程序間沒有同步機制,應盡量確定同一交易涉及表在一個程序,以業務或Schema進行區分。
—單個extract程序可處理日志一般為30-50G/小時,單個replicat程序一般隻能處理1G隊列/小時,可采用一個extract對多個replicat的模式 。
—由于extract在catch up(追趕)模式需要讀取歸檔日志,速度慢且耗費資源高,建議extract一旦出現較大延遲則立即進行拆分 。
—Replicat拆分可能臨時造成各程序間不同步,但是多個Replicat性能會得到很大提高,可以保證資料複制始終是實時的 。
—當源端出現災難後,由于Extract可以保證源端抽取時資料的一緻性,而目标端多Replicat讀取的 是同一個隊列,當它們應用隊列資料完畢後是可以達到資料一緻的 。
1.1.1. 停止extract程序
GGSCI (cndba) 135> stop ext1
Sending STOP request to EXTRACT EXT1 ...
Request processed.
1.1.2. 檢查extact程序的checkpoint資訊
GGSCI (cndba) 5> info ext1,showch
記錄下其Write Checkpoint資訊中的sequence和RBA值,如下:
EXTRACT EXT1 Last Started 2018-06-12 14:08 Status STOPPED
Checkpoint Lag 00:00:00 (updated 00:06:41 ago)
Log Read Checkpoint Oracle Redo Logs
2018-06-12 17:26:05 Thread 1, Seqno 54, RBA 14155264
SCN 0.1379893 (1379893)
Current Checkpoint Detail:
Read Checkpoint #1
Oracle Threaded Redo Log
Startup Checkpoint (starting position in the data source):
Thread #: 1
Sequence #: 54
RBA: 7347728
Timestamp: 2018-06-12 13:38:32.000000
SCN: 0.1372723 (1372723)
Redo File: /u01/app/oracle/oradata/cndba/redo03.log
Recovery Checkpoint (position of oldest unprocessed transaction in the data source):
Thread #: 1
Sequence #: 54
RBA: 14154768
Timestamp: 2018-06-12 17:26:05.000000
SCN: 0.1379893 (1379893)
Redo File: /u01/app/oracle/oradata/cndba/redo03.log
Current Checkpoint (position of last record read in the data source):
Thread #: 1
Sequence #: 54
RBA: 14155264
Timestamp: 2018-06-12 17:26:05.000000
SCN: 0.1379893 (1379893)
Redo File: /u01/app/oracle/oradata/cndba/redo03.log
Write Checkpoint #1
GGS Log Trail
Current Checkpoint (current write position):
Sequence #: 31
RBA: 1350
Timestamp: 2018-06-12 17:26:31.922124
Extract Trail: ./dirdat/et
1.1.3. 檢查pump程序的checkpoint資訊
GGSCI (cndba) 9> info pump1,showch
若pump程序的Current Checkpoint資訊中的sequence和RBA值與step 2得到的值相等,則說明goldengate抓取的資訊都已被傳送到了target伺服器上,可繼續執行下一步驟。否則,等待并重複運作該指令。
Current Checkpoint (position of last record read in the data source):
Sequence #: 31
RBA: 1350
Timestamp: 2018-06-12 14:16:43.000000
Extract Trail: ./dirdat/et
記錄其Write Checkpoint資訊中的sequence和RBA值,如下:
Write Checkpoint #1
GGS Log Trail
Current Checkpoint (current write position):
Sequence #: 32
RBA: 1486
Timestamp: 2018-06-12 17:37:44.140003
Extract Trail: ./dirdat/et
1.1.4. 檢查replicat程序的checkpoint資訊
Current Checkpoint (position of last record read in the data source):
Sequence #: 32
RBA: 1486
Timestamp: 2018-06-12 14:08:24.507621
Extract Trail: ./dirdat/et
若replicat程序的Current Checkpoint資訊中的sequence和RBA值與step 3中得到的Write Checkpoint資訊相等,則說明goldengate抓取的資訊都已被apply到target 資料庫,可繼續執行下一步驟。否則,等待并重複運作該指令。
1.1.5. 停止pump程序和replicat程序
--源端操作
GGSCI (cndba) 10> stop pump1
Sending STOP request to EXTRACT PUMP1 ...
Request processed.
--目标端操作
GGSCI (cndba) 30> stop rep1
Sending STOP request to REPLICAT REP1 ...
Request processed.
1.1.6. 修改原extract,pump,replicat程序配置檔案
這兩個新的參數檔案與原有的參數檔案的主要差別是将其中的複制表按負載均分為了兩部分,分别放在單獨的參數檔案中。将要拆分的表,從參數檔案删除
--修改extract程序配置檔案
GGSCI (cndba) 15> edit params ext1
GGSCI (cndba) 18> view params ext1
EXTRACT ext1
SETENV (NLS_) --此處資料庫字元集設為一緻
--SETENV (ORACLE_SID = "cndba")
SETENV (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
USERID ogg, PASSWORD ogg
THREADOPTIONS MAXCOMMITPROPAGATIONDELAY 20000
EXTTRAIL ./dirdat/et
DYNAMICRESOLUTION
--DDL INCLUDE ALL
--HANDLECOLLISIONS
tableexclude test.test2
TABLE test.*;
--修改pump程序配置檔案
GGSCI (cndba) 147> edit params pump1
GGSCI (cndba) 147> view params pump1
EXTRACT pump1
RMTHOST 192.168.1.86, MGRPORT 7809
RMTTRAIL ./dirdat/et
PASSTHRU
DYNAMICRESOLUTION
tableexclude test.test2;
TABLE test.*;
--修改replicat程序配置檔案
GGSCI (cndba) 105> edit params rep1
GGSCI (cndba) 106> view params rep1
REPLICAT rep1
setenv (ORACLE_SID=cndba)
SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/db_1")
USERID ogg,PASSWORD ogg
ASSUMETARGETDEFS
--HANDLECOLLISIONS
REPERROR (DEFAULT, DISCARD)
DDLERROR DEFAULT DISCARD
DDLOPTIONS REPORT
DISCARDFILE ./dirrpt/repr1.dsc,append,megabytes 100
mapexclude test.test2;
MAP test.*, TARGET test.*;
1.1.7. 增加新的extract,pump和replicat 程序
配置檔案裡添加要拆出來的表
--添加extract程序
GGSCI (cndba) 150> add extract ext2, tranlog, begin now, threads 1
EXTRACT added.
GGSCI (cndba) 151> add exttrail ./dirdat/ex, extract ext2
EXTTRAIL added.
GGSCI (cndba) 152> edit params ext2
GGSCI (cndba) 156> view params ext2
EXTRACT ext2
--SETENV (NLS_)
--SETENV (ORACLE_SID = "cndba")
--SETENV (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
USERID ogg, PASSWORD ogg
THREADOPTIONS MAXCOMMITPROPAGATIONDELAY 20000
EXTTRAIL ./dirdat/ex
DYNAMICRESOLUTION
--DDL INCLUDE ALL
TABLE test.test2;
--添加pump 程序
GGSCI (cndba) 153> add extract pump2,exttrailsource ./dirdat/ex,begin now
EXTRACT added.
GGSCI (cndba) 154> add rmttrail ./dirdat/ex,extract pump2
RMTTRAIL added.
GGSCI (cndba) 155> edit params pump2
GGSCI (cndba) 157> view params pump2
EXTRACT pump2
RMTHOST 192.168.1.86, MGRPORT 7809
RMTTRAIL ./dirdat/ex
PASSTHRU
DYNAMICRESOLUTION
TABLE test.test2;
--添加replicat程序
GGSCI (cndba) 107> add replicat rep2, exttrail ./dirdat/ex, checkpointtable ogg.checkpoint
REPLICAT added.
GGSCI (cndba) 108> edit params rep2
GGSCI (cndba) 109> view params rep2
REPLICAT rep2
--setenv (ORACLE_SID=cndba)
--SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/db_1")
USERID ogg,PASSWORD ogg
ASSUMETARGETDEFS
--HANDLECOLLISIONS
REPERROR (DEFAULT, DISCARD)
DDLERROR DEFAULT DISCARD
DDLOPTIONS REPORT
DISCARDFILE ./dirrpt/repr2.dsc,append,megabytes 100
--HANDLECOLLISIONS
MAP test.test2, TARGET test.test2;
1.1.8. 修改新增extract程序的檢查點(current和recovery檢查點都需要修改和第2步保持一緻)
根據step 2中得到的Current Checkpoint (position of last record read in the data source)資訊和和Recovery Checkpoint (position of oldest unprocessed transaction in the data source)修改建立extract程序的checkpoint資訊,讓其從舊extract程序停止的位置開始抓取新的資訊
GGSCI (cndba) 166> alter ext2 extseqno 54,extrba 14155264,thread 1
EXTRACT altered.
GGSCI (cndba) 167> alter ext2 ioextseqno 54, ioextrba 14154768 ,thread 1
2018-06-12 18:39:07 INFO OGG-00988 WARNING: Unsupported operation. This might cause transactional inconsistency. Modifying input checkpoint #1, Oracle thread #1 of EXTRACT: ioseq = 54 iorba = 14154768.
Are you sure you want to continue? y
EXTRACT altered
1.1.9. 啟動所有程序
GGSCI (cndba) 168> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT STOPPED EXT1 00:00:00 01:15:56
EXTRACT STOPPED EXT2 00:19:11 00:03:21
EXTRACT STOPPED PUMP1 00:00:00 00:49:07
EXTRACT STOPPED PUMP2 00:00:00 00:22:02
GGSCI (cndba) 169> start ext1
Sending START request to MANAGER ...
EXTRACT EXT1 starting
GGSCI (cndba) 170> start ext2
Sending START request to MANAGER ...
EXTRACT EXT2 starting
GGSCI (cndba) 171> start pump1
Sending START request to MANAGER ...
EXTRACT PUMP1 starting
GGSCI (cndba) 172> start pump2
Sending START request to MANAGER ...
EXTRACT PUMP2 starting
GGSCI (cndba) 192> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EXT1 00:00:00 00:00:10
EXTRACT RUNNING EXT2 00:00:00 00:00:07
EXTRACT RUNNING PUMP1 00:00:00 00:00:08
EXTRACT RUNNING PUMP2 00:00:00 00:00:44
GGSCI (cndba) 111> start rep1
Sending START request to MANAGER ...
REPLICAT REP1 starting
GGSCI (cndba) 112> start rep2
Sending START request to MANAGER ...
REPLICAT REP2 starting
GGSCI (cndba) 113> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING REP1 01:15:45 00:00:03
REPLICAT RUNNING REP2 00:00:00 00:00:01
1.1.10. 測試
源端插入資料
SQL> select * from test2;
ID NAME
---------- --------
1 zhangsan
3 test
4 test
5 test
SQL> select * from test;
ID NAME
---------- --------
1 test
SQL> insert into test values(2,'test');
1 row created.
SQL> insert into test2 values (6,'test');
1 row created.
SQL> commit;
Commit complete.
--目标端檢視資料
SQL> select * from test;
ID NAME
---------- --------
2 test
1 test
SQL> select * from test2;
ID NAME
---------- --------
6 test
5 test
1 zhangsan
3 test
4 test