天天看點

OGG基礎知識總結OGG基礎知識整理

OGG基礎知識整理

1 GoldenGate介紹

GoldenGate軟體是一種基于日志的機構化資料複制軟體,能夠實作大量交易資料的實時捕捉,變化和投遞,實作源資料庫與目标資料庫的資料同步,保持壓秒級的資料延遲。

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

GoldenGate基本架構圖

OGG基礎知識總結OGG基礎知識整理

1.1 Oracle GoldenGate主要元件

  1. Extract
  2. Data Pump
  3. Trails
  4. Collector
  5. Replicat
  6. Manager

1.2 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語句,通過資料庫的本地接口執行,送出到目标端資料庫,送出成功後更新自己的檢查點,記錄已經完成複制的位置,資料的複制過程最終完成。

1.3 Oracle GoldenGate支援的方案

  • 高可用和容災解決方案

    主要用于消除計劃外和計劃内的停機時間

    . 容災與應急備份

    . 消除計劃内停機

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

    OGG基礎知識總結OGG基礎知識整理
  • 實時資料整合解決方案

    主要為DSS或OLTP資料庫提供實時資料,實作資料內建和整合

    . 資料倉庫實時供給

    . 實時報表

    OGG基礎知識總結OGG基礎知識整理
    OGG基礎知識總結OGG基礎知識整理
    下面是一個典的OGG配置邏輯結構圖
    OGG基礎知識總結OGG基礎知識整理

- Manager

Golden Gate中程序的控制程序,用于管理Extract,DataPump,Replicat等程序,Manager程序必須要現在源端和目标端啟動,在整個GoldenGate運作期間,它必須保持運作狀态。

1 監控與啟動GoldenGate的其他程序

2 管理trail檔案及Reporting

在windows系統上,manager程序是作為一個服務來啟動的,在Unix系統下是一個程序。

- Extract

Extract運作在資料庫源端,負責從源端資料表或者日志中捕獲資料。其作用可以按照表來時間來劃分:

