歡迎光臨
每天分享高質量文章

史上最全的OGG基礎知識整理

一、GoldenGate介紹


 

GoldenGate軟體是一種基於日誌的結構化資料複製軟體。GoldenGate 能夠實現大量交易資料的實時捕捉、變換和投遞,實現源資料庫與標的資料庫的資料同步,保持亞秒級的資料延遲。

GoldenGate能夠支援多種拓撲結構,包括一對一,一對多,多對一,層疊和雙向複製等等。

GoldenGate基本架構

 

Oracle GoldenGate主要由如下元件組成

● Extract

● Data pump

● Trails

● Collector

● Replicat

● Manager

Oracle GoldenGate 資料複製過程如下:

利用抽取行程(Extract Process)在源端資料庫中讀取Online Redo Log或者Archive Log,然後進行解析,只提取其中資料的變化資訊,比如DML操作——增、刪、改操作,將抽取的資訊轉換為GoldenGate自定義的中間格式存放在佇列檔案(trail file)中。再利用傳輸行程將佇列檔案(trail file)透過TCP/IP傳送到標的系統。

標的端有一個行程叫Server Collector,這個行程接受了從源端傳輸過來的資料變化資訊,把資訊快取到GoldenGate 佇列檔案(trail file)當中,等待標的端的複製行程讀取資料。

    GoldenGate 複製行程(replicat process)從佇列檔案(trail file)中讀取資料變化資訊,並建立對應的SQL陳述句,透過資料庫的本地介面執行,提交到標的端資料庫,提交成功後更新自己的檢查點,記錄已經完成複製的位置,資料的複製過程最終完成。

Oracle GoldenGate(OGG)可以在多樣化和複雜的 IT 架構中實現實時事務更改資料捕獲、轉換和傳送;其中,資料處理與交換以事務為單位,並支援異構平臺,例如:DB2,MSSQL等
     
     Golden Gate 所支援的方案主要有兩大類,用於不同的業務需求:
     
     ● 高可用和容災解決方案
     ● 實時資料整合解決方案
     
其中,高可用和容災解決方案 主要用於消除計劃外和計劃內停機時間,它包含以下三個子方案:
     1.  容災與應急備份
     2.  消除計劃內停機

     3.  雙業務中心(也稱:雙活)

實時資料整合解決方案 主要為 DSS 或 OLTP 資料庫提供實時資料,實現資料整合和整合,它包含以下兩個子方案:

     1.  資料倉庫實時供給
     2.  實時報表

靈活拓撲結構實現使用者的靈活方案:

     下圖是一個典型的 Golden Gate 配置邏輯結構圖:

① Manager

顧名思義、Manager行程是Golden Gate中行程的控制行程,用於管理 Extract,Data Pump,Replicat等行程

在 Extract、Data Pump、Replicat 行程啟動之前,Manager 行程必須先要在源端和標的端啟動,在整個 Golden Gate 執行期間,它必須保持執行狀態
        
        ⒈ 監控與啟動 GoldenGate 的其它行程
        ⒉ 管理 trail 檔案及 Reporting
        
在 Windows 系統上,Manager 行程是作為一個服務來啟動的,在 Unix 系統下是一個行程
        
② Extract
        
Extract 行程執行在資料庫源端上,它是Golden Gate的捕獲機制,可以配置Extract 行程來做如下工作:
        ⒈ 初始資料裝載:對於初始資料裝載,Extract 行程直接從源物件中提取資料
        ⒉ 同步變化捕獲:保持源資料與其它資料集的同步。

Extract 行程捕獲源資料的變化;如DML變化、 DDL變化等
        
③ Replicat
        
Replicat 行程是執行在標的端系統的一個行程,負責讀取 Extract 行程提取到的資料(變更的事務或 DDL 變化)並應用到標的資料庫,就像 Extract 行程一樣,也可以配置 Replicat 行程來完成如下工作:
        

⒈ 初始化資料裝載:對於初始化資料裝載,Replicat 行程應用資料到標的物件或者路由它們到一個高速的 Bulk-load 工具上
⒉ 資料同步,將 Extract 行程捕獲到的提交了的事務應用到標的資料庫中
        
④ Collector
     
Collector 是執行在標的端的一個後臺行程,
接收從 TCP/IP 網路傳輸過來的資料庫變化,並寫到 Trail 檔案裡。

動態 collector:由管理行程自動啟動的 collector 叫做動態 collector,使用者不能與動態 collector 互動

靜態 collector:可以配置成手工執行 collector,這個 collector 就稱之為靜態 collector
        
⑤ Trails
        
為了持續地提取與複製資料庫變化,GoldenGate 將捕獲到的資料變化臨時存放在磁碟上的一系列檔案中,這些檔案就叫做 Trail 檔案
        
這些檔案可以在 source DB 上也可以在標的 DB 上,也可以在中間系統上,這依賴於選擇哪種配置情況,在資料庫源端上的叫做 Local Trail 或者 Extract Trail;在標的端的叫做 Remote Trail
        
⑥ Data Pumps
        
Data Pump 是一個配置在源端的輔助的 Extract 機制,Data Pump 是一個可選元件,如果不配置 Data Pump,那麼由 Extract 主行程將資料傳送到標的端的 Remote Trail 檔案中,如果配置了 Data Pump,會由 Data Pump將Extract 主行程寫好的本地 Trail 檔案透過網路傳送到標的端的 Remote Trail 檔案中
        
使用 Data Pump 的好處是:
        ⒈ 如果標的端或者網路失敗,源端的 Extract 行程不會意外終止
        ⒉ 需要在不同的階段實現資料的過濾或者轉換
        ⒊ 多個源資料庫複製到資料中心
        ⒋ 資料需要複製到多個標的資料庫
        
⑦ Data source
        
當處理事務的變更資料時,Extract 行程可以從資料庫(Oracle, DB2, SQL Server, MySQL等)的事務日誌中直接獲取,或從 GoldenGate VAM中獲取。透過 VAM,資料庫廠商將提供所需的元件,用於 Extract 行程抽取資料的變更
        
⑧ Groups
        
為了區分一個系統上的多個 Extract 和 Replicat 行程,我們可以定義行程組
例如:要並行複製不同的資料集,我們可以建立兩個 Replicat 組,一個行程組由一個行程組成(Extract 行程或者 Replicat 行程),一個相應的引數檔案,一個 Checkpoint 檔案,以及其它與之相關的檔案
如果處理組中的行程是 Replicat 行程,那麼處理組還要包含一個 Checkpoint 表

GoldenGate簡介 
Oracle Golden Gate軟體是一種基於日誌的結構化資料複製備份軟體,它透過解析源資料庫線上日誌或歸檔日誌獲得資料的增量變化,再將這些變化應用到標的資料庫,從而實現源資料庫與標的資料庫同步。Oracle Golden Gate可以在異構的IT基礎結構(包括幾乎所有常用作業系統平臺和資料庫平臺)之間實現大量資料亞秒一級的實時複製,從而在可以在應急系統、線上報表、 實時資料倉庫供應、交易跟蹤、資料同步、集中/分發、容災、資料庫升級和移植、雙業務中心等多個場景下應用。同時,Oracle Golden Gate可以實現一對一、廣播(一對多)、聚合(多對一)、雙向、點對點、級聯等多種靈活的拓撲結構。

GoldenGate技術架構 
和傳統的邏輯複製一樣,Oracle GoldenGate實現原理是透過抽取源端的redo log或者archive log,然後透過TCP/IP投遞到標的端,最後解析還原應用到標的端,使標的端實現同源端資料同步。 

Manager行程是GoldenGate的控制行程,執行在源端和標的端上。它主要作用有以下幾個方面:啟動、監控、重啟Goldengate的其他行程,報告錯誤及事件,分配資料儲存空間,釋出閥值報告等。在標的端和源端有且只有一個manager行程,其執行狀態為running好stopped。 在windows系統上,manager行程作為一個服務來啟動,二在Linux/Unix系統上則是一個系統行程。

