Goldengate的拆分與合併

君落塵發表於2015-09-21
在使用Goldengate作為複製解決方案時,隨著負載的增加,replicat元件常常是最先出現效能瓶頸的。為了適應不斷增加的負載,就需要拆分replicat來實現並行複製,本文介紹Goldengate拆分的具體實施步驟。同時,作為拆分的逆向操作,介紹如何將拆分的多個replicat合併回一個replicat。

拆分的方式一般分為兩種:
一種是用goldengate提供的@RANGE函式作表內的拆分,透過對錶上主鍵列作hash演算法將該表上發生的變更均分到多個replicat上來降低單個replicat元件的負載;
另一種是將複製的表劃分成幾組,使用多個replicat元件來分別複製其中的一組表。
前一種拆分和合並方式的具體步驟參考metalink文件:1320133.1和1512633.1。

本文介紹後一種拆分方式的實現步驟。
為了實現對錶分組拆分,首先要考慮如何分組,通常我們可以按表的負載來劃分。
透過以下命令,生成近一段時間複製的統計report
  GGSCI>send rep01,report
在report檔案中可以看到各個表上在過去一段時間分別發生了多少變更,進而按負載將表均分到多個replicat元件中。
接下來以將一路replicat拆分成兩路的案例介紹具體實施步驟:

replicat程式的拆分與合併
拆分:
1.停止replicat程式
  cd $GG_HOME
  ggsci
  GGSCI>stop rep01
  
2.將兩個新的replicat引數檔案複製到$GG_HOME/dirprm目錄中。
  這兩個新的引數檔案與原有的引數檔案的主要區別是將其中的複製表按負載均分為了兩部分,分別放在單獨的引數檔案中。
  
3.建立新的replicat元件
  GGSCI> ADD REPLICAT rep01a,EXTTRAIL /oracle/goldengate/ggs/dirdat/r1
  GGSCI> ADD REPLICAT rep02a,EXTTRAIL /oracle/goldengate/ggs/dirdat/r1
  
4.檢查replicat程式的checkpoint資訊   
  GGSCI>info rep01,showch
  記錄下其Current Checkpoint資訊中的sequence和RBA值。
  Current Checkpoint (position of last record read in the data source):
    Sequence #: 2157
    RBA: 2856752
    Timestamp: 2013-09-03 08:13:58.035316
    Extract Trail: /oracle/goldengate/ggs/dirdat/r1
    
5.修改新建replicat程式的read checkpoint資訊
  根據step 4中得到的Current checkpoint資訊修改新建replicat程式的checkpoint資訊,之後新建的replicat程式就會從舊replicat程式停止的位置開始抓取新的資訊
  GGSCI> alter rep01a, extseqno , extrba
  GGSCI> alter rep02a, extseqno , extrba
  
6.啟動新建的replicat程式
  GGSCI>start rep01a
  GGSCI>start rep02a
  
7.刪除舊的replicat程式  
  GGSCI>dblogin userid ,password ***
  GGSCI>delete rep01
      
合併:
1.停止extract程式
  cd $GG_HOME
  ggsci
  GGSCI>stop ext01

2.檢查extract程式的checkpoint資訊 
  GGSCI>info ext01,showch
  記錄下其Write Checkpoint資訊中的sequence和RBA值,比如:
  Write Checkpoint #1
  GGS Log Trail
  Current Checkpoint (current write position):
    Sequence #: 2157
    RBA: 36277005

3.檢查pump程式的checkpoint資訊
  GGSCI>info pump01,showch
  若pump程式的Current Checkpoint資訊中的sequence和RBA值與step 2得到的值相等,則說明goldengate抓取的資訊都已被傳送到了target伺服器上,可繼續執行下一步驟。否則,等待並重復執行該命令。
  比如:
  Current Checkpoint (position of last record read in the data source):
    Sequence #: 2157
    RBA: 36277005

  同時,記錄下其Write Checkpoint資訊中的sequence和RBA值。
  比如:
  Write Checkpoint #1
  GGS Log Trail
  Current Checkpoint (current write position):
    Sequence #: 2160
    RBA: 41659507

4.檢查replicat程式的checkpoint資訊   
  GGSCI>info rep01a,showch
  GGSCI>info rep02a,showch
  若replicat程式的Current Checkpoint資訊中的sequence和RBA值與step 3中得到的Write Checkpoint資訊相等,則說明goldengate抓取的資訊都已被apply到target db,可繼續執行下一步驟。否則,等待並重復執行該命令。
  比如:
  Current Checkpoint (position of last record read in the data source):
    Sequence #: 2160
    RBA: 41659507
    
