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

史上最全的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)

    分享創造快樂