Extract行程 
Extract執行在資料庫源端,負責從源端資料表或者日誌中捕獲資料。Extract的作用可以按照表來時間來劃分:
初始時間裝載階段:在初始資料裝載階段,Extract行程直接從源端的資料表中抽取資料。

同步變化捕獲階段:初始資料同步完成以後,Extract行程負責捕獲源端資料的變化(DML和DDL)

GoldenGate並不是對所有的資料庫都支援ddl操作 

Extract行程會捕獲所有已配置的需要同步的物件變化,但只會將已提交的事務傳送到遠端的trail檔案用於同步。當事務提交時,所有和該事務相關的 日誌記錄被以事務為單元順序的記錄到trail檔案中。Extract行程利用其內在的checkpoint機制,週期性的記錄其讀寫的位置,這種機制是 為了保證Extract行程終止或作業系統當機,重新啟動Extract後,GoldenGate可以恢復到之前的狀態,從上一個斷點繼續往下執行。透過 上面的兩個機制,就可以保證資料的完整性了。

多 個Extract 行程可以同時對不同物件進行操作。例如,可以在一個extract行程抽取並向標的端發生事務資料的同時,利用另一個extract行程抽取的資料做報 表。或者,兩個extract行程可以利用兩個trail檔案,同時抽取並並行傳輸給兩個replicat行程以減少資料同步的延時。
在進行初始化轉載,或者批次同步資料時, GoldenGate會生成extract檔案來儲存資料而不是trail檔案。預設情況下, 只會生成一個 extract檔案,但如果出於作業系統對單個檔案大小限制或者其他因素的考慮,也可以透過配置生成多個 extract檔案。 extract檔案不記錄檢查點。

Extract行程的狀態包括Stopped(正常停止),Starting(正在啟動),Running(正在執行),Abended(Abnomal End的縮寫,標示異常結束)。
Pump行程 
pump行程執行在資料庫源端,其作用是將源端產生的本地trail檔案,把trail以資料塊的形式透過TCP/IP 協議傳送到標的端,這通常也是推薦的方式。pump行程本質是extract行程的一種特殊形式,如果不使用trail檔案,那麼extract行程在抽取完資料以後,直接投遞到標的端,生成遠端trail檔案。
與 Pump行程對應 的叫Server Collector行程,這個行程不需要引起我的關註,因為在實際操作過程中,無需我們對其進行任何配置,所以對我們來說它是透明的。它執行在標的端,其 任務就是把Extract/Pump投遞過來的資料重新組裝成遠端ttrail檔案。 

註意:無論是否使用pump行程,在標的端都會生成trail檔案 
pump行程可以線上或者批次配置,他可以進行資料過濾,對映和轉換,同時他還可以配置為“直通樣式”,這樣資料被傳輸到標的端時就可以直接生成所需的格式,無需另外操作。 直通樣式提高了data pump的效率,因為生成後的物件 不需要繼續進行檢索。
在大多數情況下,oracle都建議採用data pump,原因如下
: 

1、為標的端或網路問題提供保障 :如果只在標的端配置trail檔案,由於源端會將extract行程抽取的內容不斷的儲存在記憶體中,並及時的傳送到標的端。當網路或者標的端出現故障時, 由於extract行程無法及時的將資料傳送到標的, extract行程將耗盡記憶體然後異常終止。 如果在源端配置了data pump行程,捕獲的資料會被轉移到硬碟上,預防了 異常終止的情況。當故障修複,源端和標的端 恢復連通性時,data pump行程傳送源端的trail檔案到標的端。
2、 可以支援複雜的資料過濾或者轉換: 當使用資料過濾或者轉換時,可以先配置一個data pump行程在標的端或者源端進行第一步的轉換,利用另一個data pump行程或者 Replicat組進行第二部的轉換。

3、有效的規劃儲存資源 :當從多個資料源同步到一個資料中心時,採用data pump的方式,可以在源端儲存抽取的資料,標的端儲存trail檔案,從而節約儲存空間。
4、解決單資料源向多個標的端傳輸資料的單點故障: 當從一個資料源傳送資料到多個標的端時,可以為每個標的端分別配置不同的data pump行程。這樣如果某個標的端失效或者網路故障時,其他的標的端不會受到影響可以繼續同步資料。 
Replicat行程 
Replicat行程,通常我們也把它叫做應用行程。執行在標的端,是資料傳遞的最後一站,負責讀取標的端trail檔案中的內容,並將其解析為DML或 DDL陳述句,然後應用到標的資料庫中。
和Extract行程一樣,Replicat也有其內部的checkpoint機制,保證重啟後可以從上次記錄的位置開始恢復而無資料損失的風險。
Replicat 行程的狀態包括Stopped(正常停止),Starting(正在啟動),Running(正在執行),Abended(Abnomal End的縮寫,標示異常結束)。 
Trail檔案 
為了更有效、更安全的把資料庫事務資訊從源端投遞到標的端。GoldenGate引進trail檔案的概念。前面提到extract抽取完資料以後 Goldengate會將抽取的事務資訊轉化為一種GoldenGate專有格式的檔案。然後pump負責把源端的trail檔案投遞到標的端,所以源、 標的兩端都會存在這種檔案。 trail檔案存在的目的旨在防止單點故障,將事務資訊持久化,並且使用checkpoint機制來記錄其讀寫位置,如果故障發生,則資料可以根據checkpoint記錄的位置來重傳 。 當然,也可以透過extract透過TCP/IP協議直接傳送到標的端,生成遠端trail檔案。但這種方式可能造成資料丟失,前面已經提到過了,這裡不再贅述。
Trail檔案預設為10MB,以兩個字元開始加上000000~999999的數字作為檔案名。如c:\directory/tr000001.預設情況下儲存在GoldenGate的dirdat子目錄中。可以為不同應用或者物件建立不同的trail檔案。同一時刻,只會有一個extract行程處理一個trail檔案。

10.0版本以後的GoldenGate,會在trail檔案頭部儲存包含trail檔案資訊的記錄,而10.0之前的版本不會儲存該資訊。每個trail檔案中的資料記錄包含了資料頭區域和資料區域。在 資料頭區域中包含事務資訊,資料區域包含實際抽取的資料  

行程如何寫trail檔案

為了減小系統的I/O負載,抽取的資料透過大位元組塊的方式儲存到trail檔案中。同時為了提高相容性,儲存在trail檔案中的資料以通用資料樣式(一種可以在異構資料庫之間進行快速而準確轉換的樣式)儲存。 當然,根據不同應用的需求,資料也可以儲存為不同的樣式。

預設情況下,extract行程以追加的方式寫入trail檔案。當extract行程異常終止時,trail檔案會被標記為需要恢復。當extract重新啟動時會追加checkpoint之後的資料追加到該trail檔案中。在 GoldenGate 10.0之前的版本, extract行程採用的是改寫樣式。即當 extract行程異常終止,則會將至上次完整寫入的事務資料之後的資料改寫現有trail檔案中的內容。

這裡是筆者理解不是很透徹,原文如下,望讀者給予建議

By default, Extract operates in append mode, where if there is a process failure, a recovery  marker is written to the trail and Extract appends recovery data to the file so that a history  of all prior data is retained for recovery purposes. In append mode, the Extract initialization determines the identity of the last complete  transaction that was written to the trail at startup time. With that information, Extract  ends recovery when the commit record for that transaction is encountered in the data  source; then it begins new data capture with the next committed transaction that qualifies  for extraction and begins appending the new data to the trail. A data pump or Replicat  starts reading again from that recovery point. Overwrite mode is another version of Extract recovery that was used in versions of  GoldenGate prior to version 10.0. In these versions, Extract overwrites the existing  transaction data in the trail after the last write-checkpoint position, instead of appending  the new data. The first transaction that is written is the first one that qualifies for  extraction after the last read checkpoint position in the data source. checkpoint