初始時間裝載階段:在初始資料裝載階段,該程序直接從源端得資料表中抽取資料。
	
	同步變化捕獲階段:初始資料同步完成以後,該程序負責捕獲源端資料的變化(DML和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(Abnonmal End)的縮寫,表示異常結束
           

- Replicat

運作在目标端系統的一個程序,負責讀取Extract程序提取到的資料(變更的事務或DDL變化)并應用到目标資料庫,就像Extract程序一樣,也可以通過配置Replicate程序來完成如下工作:

初始化資料裝載:對于初始化資料裝載,Replicat 程序應用資料到目标對象或者路由它們到一個高速的 Bulk-load 工具上
	
	資料同步:将 Extract 程序捕獲到的送出了的事務應用到目标資料庫中
	Replicat程序的狀态包括:
	Stopped(正常停止),
	Starting(正常啟動),
	Running(正在運作),
	Abended(Abnonmal End)的縮寫,表示異常結束
           

- Collector

Collector 是運作在目标端的一個背景程序,接收從 TCP/IP 網絡傳輸過來的資料庫變化,并寫到 Trail 檔案裡。

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

	靜态 collector:可以配置成手工運作 collector,這個 collector 就稱之為靜态 collector
           

- Data Pumps

pump程序運作在資料庫源端,其作用是将源端産生的本地trail檔案,把trail以資料塊的形式通過TCP/IP協定發送到目标端,這通常也是推薦的方式。pump程序本質是extract程序的一種特殊形式,如果不使用trail檔案,那麼extract程序在抽取完資料以後,直接投遞到目标端,生成遠端trail檔案,與pump程序對應的叫Sever Collector程序,這個程序在實際操作過程中,無需我們對其進行任何配置,它運作在目标端,其任務就是把Extract/Pump投遞過來的資料重新組裝成遠端trail檔案。

大多數情況下,Oracle都推薦使用pump,原因如下:

1、為目标端或網絡問題提供保障 :

	如果隻在目标端配置trail檔案,由于源端會将extract程序抽取的内容不斷的儲存在記憶體中,并及時的發送到目标端。
	當網絡或者目标端出現故障時, 由于extract程序無法及時的将資料發送到目标, extract程序将耗盡記憶體然後異常終止。 
	如果在源端配置了data pump程序,捕獲的資料會被轉移到硬碟上,預防了異常終止的情況。
	當故障修複,源端和目标端恢複連通性時,data pump程序發送源端的trail檔案到目标端。
	
2、 可以支援複雜的資料過濾或者轉換: 
	
	當使用資料過濾或者轉換時,可以先配置一個data pump程序在目标端或者源端
	進行第一步的轉換,利用另一個data pump程序或者Replicat組進行第二部的轉換。

3、有效的規劃存儲資源 :

	當從多個資料源同步到一個資料中心時,采用data pump的方式,可以在源端儲存抽取的資料,目标端儲存trail檔案,進而節約存儲空間。
	
4、解決單資料源向多個目标端傳輸資料的單點故障:

 	當從一個資料源發送資料到多個目标端時,可以為每個目标端分别配置不同的data pump程序。
 	這樣如果某個目标端失效或者網絡故障時,其他的目标端不會受到影響可以繼續同步資料。 
           

- Trails

為了持續地提取與複制資料庫變化,GoldenGate 将捕獲到的資料變化臨時存放在磁盤上的一系列檔案中,這些檔案就叫做 Trail 檔案。

這些檔案可以在 source DB 上也可以在target DB 上,也可以在中間系統上,
這依賴于選擇哪種配置情況,在資料庫源端上的叫做 Local Trail 或者 Extract Trail;在目标端的叫做 Remote Trail。
           

Trail檔案存在的目的旨在防止單點故障,将事務資訊持久化,并且使用checkpoint記錄其讀寫位置,如果故障發生,則資料可以根據checkpoint記錄的位置來重傳。

Trail檔案預設為10MB,以兩個字元加上000000~999999的數字作為檔案名。如c:\directory/tr000001.預設情況存儲在GoldenGate的dirdat子目錄中,可以為不同應用或者對象建立不同的trail檔案。同一時刻,隻會有一個extract程序處理一個trail檔案

- Data Source

當處理事務的變更資料時,Extract 程序可以從資料庫(Oracle, DB2, SQL Server, MySQL等)的事務日志中直接擷取,或從 GoldenGate VAM中擷取。通過 VAM,資料庫廠商将提供所需的元件,用于 Extract 程序抽取資料的變更

- Groups

我們可以通過為不同的extract和replicat程序進行分組來去區分不同程序之間的作用。例如,當需要并行的複制不同的資料集時,我們則可以建立兩個或者多個複制程序。

程序組中包含程序,程序檔案,checkpoint檔案和其他與程序相關的檔案。對于replicat程序來說,如果配置了checkpoint table,則不同組的都會包含checkpoint table。

2 安裝配置過程整理

2.1 建立GoldenGate軟體安裝目錄

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

2.1 GoldenGate的管理使用者

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

export GG_HOME=/u01/gg
export LD_LIBRARY_PATH=$GG_HOME:$ORACLE_HOME/lib:/usr/bin:/lib
export 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設定資料庫歸檔模式

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(primay key,unique,foreign key) columns;
alter system switch logfile;
           

2.6開啟資料庫強制日志模式

alter database force logging;
           

2.7建立GoldenGate管理使用者

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

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

2.8編輯GLOBALS參數檔案

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

cd /u01/gg
./ggsci
GGSCI>EDIT PARAMS ./GLOBALS
           

在檔案中添加以下内容:

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

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

GGSCI>encrypt password ogg encryptkey default
Encrypted password:  AACAAAAAAAAAAADAHBLDCCIIOIRFNEPB
           

記錄這個密文,将在以下程序參數的配置中使用。

2.9管理程序MGR參數配置

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

2.10抽取程序EXTN參數配置

EXTRACT extn
setenv (NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252)
userid ogg, password AACAAAAAAAAAAADAHBLDCCIIOIRFNEPB, ENCRYPTKEY default
REPORTCOUNT EVERY 1 MINUTES, RATE
DISCARDFILE ./dirrpt/discard_extn.dsc,APPEND,MEGABYTES 1024
 
DBOPTIONS  ALLOWUNUSEDCOLUMN
WARNLONGTRANS 2h,CHECKINTERVAL 3m
EXTTRAIL ./dirdat/na
 
TRANLOGOPTIONS EXCLUDEUSER OGG
TRANLOGOPTIONS ALTARCHIVEDLOGFORMAT %t_%s_%r.dbf
FETCHOPTIONS NOUSESNAPSHOT
TRANLOGOPTIONS CONVERTUCS2CLOBS
TRANLOGOPTIONS altarchivelogdest primary instance test /oradata/arch
--TRANLOGOPTIONS RAWDEVICEOFFSET 0
DYNAMICRESOLUTION
 
DDL INCLUDE ALL
DDLOPTIONS addtrandata, NOCROSSRENAME,  REPORT
 
table QQQ.*;
table CUI.*;
           

2.11 傳輸程序DPEN參數配置

EXTRACT dpen
RMTHOST 192.168.4.171 , MGRPORT 7839, compress
PASSTHRU
numfiles 50000
RMTTRAIL ./dirdat/na
TABLE QQQ.*;
TABLE CUI.*;
           

2.12建立OGG的DDL對象

$ cd /u01/gg 
$ sqlplus "/ as sysdba"
 
SQL> @marker_setup.sql
Enter GoldenGate schema name:ogg
alter system set recyclebin=off;
SQL> @ddl_setup.sql
Enter 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:

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

運作以下腳本,使觸發器生效:

SQL> @ ddl_enable.sql
           

注:在生産端開啟抽取前,先禁用DDL捕獲觸發器,調用ddl_disable.sql。

2.13 資料初始化

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

生産端開啟抽取程序;

生産端導出資料;

容災端導入資料;

在生産端添加抽取程序、傳輸程序以及相應的隊列檔案,執行指令如下:

//建立程序 EXTN
GGSCI>add extract extn,tranlog,begin now
GGSCI>add exttrail ./dirdat/na,extract extn,megabytes 500
 
//建立程序 DPEN
GGSCI>add extract dpen,exttrailsource ./dirdat/na
GGSCI>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 7839
DYNAMICPORTLIST 7840-7860
--AUTOSTART ER *
--AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 2
userid ogg, password AACAAAAAAAAAAADAHBLDCCIIOIRFNEPB, ENCRYPTKEY default
           

2.15編輯GLOBALS參數檔案

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

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

在檔案中添加以下内容:

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

2.16 容災端複制程序REPN參數配置

REPLICAT repn
setenv (NLS_token punctuation">.WE8MSWIN1252)
userid ogg, password AACAAAAAAAAAAADAHBLDCCIIOIRFNEPB, ENCRYPTKEY default
SQLEXEC "ALTER SESSION SET CONSTRAINTS=DEFERRED"
REPORT AT 01:59
REPORTCOUNT EVERY 30 MINUTES, RATE
REPERROR DEFAULT, ABEND
assumetargetdefs
DISCARDFILE ./dirrpt/repna.dsc, APPEND, MEGABYTES 1024
DISCARDROLLOVER AT 02:30
ALLOWNOOPUPDATES
REPERROR (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 dpen
GGSCI>start  REPLICAT repn aftercsn  123456789
           

2.19測試場景

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

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

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

3GoldenGate基本運維指令

3.1檢視程序狀态

GGSCI>info all
           

–檢視GG整體運作情況,比如程序Lag延時,檢查點延時。

GGSCI>info <程序名>
           

–檢視某個程序的運作狀況,比如抽取程序正在讀取哪個歸檔日志或者聯機重做日志,傳輸程序正在傳送哪一個隊列檔案,複制程序正在使用哪一個隊列檔案。

GGSCI>info <程序名> showch
           

——檢視某個程序運作的詳細資訊。

3.2檢視程序報告

GGSCI>view report <程序名> 
           

——報錯時,從程序報告裡擷取錯誤資訊。

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

$ df -h
           

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

4常見故障排除

(1)OGG-00446

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

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

OGG-00664 OCI Error during OCIServerAttach (status = 12541-ORA-12541: TNS:no listener).

處理方法: 啟動資料庫的監聽器

(4)OGG-00665

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

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

處理方法:

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

(6) OGG-00199

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

處理方法:

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

原文連結:https://mp.weixin.qq.com/s/Mt2deYdyhR4v2EcnkZ1rFA