5.停止舊的replicat程式 
  GGSCI>stop rep01a
  GGSCI>stop rep02a    
  
6.將合併後新的replicat引數檔案複製到$GG_HOME/dirprm目錄中。
  合併後新的引數檔案是將原有的兩個引數檔案中的表合併到了一個檔案中。  
  
7.建立新的replicat程式
  GGSCI> ADD REPLICAT rep01,EXTTRAIL /oracle/goldengate/ggs/dirdat/r1

8.修改新建replicat程式的read checkpoint資訊
  根據step 4中得到的Current checkpoint資訊修改新建replicat程式的checkpoint資訊,之後新建的replicat程式就會從舊replicat程式停止的位置開始抓取新的資訊
  GGSCI> alter rep01, extseqno , extrba
  
9.啟動新建的replicat程式
  GGSCI>start rep01

10.啟動extract程式
  GGSCI>start ext01
    
11.刪除舊的replicat程式
  GGSCI>dblogin userid ,password ***
  GGSCI>delete rep01a
  GGSCI>delete rep02a
  
    
查詢關於Goldengate的相關資料可發現,作為實現goldengate best practice的建議之一,oracle建議:"To avoid contention, Oracle recommends that when reading trail files, you pair each Replicat with its own trail file".也就是說,當考慮拆分replicat來實現並行複製時,oracle建議最好從pump元件開始拆分,以下步驟就針對前面的案例,進一步說明了如何從pump元件開始拆分goldengate.然後介紹如何對這種拆分作逆向合併。

pump和replicat程式的拆分與合併
拆分:
1.停止extract程式
  cd $GG_HOME
  ggsci
  GGSCI>stop ext01

2.檢查extract程式的checkpoint資訊 
  GGSCI>info ext01,showch
  記錄下其Write Checkpoint資訊中的sequence和RBA值,比如:
  Write Checkpoint #1
  GGS Log Trail
  Current Checkpoint (current write position):
    Sequence #: 2153
    RBA: 91925643

3.檢查pump程式的checkpoint資訊
  GGSCI>info pump01,showch
  若pump程式的Current Checkpoint資訊中的sequence和RBA值與step 2得到的值相等,則說明goldengate抓取的資訊都已被傳送到了target伺服器上,可繼續執行下一步驟。否則,等待並重復執行該命令。
  Current Checkpoint (position of last record read in the data source):
    Sequence #: 2153
    RBA: 91925643
    
  記錄下其Write Checkpoint資訊中的sequence和RBA值,比如:
  Write Checkpoint #1
  GGS Log Trail
  Current Checkpoint (current write position):
    Sequence #: 2157
    RBA: 2332672

4.停止舊的pump程式 
  GGSCI>stop pump01 
  
5.檢查replicat程式的checkpoint資訊   
  GGSCI>info rep01,showch
  若replicat程式的Current Checkpoint資訊中的sequence和RBA值與step 3中得到的Write Checkpoint資訊相等,則說明goldengate抓取的資訊都已被apply到target db,可繼續執行下一步驟。否則,等待並重復執行該命令。
  Current Checkpoint (position of last record read in the data source):
    Sequence #: 2157
    RBA: 2856752
    
6.停止舊的replicat程式 
  GGSCI>stop rep01 

7.將兩個新的pump引數檔案複製到$GG_HOME/dirprm目錄中。
  這兩個新的引數檔案與原有的引數檔案的主要區別是將其中的複製表按負載均分為了兩部分,分別放在單獨的引數檔案中。
  
8.建立兩個新的pump程式
  GGSCI>ADD EXTRACT pump01a, EXTTRAILSOURCE /oracle/goldengate/ggs/dirdat/e1
  GGSCI>ADD RMTTRAIL /oracle/goldengate/ggs/dirdat/r1, EXTRACT pump01a,MEGABYTES 100
  GGSCI>ADD EXTRACT pump02a, EXTTRAILSOURCE /oracle/goldengate/ggs/dirdat/e1
  GGSCI>ADD RMTTRAIL /oracle/goldengate/ggs/dirdat/r2, EXTRACT pump02a,MEGABYTES 100

9.修改新建pump程式的read checkpoint資訊
  根據step 3中得到的read checkpoint資訊修改新建pump程式的checkpoint資訊,讓其從舊pump程式停止的位置開始抓取新的資訊
  GGSCI> ALTER EXTRACT pump01a, EXTSEQNO , EXTRBA
  GGSCI> ALTER EXTRACT pump02a, EXTSEQNO , EXTRBA
  