checkpoint用於抽取或複製失敗後(如系統宕機、網路故障燈),抽取、複製行程重新定位抽取或者複製的起點。在高階的同步配置中,可以透過配置checkpoint另多個extract或者replicat行程讀取同個trail檔案集。

extract行程在資料源和trail檔案中都會標識checkpoint,Replicat只會在trail檔案中標示checkpoint。

在批處理樣式中,extract和replicat行程都不會記錄checkpoint。如果批處理失敗,則整改批處理會重新進行。

checkpoint資訊會預設儲存在goldengate的子目錄dirchk中。在標的端除了checkpoint檔案外,我們也可以透過配置透過額外checkpoint table來儲存replicat的checkpoint資訊。

Group 
我們可以透過為不同的extract和replicat行程進行分組來去區分不同行程之間的作用。例如,當需要並行的複製不同的資料集時,我們則可以建立兩個或者多個複製行程。
行程組中包含行程,行程檔案,checkpoint檔案和其他與行程相關的檔案。對於replicat行程來說,如果配置了checkpoint table,則不同組的都會包含checkpoint table。

GGSCI 
GGSCI是GoldenGate Software Command Interface 的縮寫,它提供了十分豐富的命令來對Goldengate進行各種操作,如建立、修改、監控GoldenGate行程等等。
Commit Sequence Number
前文已經多次提到,Goldengate是以事務為單位來保證資料的完整性的,那麼
 
GoldenGate又是怎麼識別事務的呢? 這裡用到的是Commit Sequence Number(CSN)。CSN儲存在事務日誌中和trail檔案中 ,用於資料的抽取和複製。CSN作為事務開始的標誌被記錄在trail檔案中,可以透過@GETENV欄位轉換函式或者logdump工具來檢視。

二、GoldenGate安裝實施

2.1建立GoldenGate軟體安裝目錄

在資料庫伺服器上建立檔案系統:/u01/gg,作為GoldenGate的安裝目錄。

2.2 GoldenGate的管理使用者

安裝GoldenGate軟體和維護GoldenGate軟體時,可以使用系統上的oracle使用者。GoldenGate安裝目錄的所有者必須是GoldenGate管理使用者,本次實施過程中使用oracle使用者作為GoldenGate管理使用者,新增oracle使用者的環境變數(在生產端和容災端均要進行以下操作):

export GG_HOME=/u01/ggexport LD_LIBRARY_PATH=$GG_HOME:$ORACLE_HOME/lib:/usr/bin:/libexport PATH=$GG_HOME:$PATH

2.3安裝GoldenGate軟體

切換到oracle使用者,將GG軟體的壓縮包存放到GoldenGate安裝目錄下,即/u01/gg,將這個壓縮包進行解壓到GoldenGate安裝目錄下(在生產端和容災端均要進行以下操作):

tar  -zxvf  *.gz

 

進入到GoldenGate安裝目錄,執行GGSCI命令以進入GG介面(在生產端和容災端均要進行以下操作):

cd  /u01/gg./ggsci

 

在GGSCI介面下建立子目錄(在生產端和容災端均要進行以下操作):

GGSCI>create  subdirs

 

至此,GoldenGate軟體安裝完畢。

2.4設定資料庫歸檔樣式

檢視資料庫的歸檔樣式:

SQL>archive log list;

 

如果是非歸檔樣式,需要開啟歸檔樣式:

shutdown immediate;startup mount;alter database archivelog;alter database open;

2.5開啟資料庫的附加日誌

開啟附加日誌並切換日誌(保證Online redo log和Archive log一致)

alter database add supplemental log data ;alter database add supplemental log data (primary key, unique,foreign key) columns;alter system switch logfile;

2.6開啟資料庫強制日誌樣式

alter database force logging;

2.7建立GoldenGate管理使用者

在生產端和容災端均要進行以下操作:

--create tablespaceSQL>create tablespace  ogg  datafile '$ORACLE_BASE/oradata/test/ogg01.dbf' size 300M ;-- create the userSQL>create user ogg identified by ogg default tablespace ogg;-- grant role privilegesSQL>grant  resource, connect, dba to ogg;

2.8編輯GLOBALS引數檔案

切換到GoldenGate安裝目錄下,執行命令:

cd /u01/gg./ggsciGGSCI>EDIT PARAMS ./GLOBALS

 

在檔案中新增以下內容:

GGSCHEMA ogg  --指定的進行DDL複製的資料庫使用者

 

利用預設的金鑰,生成密文:

GGSCI>encrypt password ogg encryptkey defaultEncrypted password:  AACAAAAAAAAAAADAHBLDCCIIOIRFNEPB

 

記錄這個密文,將在以下行程引數的配置中使用。

2.9管理行程MGR引數配置

PORT 7839DYNAMICPORTLIST 7840-7860--AUTOSTART ER *--AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 2userid ogg, password AACAAAAAAAAAAADAHBLDCCIIOIRFNEPB, ENCRYPTKY defaultPURGEDDLHISTORY MINKEEPDAYS 11,MAXKEEPDAYS 14PURGEMARKERHISTORY MINKEEPDAYS 11, MAXKEEPDAYS 14

2.10抽取行程EXTN引數配置

EXTRACT extnsetenv (NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252)userid ogg, password AACAAAAAAAAAAADAHBLDCCIIOIRFNEPB, ENCRYPTKEY defaultREPORTCOUNT EVERY 1 MINUTES, RATEDISCARDFILE ./dirrpt/discard_extn.dsc,APPEND,MEGABYTES 1024 DBOPTIONS  ALLOWUNUSEDCOLUMNWARNLONGTRANS 2h,CHECKINTERVAL 3mEXTTRAIL ./dirdat/na TRANLOGOPTIONS EXCLUDEUSER OGGTRANLOGOPTIONS ALTARCHIVEDLOGFORMAT %t_%s_%r.dbfFETCHOPTIONS NOUSESNAPSHOTTRANLOGOPTIONS CONVERTUCS2CLOBSTRANLOGOPTIONS altarchivelogdest primary instance test /oradata/arch--TRANLOGOPTIONS RAWDEVICEOFFSET 0DYNAMICRESOLUTION DDL INCLUDE ALLDDLOPTIONS addtrandata, NOCROSSRENAME,  REPORT table QQQ.*;table CUI.*;

2.11 傳輸行程DPEN引數配置

EXTRACT dpenRMTHOST 192.168.4.171 , MGRPORT 7839, compressPASSTHRUnumfiles 50000RMTTRAIL ./dirdat/naTABLE QQQ.*;TABLE CUI.*;

2.12建立OGG的DDL物件

$ cd /u01/gg $ sqlplus "/ as sysdba" SQL> @marker_setup.sqlEnter GoldenGate schema name:oggalter system set recyclebin=off;SQL> @ddl_setup.sqlEnter GoldenGate schema name: ogg SQL> @role_setup.sql Grant this role to each user assigned to the Extract, Replicat, GGSCI, and Manager processes, by using the following SQL command: SQL>GRANT GGS_GGSUSER_ROLE TO where is the user assigned to the GoldenGate processes.

 

註意這裡的提示:需要手工將這個GGS_GGSUSER_ROLE指定給extract所使用的資料庫使用者(即引數檔案裡面透過userid指定的使用者),可以到sqlplus下執行類似的sql:

SQL>GRANT GGS_GGSUSER_ROLE TO ogg;

 

註:這裡的ogg是extract使用的使用者。如果你有多個extract,使用不同的資料庫使用者,則需要重述以上過程全部賦予GGS_GGSUSER_ROLE許可權。

執行以下指令碼,使觸發器生效:

SQL> @ ddl_enable.sql

 

註:在生產端開啟抽取前,先禁用DDL捕獲觸發器,呼叫ddl_disable.sql。

2.13 資料初始化

在初始化過程中,源資料庫不需要停機,初始化過程分為三個部分:

生產端開啟抽取行程;

生產端匯出資料;

容災端匯入資料;

在生產端新增抽取行程、傳輸行程以及相應的佇列檔案,執行命令如下:

//建立行程 EXTNGGSCI>add extract extn,tranlog,begin nowGGSCI>add exttrail ./dirdat/na,extract extn,megabytes 500 //建立行程 DPENGGSCI>add extract dpen,exttrailsource ./dirdat/naGGSCI>add rmttrail ./dirdat/na,extract dpen,megabytes 500在生產端啟動管理行程:GGSCI> start mgr

啟用DDL 捕獲trigger:

$ cd /u01/gg$ sqlplus “/as sysdba”SQL> @ddl_enable.sql

在生產端啟動抽取行程:

GGSCI> start EXTN

 

在資料庫中,獲取當前的SCN號,並且記錄這個SCN號:

SQL>select to_char(dbms_flashback.get_system_change_number) from dual; 603809

 

在資料庫中,建立資料泵所需目錄並賦予許可權:

SQL>CREATE OR REPLACE DIRECTORY DATA_PUMP AS '/u01';SQL>grant read ,write on DIRECTORY DATA_PUMP  to ogg;

 

在生產端利用資料泵匯出資料:

expdp ogg/ogg schemas='QQQ' directory=DATA_PUMP dumpfile=QQQ_bak_%U flashback_scn=123456789 logfile=expdp_QQQ.log filesize=4096m expdp ogg/ogg schemas='CUI' directory=DATA_PUMP dumpfile=CUI_bak_%U flashback_scn=123456789 logfile=expdp_ CUI.log filesize=4096m expdp ogg/ogg schemas='test1' directory=DATA_PUMP dumpfile=test1_bak_%U flashback_scn=603809 logfile=expdp_QQQ.log filesize=4096m

 

把匯出的檔案傳輸到容災端,利用資料泵將資料匯入:

Impdp ogg/ogg  DIRECTORY=DATA_PUMP DUMPFILE=QQQ_bak_%U logfile=impdp_QQQ.log Impdp ogg/ogg  DIRECTORY=DATA_PUMP DUMPFILE=CUI_bak_%U logfile=impdp_CUI.log

2.14 容災端管理行程MGR引數配置

PORT 7839DYNAMICPORTLIST 7840-7860--AUTOSTART ER *--AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 2userid ogg, password AACAAAAAAAAAAADAHBLDCCIIOIRFNEPB, ENCRYPTKEY default

2.15編輯GLOBALS引數檔案

切換到GoldenGate安裝目錄下,執行命令:

cd /u01/gg./ggsciggsci>EDIT PARAMS ./GLOBALS

 

在檔案中新增以下內容:

GGSCHEMA ogg  --指定的進行DDL複製的資料庫使用者

2.16 容災端複製行程REPN引數配置

REPLICAT repnsetenv (NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252)userid ogg, password AACAAAAAAAAAAADAHBLDCCIIOIRFNEPB, ENCRYPTKEY defaultSQLEXEC "ALTER SESSION SET CONSTRAINTS=DEFERRED"REPORT AT 01:59REPORTCOUNT EVERY 30 MINUTES, RATEREPERROR DEFAULT, ABENDassumetargetdefsDISCARDFILE ./dirrpt/repna.dsc, APPEND, MEGABYTES 1024DISCARDROLLOVER AT 02:30ALLOWNOOPUPDATESREPERROR (1403, discard) DDL INCLUDE MAPPED DDLOPTIONS REPORT MAPEXCLUDE QQQ.T0417 MAP QQQ.*, TARGET QQQ.*;MAP CUI.*, TARGET CUI.*;

2.17建立複製行程repn

    執行以下命令建立複製行程repn:

GGSCI>add replicat repn, exttrail ./dirdat/na, nodbcheckpoint

2.18啟動生產端傳輸行程和容災端複製行程

GGSCI>start dpenGGSCI>start  REPLICAT repn aftercsn  123456789

2.19測試場景

(1)在生產端資料庫上,建立一張表。

(2)在生產端資料庫上,修改這個張表的資料。

(3)在生產端資料庫上,刪除這張表。

三.GoldenGate基本運維命令

(1)檢視行程狀態

GGSCI>info all

——檢視GG整體執行情況,比如行程Lag延時,檢查點延時。

GGSCI>info

——檢視某個行程的執行狀況,比如抽取行程正在讀取哪個歸檔日誌或者聯機重做日誌,傳輸行程正在傳送哪一個佇列檔案,複製行程正在使用哪一個佇列檔案。

GGSCI>info showch

——檢視某個行程執行的詳細資訊。

(2)檢視行程報告

GGSCI>view report  

——報錯時,從行程報告裡獲取錯誤資訊。

(3)在作業系統上,檢視GoldenGate安裝目錄的使用率

$ df -h

——檢視ogg目錄是否撐滿。

四、常見故障排除

故障(1)

錯誤資訊:

OGG-00446  Could not find archived log for sequence 53586 thread 1 under alternative destinations. SQL . Last alternative log tried /arch_cx/1_53586_776148274.arc., error retri eving redo file name for sequence 53586, archived = 1, use_alternate = 0Not able to establish initial position for sequence 53586, rba 44286992. 處理辦法: 將缺失的歸檔日誌從備份中恢復出來。如果依舊找不到所需歸檔日誌,那麼只能重新實施資料初始化。   故障(2) 錯誤資訊: OGG-01154  Oracle GoldenGate Delivery for Oracle, repn.prm:  SQL error 1691 mapping DATA_USER.DMH_WJXXB to DATA_USER.DMH_WJXXB OCI Error ORA-01691: unable to extend lob segment DATA_USER.SYS_LOB0000083691C00014$$ by 16384 in tablespace DATA_USER_LOB_U128M_1 (status = 1691), SQL . 處理辦法: 資料庫中該表空間已滿,需要對該表空間進行擴容。   故障(3) 錯誤資訊: OGG-00664  OCI Error during OCIServerAttach (status = 12541-ORA-12541: TNS:no listener). 處理方法: 啟動資料庫的監聽器。   故障(4) 錯誤資訊: OGG-00665  OCI Error describe for query (status = 3135-ORA-03135: connection lost contact Process ID: 8859 Session ID: 131 Serial number: 31), SQL.

處理方法:

在沒有關閉OGG行程的情況下,提前關閉了資料庫,導致OGG行程出現異常。如果是發現了這個錯誤提示,應該馬上關閉OGG行程,註意資料庫的歸檔日誌情況,保證歸檔日誌不會缺失,然後等待資料庫啟動成功後,馬上啟動OGG行程。

 

故障(5)

錯誤資訊:

OGG-01161  Bad column index (4) specified for table QQQ.TIANSHI, max columns = 4.

處理方法:

對照一下生產端與容災端的這一張表的表結構,如果容災端的表缺少一列,則在容災端,登陸資料庫,增加這一列,然後啟動複製行程。

 

故障(6)

錯誤資訊:

ERROR   OGG-00199  Table QQQ.T0417 does not exist in target database.

處理方法:

檢視源端抽取行程的引數,DDL複製引數是否配置,針對這張表,重新實施資料初始化。

 

GOLDENGATE運維手冊

OGG常用監控命令

說明

對GoldenGate實體進行監控,最簡單的辦法是透過GGSCI命令列的方式進行。透過在命令列輸入一系列命令,並檢視傳回信息,來判斷GoldenGate執行情況是否正常。命令列傳回的資訊包括整體概況、行程執行狀態、檢查點資訊、引數檔案配置、延時等。

除了直接透過主機登入GGSCI介面之外,也可以透過GoldenGate Director Web介面登入到每個GoldenGate實體,並執行GGSCI命令。假如客戶部署了很多GoldenGate實體,如果單獨登入到每個實體的GGSCI介面,會很不方便,此時建議透過GoldenGate Director Web介面,登入到每個實體,並執行命令列命令。

啟動GoldenGate行程

1) 首先以啟動GoldenGate行程的系統使用者(一般為oracle)登入源系統。

2) 進入GoldenGate安裝目錄,執行./ggsci進入命令列樣式。

3) 啟動源端管理行程GGSCI > start mgr