10.將兩個新的replicat引數檔案複製到$GG_HOME/dirprm目錄中。
  與pump引數檔案類似,這兩個新的引數檔案與原有的引數檔案的主要區別是對錶的拆分。  
  
11.建立兩個新的replicat程式
  GGSCI>ADD REPLICAT rep01a,EXTTRAIL /oracle/goldengate/ggs/dirdat/r1    
  GGSCI>ADD REPLICAT rep02a,EXTTRAIL /oracle/goldengate/ggs/dirdat/r2
  
12.刪除traget伺服器上/oracle/goldengate/ggs/dirdat/目錄下原有的以r1開頭的trail file檔案

13.啟動新建的pump程式
  GGSCI>start pump01a
  GGSCI>start pump02a
  
14.啟動新建的replicat程式
  GGSCI>start rep01a
  GGSCI>start rep02a

13.刪除舊的pump程式
  GGSCI>delete pump01

14.刪除舊的replicat程式
  GGSCI>dblogin userid ,password ***
  GGSCI>delete rep01
        
合併:
1.停止extract程式
  cd $GG_HOME
  ggsci
  GGSCI>stop ext01

2.檢查extract程式的checkpoint資訊 
  GGSCI>info ext01,showch
  記錄下其Write Checkpoint資訊中的sequence和RBA值,比如:
  Write Checkpoint #1
  GGS Log Trail
  Current Checkpoint (current write position):
    Sequence #: 2153
    RBA: 91925643

3.檢查pump程式的checkpoint資訊
  GGSCI>info pump01a,showch
  GGSCI>info pump02a,showch  
  若pump程式的Current Checkpoint資訊中的sequence和RBA值與step 2得到的值相等,則說明goldengate抓取的資訊都已被傳送到了target伺服器上,可繼續執行下一步驟。否則,等待並重復執行該命令。
  Current Checkpoint (position of last record read in the data source):
    Sequence #: 2153
    RBA: 91925643
    
  記錄下其Write Checkpoint資訊中的sequence和RBA值,比如:
  Write Checkpoint #1
  GGS Log Trail
  Current Checkpoint (current write position):
    Sequence #: 2157
    RBA: 2332672

4.停止舊的pump程式 
  GGSCI>stop pump01a 
  GGSCI>stop pump02a   
  
5.檢查replicat程式的checkpoint資訊   
  GGSCI>info rep01a,showch
  GGSCI>info rep01a,showch
  若replicat程式的Current Checkpoint資訊中的sequence和RBA值與step 3中得到的Write Checkpoint資訊相等,則說明goldengate抓取的資訊都已被apply到target db,可繼續執行下一步驟。否則,等待並重復執行該命令。
  Current Checkpoint (position of last record read in the data source):
    Sequence #: 2157
    RBA: 2856752
    
6.停止舊的replicat程式 
  GGSCI>stop rep01a
  GGSCI>stop rep02a   

7.將合併後新的pump引數檔案複製到$GG_HOME/dirprm目錄中。
  合併後新的引數檔案是將原有的兩個引數檔案中的表合併到了一個檔案中。 
  
8.建立新的pump程式
  GGSCI>ADD EXTRACT pump01, EXTTRAILSOURCE /oracle/goldengate/ggs/dirdat/e1
  GGSCI>ADD RMTTRAIL /oracle/goldengate/ggs/dirdat/r1, EXTRACT pump01,MEGABYTES 100

9.修改新建pump程式的read checkpoint資訊
  根據step 3中得到的read checkpoint資訊修改新建pump程式的checkpoint資訊,讓其從舊pump程式停止的位置開始抓取新的資訊
  GGSCI> ALTER EXTRACT pump01, EXTSEQNO , EXTRBA
  
10.將合併後新的replicat引數檔案複製到$GG_HOME/dirprm目錄中。
  合併後新的引數檔案是將原有的兩個引數檔案中的表合併到了一個檔案中。 
  
11.建立新的replicat程式
  GGSCI>ADD REPLICAT rep01,EXTTRAIL /oracle/goldengate/ggs/dirdat/r1  
  
12.刪除traget伺服器上/oracle/goldengate/ggs/dirdat/目錄下原有的以r1開頭的trail file檔案

13.啟動新建的pump程式
  GGSCI>start pump01
    
14.啟動新建的replicat程式
  GGSCI>start rep01

13.刪除舊的pump程式
  GGSCI>delete pump01a
  GGSCI>delete pump02a
  
14.刪除舊的replicat程式
  GGSCI>dblogin userid ,password ***
  GGSCI>delete rep01a
  GGSCI>delete rep02a
  
    

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

相關文章