4) 同樣登陸到標的端GoldenGate安裝目錄,執行./ggsci,然後執行GGSCI > start mgr啟動管理行程。

5) 在源端執行GGSCI > start er *啟動所有行程

6) 同樣登入到備份端執行GGSCI > start er *啟動所有行程

7) 使用GGSCI > info er * 或者 GGSCI > info 察看行程狀態是否為Running(表示已經啟動)。註意有的行程需要幾分鐘起來,請重覆命令觀察其啟動狀態。

說明:無論源還是標的,啟動各extract/replicat行程前需要啟動mgr行程。

start 命令的一般用法是:start

如:

GGSCI> start extdm  啟動一個名叫extdm的行程

也可以使用萬用字元,如:

GGSCI> start er *  啟動所有的extract和replicat行程

GGSCI> start extract *d*  啟動所有的包含字元‘d’extract行程

GGSCI> start replicat rep*  啟動所有以“rep“開頭的replicat行程

停止GoldenGate行程

依照以下步驟停止GoldenGate行程:

1) 以啟動GoldenGate行程的系統使用者(一般為oracle)登入源主機,進入GoldenGate安裝目錄執行./ggsci進入命令列管理介面

2) (本步驟僅針對抽取日誌的主extract行程, data pump行程和replicat行程不需要本步驟)驗證GoldenGate的抽取行程重起所需的日誌存在,對各個主extXX行程,執行如下命令: 

ggsci> info extXX, showch…..Read Checkpoint #1….   Recovery Checkpoint (position of oldest unprocessed transaction in the data source):    Thread #: 1    Sequence #: 9671    RBA239077904    Timestamp2008-05-20 11:39:07.000000    SCN2195.1048654191    Redo File: Not available   Current Checkpoint (position of last record read in the data source):    Thread #: 1    Sequence #: 9671    RBA239377476    Timestamp2008-05-20 11:39:10.000000    SCN2195.1048654339    Redo File: Not Available Read Checkpoint #2…..   Recovery Checkpoint (position of oldest unprocessed transaction in the data source):    Thread #: 2    Sequence #: 5287    RBA131154160    Timestamp2008-05-20 11:37:42.000000    SCN2195.1048640151    Redo File: /dev/rredo07   Current Checkpoint (position of last record read in the data source):    Thread #: 2    Sequence #: 5287    RBA138594492    Timestamp2008-05-20 11:39:14.000000    SCN2195.1048654739    Redo File: /dev/rredo07 …..

 

首先察看Recovery Checkpoint所需要讀取的最古老日誌序列號,如舉例中的實體1需要日誌9671及其以後所有歸檔日誌,實體2需要序列號為5287及以後所有歸檔日誌,確認這些歸檔日誌存在於歸檔日誌目錄後才可以執行下一步重起。如果這些日誌已經被刪除,則下次重新啟動需要先恢復歸檔日誌。

註意:對於OGG 11及以後版本新增了自動快取長交易的功能,預設每隔4小時自動對未提交交易快取到本地硬碟,這樣只需要最多8個小時歸檔日誌即可。但是快取長交易操作只在extract執行時有效,停止後不會再快取,此時所需歸檔日誌最少為8個小時加上停機時間,一般為了保險起見建議確保重啟時要保留有12個小時加上停機時間的歸檔日誌。

3) 執行GGSCI >stop er *停止所有源行程,或者分別對各個行程執行stop 單獨停止。

4) 以oracle使用者登入標的系統,進入安裝目錄/oraclelog1/goldengate,執行./ggsci進入命令列。

5) 在標的系統執行stop er *停止複製

6) 在兩端行程都已停止的情況下,如需要可透過stop mgr停止各系統內的管理行程。

類似的,stop命令具有跟start命令一樣的用法。這裡不再贅述。

註意,如果是隻修改抽取或者複製行程引數,則不需要停止MGR。不要輕易停止MGR行程,並且慎重使用萬用字元er *, 以免對其他複製行程造成不利影響。

檢視整體執行情況

進入到GoldenGate安裝目錄,執行GGSCI,然後使用info all命令檢視整體執行情況。如下圖示:

 

Group表示行程的名稱(MGR行程不顯示名字);Lag表示行程的延時;Status表示行程的狀態。有四種狀態:

STARTING: 表示正在啟動過程中

RUNNING:表示行程正常執行

STOPPED:表示行程被正常關閉

ABENDED:表示行程非正常關閉,需要進一步調查原因 

正常情況下,所有行程的狀態應該為RUNNING,且Lag應該在一個合理的範圍內。

檢視引數設定

使用view params  可以檢視行程的引數設定。該命令同樣支援萬用字元*。

 

檢視行程狀態

使用info  命令可以檢視行程資訊。可以檢視到的資訊包括行程狀態、checkpoint資訊、延時等。如:

 

還可以使用info detail 命令檢視更詳細的資訊。包括所使用的trail檔案,引數檔案、報告檔案、警告日誌的位置等。如:

 

使用info showch 命令可以檢視到詳細的關於checkpoint的資訊,用於檢視GoldenGate行程處理過的事務記錄。其中比較重要的是extract行程的recovery checkpoint,它表示源資料中最早的未被處理的事務;透過recovery checkpoint可以檢視到該事務的redo log位於哪個日誌檔案以及該日誌檔案的序列號。所有序列號比它大的日誌檔案,均需要保留。

 

檢視延時

GGSCI> lag  可以檢視詳細的延時資訊。如:

 

此命令比用info命令檢視到的延時資訊更加精確。

註意,此命令只能夠檢視到最後一條處理過的記錄的延時資訊。

此命令支援萬用字元 *。

檢視統計資訊

GGSCI> stats ,,table . 可以檢視行程處理的記錄數。該報告會詳細的列出處理的型別和記錄數。如:

 

GGSCI> stats edr, total列出自行程啟動以來處理的所有記錄數。

GGSCI> stats edr, daily, table gg.test列出當天以來處理的有關gg.test表的所有記錄數。

檢視執行報告

GGSCI> view report  可以檢視執行報告。如:

 

也可以進入到/dirrpt/目錄下,檢視對應的報告檔案。最新的報告總是以.rpt命名的。加字尾數字的報告是歷史報告,數字越大對應的時間越久。如下圖示:

 

如果行程執行時有錯誤,則報告檔案中會包括錯誤程式碼和詳細的錯誤診斷資訊。透過查詢錯誤程式碼,可以幫助定位錯誤原因,解決問題。

 

 

OGG的常見運維任務指南

配置自動刪除佇列

1) 進入安裝目錄執行./ggsci;

2) 執行edit param mgr編輯管理行程引數,加入或修改以下行

purgeoldextracts //dirdat/*, usecheckpoint, minkeepdays 7

其中,第一個引數為佇列位置,*可匹配備份中心所有佇列檔案;

第二個引數表示是首先要保證滿足檢查點需要,不能刪除未處理佇列

第三個引數表示最小保留多少天,後面的數字為天數。例如,如果希望只保留佇列/ggs/dirdat/xm檔案3天,可以配置如下:

purgeoldextracts /ggs/dirdat/xm, usecheckpoint, minkeepdays 3

3) 停止MGR行程,修改好引數後重啟該行程

GGSCI > stop mgr

輸入y確認停止

GGSCI > start mgr

註:臨時停止mgr行程並不影響資料複製。

配置啟動MGR時自動啟動Extract和Replicat行程

1) 進入安裝目錄執行./ggsci;

2) 執行edit param mgr編輯管理行程引數,加入以下行

AUTOSTART ER *

3) 停止MGR行程,修改好引數後重啟該行程

GGSCI > stop mgr

GGSCI > start mgr

註意:一般建議不用自動啟動,而是手工啟動,便於觀察狀態驗證啟動是否成功,同時也便於手工修改引數。

 

配置MGR自動重新啟動Extract和Replicat行程

GoldenGate具有自動重起extract或者replicat行程的功能,能夠自動恢復如網路中斷、資料庫臨時掛起等引起的錯誤,在系統恢復後自動重起相關行程,無需人工介入。

1) 進入安裝目錄執行ggsci進入命令列介面;

2) 執行edit param mgr編輯管理行程引數,加入以下行

AUTORESTART ER *, RETRIES 3, WAITMINUTES 5, RESETMINUTES 60

以上引數表示每5分鐘嘗試重新啟動所有行程,共嘗試三次。以後每60分鐘清零,再按照每5分鐘嘗試一次共試3次。

3) 停止MGR行程,修改好引數後重啟該行程,使修改後的引數檔案生效

GGSCI > stop mgr

GGSCI > start mgr

長事務管理

在停止抽取行程前需要透過命令檢查是否存在長交易,以防止下次啟動無法找到歸檔日誌:

ggsci> info extXX, showch…..Read Checkpoint #1….   Recovery Checkpoint (position of oldest unprocessed transaction in the data source):    Thread #: 1    Sequence #: 9671    RBA239077904    Timestamp2008-05-20 11:39:07.000000    SCN2195.1048654191    Redo File: Not available   Current Checkpoint (position of last record read in the data source):    Thread #: 1    Sequence #: 9671    RBA239377476    Timestamp2008-05-20 11:39:10.000000    SCN2195.1048654339    Redo File: Not Available Read Checkpoint #2…..   Recovery Checkpoint (position of oldest unprocessed transaction in the data source):    Thread #: 2    Sequence #: 5287    RBA131154160    Timestamp2008-05-20 11:37:42.000000    SCN2195.1048640151    Redo File: /dev/rredo07   Current Checkpoint (position of last record read in the data source):    Thread #: 2    Sequence #: 5287    RBA138594492    Timestamp2008-05-20 11:39:14.000000    SCN2195.1048654739    Redo File: /dev/rredo07 …..

 

為了方便長交易的管理,GoldenGate提供了一些命令來檢視這些長交易,可以幫助客戶和應用開發商查詢到對應長交易,併在GoldenGate中予以提交或者回滾。

(一) 檢視長交易的方法

Ggsci> send extract , showtrans [thread n] [count n]

其中,為所要察看的行程名,如extsz/extxm/extjx等;

Thread n是可選的,表示只檢視其中一個節點上的未提交交易;

Count n也是可選的,表示只顯示n條記錄。例如,檢視extsz行程中節點1上最長的10個交易,可以透過下列命令:

Ggsci> send extract extsz , showtrans thread 1  count 10

輸出結果是以時間降序排列的所有未提交交易串列,透過xid可以查詢到對應的事務,請應用開發商和DBA幫助可以查找出未提交原因,透過資料庫予以提交或者回滾後GoldenGate的checkpoint會自動向前滾動。

(二) 使用GoldenGate命令跳過或接受長交易的方法

在GoldenGate中強制提交或者回滾指定事務,可以透過以下命令(<>中的為引數):

Ggsci> SEND EXTRACT , SKIPTRANS <5.17.27634> THREAD <2> //跳過交易

Ggsci>SEND EXTRACT , FORCETRANS <5.17.27634> THREAD <1> //強制認為該交易已經提交

說明:使用這些命令只會讓GoldenGate行程跳過或者認為該交易已經提交,但並不改變資料庫中的交易,他們依舊存在於資料庫中。因此,強烈建議使用資料庫中提交或者回滾交易而不是使用GoldenGate處理。

(三) 配置長交易告警

可以在extract行程中配置長交易告警,引數如下所示:

extract extsz……warnlongtrans 12h, checkintervals 10mexttrail /backup/goldengate/dirdat/sz….

以上表示GoldenGate會每隔10分鐘檢查一下長交易,如果有超過12個小時的長交易,GoldenGate會在根目錄下的ggserr.log裡面加入一條告警資訊。可以透過察看ggserr.log或者在ggsci中執行view ggsevt命令檢視這些告警資訊。以上配置可以有助於及時發現長交易並予以處理。

說明:在OGG 11g中,extract提供了BR引數可以設定每隔一段時間(預設4小時)將長交易快取到本地硬碟(預設dirtmp目錄下),因此extract只要不停止一般需要的歸檔日誌不超過8個小時(極限情況)。但是如果extract停掉後,便無法再自動快取長交易,需要的歸檔日誌就會依賴於停機時間變長。

 

表的重新再同步(需時間視窗)

如果是某些表由於各種原因造成兩邊資料不一致,需要重新進行同步,可以參照以下步驟。

1) 確認需要修改的表無資料變化(如果有條件建議停止應用系統並鎖定除去sys和goldengate以外的其它所有使用者防止升級期間資料變化,或者鎖定所要再同步的表);

2) 重啟dpe行程(為了能夠對統計資訊清零);

3) 停止標的端的rep行程;

註意:步驟4-6為將源端資料透過exp/imp匯入到標的端,客戶也可以選擇其它初始化方式,比如在標的端為源端表建立dblink,然後透過create table as select from的方式初始化標的端表。

4) 在源端使用exp匯出該表或者幾張表資料。例如:

exp goldengate/XXXX file=nanhai.dmp tables=ctais2.SB_ZSXX grants=y

5) 透過ftp傳輸到標的端;

6) 在標的端,使用imp匯入資料;

nohup imp goldengate/XXXXX file=nanhai.dmp fromuser=ctais2 touser=ctais2 ignore=y &

7) 如果這些表有外來鍵,在標的端檢查這些外來鍵並禁止它們(記得維護dirsql下的禁止和啟用外來鍵的指令碼SQL);

8) 啟動標的端的rep行程;

9) 使用stats mydpe命令觀察data pump的統計資訊,觀察裡面是否包含了本次重新同步表的資料變化,如確認該時段內這些表無資料變化,則重新初始化成功;否則中間可能產生重覆資料,標的replicat會報錯,將錯誤處理機制設定為reperror default,discard,等待replicat跟上後對discard中的記錄進行再次驗證,如果全部一致則重新初始化也算成功完成,當然也可以另擇時段對這些表重新執行初始化。

表的重新再同步(無需時間視窗)

如果是某些表由於各種原因造成兩邊資料不一致,需要重新進行同步,但實際業務始終24小時可用,不能提供時間視窗,則可以參照以下步驟。(因較為複雜,使用需謹慎!)

1) 確認ext/dpe/rep行程均無較大延遲,否則等待追平再執行操作;

2) 停止標的端的rep行程;

註意:步驟3-5為將源端資料透過exp/imp匯入到標的端,客戶也可以選擇其它初始化方式,比如expdp/impdp。

3) 在源端獲得當前的scn號。例如:

select dbms_flashback.get_system_change_number from dual;

以下以獲得的scn號為1176681為例

4) 在源端使用exp匯出所需重新初始化的表或者幾張表資料,並且指定到剛才記下的scn號。例如:

exp / tables=ctais2.SB_ZSXX grants=n statistics=none triggers=n compress=n FLASHBACK_SCN=1176681

5) 透過ftp傳輸到標的端;

6) 在標的端,使用imp匯入資料;

nohup imp goldengate/XXXXX file=nanhai.dmp fromuser=ctais2 touser=ctais2 ignore=y &

7) 如果這些表有外來鍵,在標的端檢查這些外來鍵並禁止它們(記得維護dirsql下的禁止和啟用外來鍵的指令碼SQL);

8) 編輯標的端對應的rep引數檔案,在其map裡面加入一個過濾條件,只對這些重新初始化的表應用指定scn號之後的記錄(一定要註意不要修改本次初始化之外的其它表,會造成資料丟失!):

map source.mytab, target target.mytab, filter ( @GETENV (“TRANSACTION”, “CSN”) >     1176681 ) ;

9) 確認引數無誤後,啟動標的端的rep行程;

10) 使用info repxx或者lag repxx直到該行程追上,停止該行程去掉filter即可進入正常複製。 

資料結構變更和應用升級

(僅複製DML時)源端和標的端資料庫增減複製表

(一) 增加複製表

在GoldenGate的行程引數中,如果透過*來匹配所有表,因此只要符合*所匹配的條件,那麼只要在源端建立了表之後GoldenGate就能自動複製,無需修改配置檔案,但是需要為新增的表新增附加日誌。

步驟如下:

GGSCI 〉dblogin userid goldengate, password XXXXXXXGGSCI > info trandata .

 

如果不是enable則需要手動加入:

GGSCI > add trandata .

註:(僅對Oracle 9i)如果該表有主鍵或者該表不超過32列,則顯示enabled表示新增成功;如果無主鍵並且列超過32列,則可能出現錯誤顯示無法新增則需要手工處理,此時請根據附錄二中方法手工處理

如果沒有使用統配符,則需要在主Extract、Data Pump裡面最後的table串列裡加入新的複製表;在標的端replicat的map串列同樣也加入該表的對映。

然後,新增表請首先在標的端建立表結構

如果有外來鍵和trigger,需要在標的表臨時禁止該外來鍵和trigger,並維護在dirsql下的禁止和啟用這些物件的對應指令碼檔案。

對於修改了檔案的所有源和標的行程,均需重啟行程使新的引數生效。

(二) 減少複製表

GoldenGate預設複製所有符合萬用字元條件的表,如果有的表不再需要,可以在源端drop掉,然後到標的drop掉,無需對複製做任何修改。

如果其中幾個表依然存在,只是無需GoldenGate複製,則可以透過以下步驟排除:

1) 在源端系統上首先驗證所需歸檔日誌存在後透過stop extXX停止對應的extXX行程;

2) 在標的端系統上ggsci中執行stop repXX停止標的端的複製行程;

3) 在源端修改ext行程的引數檔案排除所不複製的表:

Ggsci> edit param extXX……tableexclude ctais2.TMP_*;tableexclude ctais2.BAK_*;tableexclude ctais2.MLOG$_*;tableexclude ctais2.RUPD$_*;tableexclude ctais2.KJ_*; tableexclude myschema.mytable; table ctais2.*;…….

在檔案定義table的行前面加入一行“tableexclude .;” 註意寫全schema和表的名稱。

:如果是沒有使用萬用字元,則直接註釋掉該表所在的table行即可。

4) 在標的端修改rep行程引數,同樣排除該表:

GGSCI>edit param repXXmap前面加入一行:--mapexclude CTAIS2.SHOULIXINXImapexclude myschema.mytableMAP ctais2.* ,TARGET ctais2.*;

:如果是沒有使用萬用字元,則直接註釋掉該表所在的map行即可。

5) 在標的端系統上啟動複製行程 repXX

GGSCI > start  repXX

6) 在源端系統上啟動源端的抓取行程extXX 

GGSCI > start  extXX

即可進入正常複製狀態。

(僅複製DML時)修改表結構

當資料庫需要複製的表結構有所改變,如增加列,改變某些列的屬性如長度等表結構改變後,可以按照下列步驟執行:

1) 按照本文前面所述操作順序停止源和標的端各抽取及投遞行程(註意停源端抽取要驗證一下歸檔日誌是否存在防止無法重起),無需停止manager行程;

2) 修改標的表結構;

3) 修改源表結構;

4) 如果表有主鍵,並且本次修改未修改主鍵,則可以直接啟動源和標的所有行程繼續複製,完成本次修改;否則,如果表無主鍵或者本次修改了主鍵則需繼續執行下列步驟;

ggsci> dblogin userid goldengate, password XXXXXXggsci> delete trandata schema.mytableggsci> add  trandata schema.mytable

(僅對Oracle 9i)如果表超過了32列則上述操作可能會報錯,此時需要手工進行處理,請參考附錄二如何手動為表刪除和增加附加日誌

5) 重新啟動源端和標的端的抓取和複製行程。

(僅複製DML時)客戶應用的升級

如果是客戶的應用進行了升級,導致了源系統表的變化,在不配置DDL複製到情況下,需要對GoldenGate同步行程進行修改,可以參照以下步驟。

1) 停止源和標的端各抽取及投遞行程(註意停源端抽取要驗證一下歸檔日誌是否存在防止無法重起),無需停止manager行程;

2) 對源系統進行升級;

3) 在標的端將客戶升級應用所創立的儲存過程、表、function等操作再重新構建一遍。對業務表的增刪改等DML操作不必在標的端再執行,它們會被OGG複製過去;

4) 在標的端手工禁止建立的trigger和外來鍵,並將這些sql以及反向維護的(即重新啟用trigger和外來鍵)SQL新增到標的端OGG dirsql目錄下對應的指令碼檔案裡;

註意:在安裝實施時,應當將執行的禁止trigger和外來鍵的表放到標的dirsql下,檔案名建議為disableTrigger.sql和disableFK.sql。同時,需要準備一個反向維護(即重新啟用trigger和外來鍵,建議為enableTrigger.sql和enableFK.sql)SQL,同樣放置到標的端OGG的dirsql目錄下,以備將來接管應用時重新啟用。

5) 對於升級過程中在源端增加的表,需要為新增的表新增附加日誌。步驟如下:

GGSCI 〉dblogin userid goldengate, password XXXXXXX

GGSCI > info trandata .

如果不是enable則需要手動加入:

GGSCI > add trandata .

註:(僅對Oracle 9i)如果該表有主鍵或者該表不超過32列,則顯示enabled表示新增成功;如果無主鍵並且列超過32列,則可能出現錯誤顯示無法新增則需要手工處理,此時請根據附錄二中方法手工處理

6) 對於升級過程中在源端drop掉的表,GoldenGate預設複製所有符合萬用字元條件的表,可以直接在標的端drop掉,無需對複製做任何修改;

7) 如果升級過程中修改了主鍵的表則需繼續執行下列步驟;

ggsci> dblogin userid goldengate, password XXXXXX

ggsci> delete trandata schema.mytable

ggsci> add  trandata schema.mytable

(僅對Oracle 9i)如果表超過了32列則上述操作可能會報錯,此時需要手工進行處理,請參考附錄二如何手動為表刪除和增加附加日誌

8) 重新啟動源端和標的端的抓取和複製行程。

配置DDL複製自動同步資料結構變更

是否開啟DDL複製

對於OGG的DDL複製具體限制請參考附錄。鑒於這些限制,另外一個重要因素是DDL的trigger會對源庫效能帶來一定的影響,在國網原則上並不推薦DDL複製。如果有特殊理由需要開啟DDL複製,可以與Oracle工程師予以協商。

開啟DDL複製的步驟

以下內容為配置DDL複製的步驟,僅作參考,具體請參照GoldenGate的官方安裝檔案。

? (可選,但強烈建議)定期收集統計資訊,提高資料字典訪問速度

OGG的DDL複製需要大量訪問資料字典資訊,透過資料庫定期收集統計資訊(例如,每月一次),可以有效提高OGG DDL複製的效能。以下為一個例子:

sqlplus /nolog <

connect / as sysdbaalter session enable parallel dml;execute dbms_stats.gather_schema_stats('CTAIS2',cascade=> TRUE);execute dbms_stats.gather_schema_stats('SYS',cascade=> TRUE);execute dbms_stats.gather_schema_stats('SYSTEM',cascade=> TRUE);exitEOF

建立OGG複製使用者,或給現有使用者賦許可權:

CREATE USER goldengate   IDENTIFIED BY goldengate DEFAULT TABLESPACE ts_ogg;GRANT CONNECT TO goldengate;GRANT RESOURCE TO goldengate;grant dba to goldengate;

指定DDL物件所在的schema,這裡直接建立在goldengate使用者下:

Ggsci>EDIT PARAMS ./GLOBALSGGSCHEMA goldengate

檢查資料庫的recyclebin引數是否已關閉:

SQL> show parameter recyclebin NAME                                 TYPE------------------------------------ ---------------------------------VALUE------------------------------recyclebin                           stringon 

如不是off,需要關閉recyclebin:

alter system set recyclebin=off

建立OGG的DDL物件:

sqlplus "/ as sysdba"SQL> @marker_setup.sqlEnter GoldenGate schema name:goldengateSQL> @ddl_setup.sqlEnter GoldenGate schema name:goldengateSQL> @role_setup.sqlGrant this role to each user assigned to the Extract, Replicat, GGSCI, and Manager processes, by using the following SQL command: GRANT GGS_GGSUSER_ROLE TO where is the user assigned to the GoldenGate processes.

 

註意這裡的提示:它需要你手工將這個GGS_GGSUSER_ROLE指定給你的extract所使用的資料庫使用者(即引數檔案裡面透過userid指定的使用者),可以到sqlplus下執行類似的sql:

GRANT GGS_GGSUSER_ROLE TO ggs1;

這裡的ggs1是extract使用的使用者。如果你有多個extract,使用不同的資料庫使用者,則需要重述以上過程全部賦予GGS_GGSUSER_ROLE許可權。

啟動OGG DDL捕捉的trigger

在sqlplus裡面執行ddl_enable.sql指令碼啟用ddl捕捉的trigger。

說明:ddl捕捉的trigger與OGG的extract行程是相互獨立的,它並不依賴於extract行程存在。即使OGG的extract行程不存在或者沒有啟動,但是trigger已經啟用了,那麼捕捉ddl的動作就一直延續下去。如想徹底停止捕捉DDL捕捉,需要執行下步禁用ddl的trigger。

 (可選)安裝提高OGG DDL複製效能的工具

為了提供OGG的DDL複製的效能,可以將ddl_pin指令碼加入到資料庫啟動的指令碼後面,該指令碼需要帶一個OGG的DDL使用者(即安裝DDL物件的使用者,本例中是goldengate)的引數:

SQL> @ddl_pin

 (如果不再需要DDL複製時)停止OGG DDL捕捉的trigger

在sqlplus裡面執行ddl_disable.sql指令碼啟用ddl捕捉的trigger。

DDL複製的典型配置

GoldenGate的data pump行程和replicat的ddl開關預設是開啟的,只有主extract是預設關閉的,所以DDL的配置一般只在主extract進行。 結合附錄所述的OGG的各種限制,如果需要開啟DDL複製,則建議只打開跟資料有密切關係的表和index的DDL複製,引數如下:

DDL &INCLUDE MAPPED OBJTYPE 'table' &INCLUDE MAPPED OBJTYPE 'index'DDLOPTIONS ADDTRANDATA, NOCROSSRENAME

另外,在mgr裡面加入自動purge ddl中間表的引數:

userid goldengate,password XXXXXPURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7

 

對於其它物件,依然建議使用手工維護的方式在兩端同時升級。要註意的是級聯刪除和trigger,在標的端建立後應當立即禁用。

異常處理預案

網路故障

如果MGR行程引數檔案裡面設定了autorestart引數,GoldenGate可以自動重啟,無需人工幹預

當網路發生故障時, GoldenGate負責產生遠地佇列的Datapump行程會自動停止. 此時, MGR行程會定期根據mgr.prm裡面autorestart設定自動啟動Datapump行程以試探網路是否恢復。在網路恢復後, 負責產生遠端佇列的Datapump行程會被重新啟動,GoldenGate的檢查點機制可以保證行程繼續從上次中止複製的日誌位置繼續複製。

需要註意的是,因為源端的抽取行程(Capture)仍然在不斷的抓取日誌並寫入本地佇列檔案,但是Datapump行程不能及時把本地佇列搬動到遠地,所以本地佇列檔案無法被自動清除而堆積下來。需要保證足夠容量的儲存空間來儲存堆積的佇列檔案。計算公式如下:

儲存容量≥單位時間產生的佇列大小×網路故障恢復時間

MGR定期啟動抓取和複製行程引數配置參考:

GGSCI > edit param mgrport 7809autorestart er *,waitminutes 3,retries 5,RESETMINUTES 60

每3分鐘重試一次,5次重試失敗以後等待60分鐘,然後重新試三次。

RAC環境下單節點失敗

在RAC環境下,GoldenGate軟體安裝在共享目錄下。可以透過任一個節點連線到共享目錄,啟動GoldenGate執行介面。如果其中一個節點失敗,導致GoldenGate行程中止,可直接切換到另外一個節點繼續執行。建議在Oracle技術支援協助下進行以下操作:

1) 以oracle使用者登入源系統(透過另一完好節點);

2) 確認將GoldenGate安裝所在檔案系統裝載到另一節點相同目錄;

3) 確認GoldenGate安裝目錄屬於oracle使用者及其所在組;

4) 確認oracle使用者及其所在組對GoldenGate安裝目錄擁有讀寫許可權;

5) 進入goldengate安裝目錄;

6) 執行./ggsci進入命令列介面;

7) 執行start mgr啟動mgr;

8) 執行start er *啟動所有行程;

檢查各行程是否正常啟動,即可進入正常複製。以上過程可以透過整合到CRS或HACMP等叢集軟體實現自動的切換,具體步驟請參照國網測試檔案。

Extract行程常見異常

對於源資料庫,抽取行程extxm如果變為abended,則可以透過在ggsci中使用view report命令察看報告,可以透過搜尋ERROR快速定位錯誤

一般情況下,抽取異常的原因是因為其無法找到對應的歸檔日誌,可以透過到歸檔日誌目錄命令列下執行

ls lt arch_X_XXXXX.arc

察看該日誌是否存在,如不存在則可能的原因是:

§ 日誌已經被壓縮

GoldenGate無法自動解壓縮,需要人工解壓縮後才能讀取。

§ 日誌已經被刪除

如果日誌已經被刪除,需要進行恢復才能繼續複製,請聯絡本單位DBA執行恢復歸檔日誌操作。

一般需要定期備份歸檔日誌,並清除舊的歸檔日誌。需要保證歸檔日誌在歸檔目錄中保留足夠長時間之後,才能被備份和清除。即:定期備份清除若干小時之前的歸檔,而不是全部歸檔。保留時間計算如下:

某歸檔檔案保留時間≥抽取行程處理完該檔案中所有日誌所需的時間

可以透過命令列或者GoldenGate Director Web介面,執行info exXX showch命令檢視抓取行程exXX處理到哪條日誌序列號。在此序列號之前的歸檔,都可以被安全的清除。如下圖所示:

 

 

Replicat行程常見異常

對於標的資料庫,投遞行程repXX如果變為abended,則可以透過在ggsci中使用view report命令察看報告,可以透過搜尋ERROR快速定位錯誤。

複製行程的錯誤通常為標的資料庫錯誤,比如:

1) 資料庫臨時停機;

2) 標的表空間儲存空間不夠;

3) 標的表出現不一致。

可以根據報告檢視錯誤原因,排除後重新啟動rep行程即可。

需要註意一點:往往容易忽略UNDO表空間。如果DML陳述句中包含了大量的update和delete操作,則標的端undo的生成速度會很快,有可能填滿UNDO表空間。因此需要經常檢查UNDO表空間的大小。

 異常處理一般步驟

如果GoldenGate複製出現異常,可以透過以下步驟嘗試解決問題:

1. 透過ggsci>view report命令查詢ERROR字樣,確定錯誤原因並根據其資訊進行排除;

2. 透過ggsci>view ggsevt檢視告警日誌資訊;

3. 檢查兩端資料庫是否正常執行,網路是否連通;

4. 如不能確定錯誤原因,則可以尋求Oracle技術支援。在尋求技術支援時一般需要提供以下資訊:

a) 錯誤描述

b) 行程報告,位於dirrpt下以大寫行程名字開頭,以.rpt結尾,如行程名叫extsz,則報告名字叫EXTSZ.rpt;

c) GGS日誌ggserr.log,位於GGS主目錄下;

d) 丟失資料報告,在複製行程的引數disardfile中定義,一般結尾為.dsc;

e) 當前佇列,位於dirdat下。

    已同步到看一看
    贊(0)

    分享創造快樂