一,、GoldenGate介紹 GoldenGate軟件是一種基于日志的結(jié)構(gòu)化數(shù)據(jù)復(fù)制軟件。GoldenGate 能夠?qū)崿F(xiàn)大量交易數(shù)據(jù)的實(shí)時(shí)捕捉,、變換和投遞,,實(shí)現(xiàn)源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫的數(shù)據(jù)同步,保持亞秒級(jí)的數(shù)據(jù)延遲,。 GoldenGate能夠支持多種拓?fù)浣Y(jié)構(gòu),,包括一對(duì)一,,一對(duì)多,多對(duì)一,,層疊和雙向復(fù)制等等,。 GoldenGate基本架構(gòu)
Oracle GoldenGate主要由如下組件組成 ● Extract ● Data pump ● Trails ● Collector ● Replicat ● Manager Oracle GoldenGate 數(shù)據(jù)復(fù)制過程如下: 利用抽取進(jìn)程(Extract Process)在源端數(shù)據(jù)庫中讀取Online Redo Log或者Archive Log,然后進(jìn)行解析,,只提取其中數(shù)據(jù)的變化信息,,比如DML操作——增、刪,、改操作,,將抽取的信息轉(zhuǎn)換為GoldenGate自定義的中間格式存放在隊(duì)列文件(trail file)中。再利用傳輸進(jìn)程將隊(duì)列文件(trail file)通過TCP/IP傳送到目標(biāo)系統(tǒng),。 目標(biāo)端有一個(gè)進(jìn)程叫Server Collector,,這個(gè)進(jìn)程接受了從源端傳輸過來的數(shù)據(jù)變化信息,把信息緩存到GoldenGate 隊(duì)列文件(trail file)當(dāng)中,,等待目標(biāo)端的復(fù)制進(jìn)程讀取數(shù)據(jù),。 GoldenGate 復(fù)制進(jìn)程(replicat process)從隊(duì)列文件(trail file)中讀取數(shù)據(jù)變化信息,并創(chuàng)建對(duì)應(yīng)的SQL語句,,通過數(shù)據(jù)庫的本地接口執(zhí)行,,提交到目標(biāo)端數(shù)據(jù)庫,提交成功后更新自己的檢查點(diǎn),,記錄已經(jīng)完成復(fù)制的位置,,數(shù)據(jù)的復(fù)制過程最終完成。 Oracle GoldenGate(OGG)可以在多樣化和復(fù)雜的 IT 架構(gòu)中實(shí)現(xiàn)實(shí)時(shí)事務(wù)更改數(shù)據(jù)捕獲,、轉(zhuǎn)換和發(fā)送,;其中,數(shù)據(jù)處理與交換以事務(wù)為單位,,并支持異構(gòu)平臺(tái),,例如:DB2,MSSQL等 3. 雙業(yè)務(wù)中心(也稱:雙活) 實(shí)時(shí)數(shù)據(jù)整合解決方案 主要為 DSS 或 OLTP 數(shù)據(jù)庫提供實(shí)時(shí)數(shù)據(jù),,實(shí)現(xiàn)數(shù)據(jù)集成和整合,它包含以下兩個(gè)子方案: 1. 數(shù)據(jù)倉庫實(shí)時(shí)供給 靈活拓?fù)浣Y(jié)構(gòu)實(shí)現(xiàn)用戶的靈活方案: 下圖是一個(gè)典型的 Golden Gate 配置邏輯結(jié)構(gòu)圖: ① Manager 顧名思義,、Manager進(jìn)程是Golden Gate中進(jìn)程的控制進(jìn)程,,用于管理 Extract,Data Pump,,Replicat等進(jìn)程 在 Extract,、Data Pump,、Replicat 進(jìn)程啟動(dòng)之前,Manager 進(jìn)程必須先要在源端和目標(biāo)端啟動(dòng),,在整個(gè) Golden Gate 運(yùn)行期間,,它必須保持運(yùn)行狀態(tài) Extract 進(jìn)程捕獲源數(shù)據(jù)的變化;如DML變化,、 DDL變化等 ⒈ 初始化數(shù)據(jù)裝載:對(duì)于初始化數(shù)據(jù)裝載,,Replicat 進(jìn)程應(yīng)用數(shù)據(jù)到目標(biāo)對(duì)象或者路由它們到一個(gè)高速的 Bulk-load 工具上 動(dòng)態(tài) collector:由管理進(jìn)程自動(dòng)啟動(dòng)的 collector 叫做動(dòng)態(tài) collector,,用戶不能與動(dòng)態(tài) collector 交互 靜態(tài) collector:可以配置成手工運(yùn)行 collector,,這個(gè) collector 就稱之為靜態(tài) collector GoldenGate簡介 GoldenGate技術(shù)架構(gòu) Manager進(jìn)程是GoldenGate的控制進(jìn)程,運(yùn)行在源端和目標(biāo)端上,。它主要作用有以下幾個(gè)方面:啟動(dòng),、監(jiān)控、重啟Goldengate的其他進(jìn)程,,報(bào)告錯(cuò)誤及事件,,分配數(shù)據(jù)存儲(chǔ)空間,,發(fā)布閥值報(bào)告等,。在目標(biāo)端和源端有且只有一個(gè)manager進(jìn)程,,其運(yùn)行狀態(tài)為running好stopped。 在windows系統(tǒng)上,,manager進(jìn)程作為一個(gè)服務(wù)來啟動(dòng),,二在Linux/Unix系統(tǒng)上則是一個(gè)系統(tǒng)進(jìn)程。 Extract進(jìn)程 同步變化捕獲階段:初始數(shù)據(jù)同步完成以后,,Extract進(jìn)程負(fù)責(zé)捕獲源端數(shù)據(jù)的變化(DML和DDL) GoldenGate并不是對(duì)所有的數(shù)據(jù)庫都支持ddl操作 Extract進(jìn)程會(huì)捕獲所有已配置的需要同步的對(duì)象變化,但只會(huì)將已提交的事務(wù)發(fā)送到遠(yuǎn)程的trail文件用于同步,。當(dāng)事務(wù)提交時(shí),,所有和該事務(wù)相關(guān)的 日志記錄被以事務(wù)為單元順序的記錄到trail文件中。Extract進(jìn)程利用其內(nèi)在的checkpoint機(jī)制,,周期性的記錄其讀寫的位置,,這種機(jī)制是 為了保證Extract進(jìn)程終止或操作系統(tǒng)當(dāng)機(jī),重新啟動(dòng)Extract后,,GoldenGate可以恢復(fù)到之前的狀態(tài),,從上一個(gè)斷點(diǎn)繼續(xù)往下運(yùn)行。通過 上面的兩個(gè)機(jī)制,,就可以保證數(shù)據(jù)的完整性了,。 多 個(gè)Extract 進(jìn)程可以同時(shí)對(duì)不同對(duì)象進(jìn)行操作。例如,,可以在一個(gè)extract進(jìn)程抽取并向目標(biāo)端發(fā)生事務(wù)數(shù)據(jù)的同時(shí),,利用另一個(gè)extract進(jìn)程抽取的數(shù)據(jù)做報(bào) 表?;蛘?,兩個(gè)extract進(jìn)程可以利用兩個(gè)trail文件,同時(shí)抽取并并行傳輸給兩個(gè)replicat進(jìn)程以減少數(shù)據(jù)同步的延時(shí),。 Extract進(jìn)程的狀態(tài)包括Stopped(正常停止),Starting(正在啟動(dòng)),,Running(正在運(yùn)行),,Abended(Abnomal End的縮寫,,標(biāo)示異常結(jié)束)。 注意:無論是否使用pump進(jìn)程,,在目標(biāo)端都會(huì)生成trail文件 1,、為目標(biāo)端或網(wǎng)絡(luò)問題提供保障 :如果只在目標(biāo)端配置trail文件,,由于源端會(huì)將extract進(jìn)程抽取的內(nèi)容不斷的保存在內(nèi)存中,并及時(shí)的發(fā)送到目標(biāo)端,。當(dāng)網(wǎng)絡(luò)或者目標(biāo)端出現(xiàn)故障時(shí),, 由于extract進(jìn)程無法及時(shí)的將數(shù)據(jù)發(fā)送到目標(biāo), extract進(jìn)程將耗盡內(nèi)存然后異常終止,。 如果在源端配置了data pump進(jìn)程,,捕獲的數(shù)據(jù)會(huì)被轉(zhuǎn)移到硬盤上,預(yù)防了 異常終止的情況。當(dāng)故障修復(fù),,源端和目標(biāo)端 恢復(fù)連通性時(shí),,data pump進(jìn)程發(fā)送源端的trail文件到目標(biāo)端。 3、有效的規(guī)劃存儲(chǔ)資源 :當(dāng)從多個(gè)數(shù)據(jù)源同步到一個(gè)數(shù)據(jù)中心時(shí),,采用data pump的方式,,可以在源端保存抽取的數(shù)據(jù),目標(biāo)端保存trail文件,,從而節(jié)約存儲(chǔ)空間,。 10.0版本以后的GoldenGate,,會(huì)在trail文件頭部存儲(chǔ)包含trail文件信息的記錄,,而10.0之前的版本不會(huì)存儲(chǔ)該信息,。每個(gè)trail文件中的數(shù)據(jù)記錄包含了數(shù)據(jù)頭區(qū)域和數(shù)據(jù)區(qū)域,。在 數(shù)據(jù)頭區(qū)域中包含事務(wù)信息,數(shù)據(jù)區(qū)域包含實(shí)際抽取的數(shù)據(jù) 進(jìn)程如何寫trail文件 為了減小系統(tǒng)的I/O負(fù)載,,抽取的數(shù)據(jù)通過大字節(jié)塊的方式存儲(chǔ)到trail文件中,。同時(shí)為了提高兼容性,存儲(chǔ)在trail文件中的數(shù)據(jù)以通用數(shù)據(jù)模式(一種可以在異構(gòu)數(shù)據(jù)庫之間進(jìn)行快速而準(zhǔn)確轉(zhuǎn)換的模式)存儲(chǔ),。 當(dāng)然,,根據(jù)不同應(yīng)用的需求,數(shù)據(jù)也可以存儲(chǔ)為不同的模式,。 默認(rèn)情況下,,extract進(jìn)程以追加的方式寫入trail文件。當(dāng)extract進(jìn)程異常終止時(shí),,trail文件會(huì)被標(biāo)記為需要恢復(fù),。當(dāng)extract重新啟動(dòng)時(shí)會(huì)追加checkpoint之后的數(shù)據(jù)追加到該trail文件中,。在 GoldenGate 10.0之前的版本, extract進(jìn)程采用的是覆蓋模式,。即當(dāng) extract進(jìn)程異常終止,,則會(huì)將至上次完整寫入的事務(wù)數(shù)據(jù)之后的數(shù)據(jù)覆蓋現(xiàn)有trail文件中的內(nèi)容。 這里是筆者理解不是很透徹,,原文如下,,望讀者給予建議 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用于抽取或復(fù)制失敗后(如系統(tǒng)宕機(jī)、網(wǎng)絡(luò)故障燈),,抽取,、復(fù)制進(jìn)程重新定位抽取或者復(fù)制的起點(diǎn)。在高級(jí)的同步配置中,,可以通過配置checkpoint另多個(gè)extract或者replicat進(jìn)程讀取同個(gè)trail文件集,。 extract進(jìn)程在數(shù)據(jù)源和trail文件中都會(huì)標(biāo)識(shí)checkpoint,Replicat只會(huì)在trail文件中標(biāo)示checkpoint,。 在批處理模式中,,extract和replicat進(jìn)程都不會(huì)記錄checkpoint。如果批處理失敗,,則整改批處理會(huì)重新進(jìn)行,。 checkpoint信息會(huì)默認(rèn)存儲(chǔ)在goldengate的子目錄dirchk中。在目標(biāo)端除了checkpoint文件外,,我們也可以通過配置通過額外checkpoint table來存儲(chǔ)replicat的checkpoint信息,。 Group GGSCI 二,、GoldenGate安裝實(shí)施2.1創(chuàng)建GoldenGate軟件安裝目錄在數(shù)據(jù)庫服務(wù)器上創(chuàng)建文件系統(tǒng):/u01/gg,,作為GoldenGate的安裝目錄。 2.2 GoldenGate的管理用戶安裝GoldenGate軟件和維護(hù)GoldenGate軟件時(shí),,可以使用系統(tǒng)上的oracle用戶,。GoldenGate安裝目錄的所有者必須是GoldenGate管理用戶,本次實(shí)施過程中使用oracle用戶作為GoldenGate管理用戶,,添加oracle用戶的環(huán)境變量(在生產(chǎn)端和容災(zāi)端均要進(jìn)行以下操作):
2.3安裝GoldenGate軟件切換到oracle用戶,,將GG軟件的壓縮包存放到GoldenGate安裝目錄下,即/u01/gg,,將這個(gè)壓縮包進(jìn)行解壓到GoldenGate安裝目錄下(在生產(chǎn)端和容災(zāi)端均要進(jìn)行以下操作): tar -zxvf *.gz 進(jìn)入到GoldenGate安裝目錄,,運(yùn)行GGSCI命令以進(jìn)入GG界面(在生產(chǎn)端和容災(zāi)端均要進(jìn)行以下操作):
在GGSCI界面下創(chuàng)建子目錄(在生產(chǎn)端和容災(zāi)端均要進(jìn)行以下操作): GGSCI>create subdirs 至此,GoldenGate軟件安裝完畢,。 2.4設(shè)置數(shù)據(jù)庫歸檔模式查看數(shù)據(jù)庫的歸檔模式:
如果是非歸檔模式,,需要開啟歸檔模式: shutdown immediate; startup mount; alter database archivelog; alter database open; 2.5打開數(shù)據(jù)庫的附加日志打開附加日志并切換日志(保證Online redo log和Archive log一致)
2.6開啟數(shù)據(jù)庫強(qiáng)制日志模式alter database force logging; 2.7創(chuàng)建GoldenGate管理用戶在生產(chǎn)端和容災(zāi)端均要進(jìn)行以下操作:
2.8編輯GLOBALS參數(shù)文件切換到GoldenGate安裝目錄下,執(zhí)行命令: cd /u01/gg ./ggsci GGSCI>EDIT PARAMS ./GLOBALS 在文件中添加以下內(nèi)容:
利用默認(rèn)的密鑰,,生成密文: GGSCI>encrypt password ogg encryptkey default Encrypted password: AACAAAAAAAAAAADAHBLDCCIIOIRFNEPB 記錄這個(gè)密文,,將在以下進(jìn)程參數(shù)的配置中使用。 2.9管理進(jìn)程MGR參數(shù)配置
2.10抽取進(jìn)程EXTN參數(shù)配置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 傳輸進(jìn)程DPEN參數(shù)配置
2.12建立OGG的DDL對(duì)象$ 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. 注意這里的提示:需要手工將這個(gè)GGS_GGSUSER_ROLE指定給extract所使用的數(shù)據(jù)庫用戶(即參數(shù)文件里面通過userid指定的用戶),,可以到sqlplus下執(zhí)行類似的sql:
注:這里的ogg是extract使用的用戶,。如果你有多個(gè)extract,使用不同的數(shù)據(jù)庫用戶,,則需要重述以上過程全部賦予GGS_GGSUSER_ROLE權(quán)限,。 運(yùn)行以下腳本,使觸發(fā)器生效: SQL> @ ddl_enable.sql 注:在生產(chǎn)端開啟抽取前,,先禁用DDL捕獲觸發(fā)器,,調(diào)用ddl_disable.sql。 2.13 數(shù)據(jù)初始化在初始化過程中,,源數(shù)據(jù)庫不需要停機(jī),初始化過程分為三個(gè)部分: 生產(chǎn)端開啟抽取進(jìn)程,; 生產(chǎn)端導(dǎo)出數(shù)據(jù),; 容災(zāi)端導(dǎo)入數(shù)據(jù); 在生產(chǎn)端添加抽取進(jìn)程,、傳輸進(jìn)程以及相應(yīng)的隊(duì)列文件,執(zhí)行命令如下:
啟用DDL 捕獲trigger: $ cd /u01/gg $ sqlplus “/as sysdba” SQL> @ddl_enable.sql 在生產(chǎn)端啟動(dòng)抽取進(jìn)程:
在數(shù)據(jù)庫中,,獲取當(dāng)前的SCN號(hào),,并且記錄這個(gè)SCN號(hào): SQL>select to_char(dbms_flashback.get_system_change_number) from dual; 603809 在數(shù)據(jù)庫中,創(chuàng)建數(shù)據(jù)泵所需目錄并賦予權(quán)限:
在生產(chǎn)端利用數(shù)據(jù)泵導(dǎo)出數(shù)據(jù): 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 把導(dǎo)出的文件傳輸?shù)饺轂?zāi)端,,利用數(shù)據(jù)泵將數(shù)據(jù)導(dǎo)入:
2.14 容災(zāi)端管理進(jìn)程MGR參數(shù)配置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參數(shù)文件切換到GoldenGate安裝目錄下,,執(zhí)行命令:
在文件中添加以下內(nèi)容: GGSCHEMA ogg --指定的進(jìn)行DDL復(fù)制的數(shù)據(jù)庫用戶 2.16 容災(zāi)端復(fù)制進(jìn)程REPN參數(shù)配置
2.17創(chuàng)建復(fù)制進(jìn)程repn執(zhí)行以下命令創(chuàng)建復(fù)制進(jìn)程repn: GGSCI>add replicat repn, exttrail ./dirdat/na, nodbcheckpoint 2.18啟動(dòng)生產(chǎn)端傳輸進(jìn)程和容災(zāi)端復(fù)制進(jìn)程
2.19測試場景(1)在生產(chǎn)端數(shù)據(jù)庫上,創(chuàng)建一張表,。 (2)在生產(chǎn)端數(shù)據(jù)庫上,,修改這個(gè)張表的數(shù)據(jù)。 (3)在生產(chǎn)端數(shù)據(jù)庫上,,刪除這張表,。 三.GoldenGate基本運(yùn)維命令(1)查看進(jìn)程狀態(tài) GGSCI>info all ——查看GG整體運(yùn)行情況,比如進(jìn)程Lag延時(shí),,檢查點(diǎn)延時(shí),。 GGSCI>info <進(jìn)程名> ——查看某個(gè)進(jìn)程的運(yùn)行狀況,比如抽取進(jìn)程正在讀取哪個(gè)歸檔日志或者聯(lián)機(jī)重做日志,,傳輸進(jìn)程正在傳送哪一個(gè)隊(duì)列文件,,復(fù)制進(jìn)程正在使用哪一個(gè)隊(duì)列文件。 GGSCI>info <進(jìn)程名> showch ——查看某個(gè)進(jìn)程運(yùn)行的詳細(xì)信息,。 (2)查看進(jìn)程報(bào)告 GGSCI>view report <進(jìn)程名> ——報(bào)錯(cuò)時(shí),,從進(jìn)程報(bào)告里獲取錯(cuò)誤信息。 (3)在操作系統(tǒng)上,,查看GoldenGate安裝目錄的使用率 $ df -h ——查看ogg目錄是否撐滿,。 四、常見故障排除故障(1) 錯(cuò)誤信息: 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. 處理辦法: 將缺失的歸檔日志從備份中恢復(fù)出來,。如果依舊找不到所需歸檔日志,,那么只能重新實(shí)施數(shù)據(jù)初始化。 故障(2) 錯(cuò)誤信息: 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 . 處理辦法: 數(shù)據(jù)庫中該表空間已滿,,需要對(duì)該表空間進(jìn)行擴(kuò)容,。 故障(3) 錯(cuò)誤信息: OGG-00664 OCI Error during OCIServerAttach (status = 12541-ORA-12541: TNS:no listener). 處理方法: 啟動(dòng)數(shù)據(jù)庫的監(jiān)聽器。 故障(4) 錯(cuò)誤信息: OGG-00665 OCI Error describe for query (status = 3135-ORA-03135: connection lost contact Process ID: 8859 Session ID: 131 Serial number: 31), SQL. 處理方法: 在沒有關(guān)閉OGG進(jìn)程的情況下,,提前關(guān)閉了數(shù)據(jù)庫,,導(dǎo)致OGG進(jìn)程出現(xiàn)異常。如果是發(fā)現(xiàn)了這個(gè)錯(cuò)誤提示,,應(yīng)該馬上關(guān)閉OGG進(jìn)程,,注意數(shù)據(jù)庫的歸檔日志情況,保證歸檔日志不會(huì)缺失,,然后等待數(shù)據(jù)庫啟動(dòng)成功后,,馬上啟動(dòng)OGG進(jìn)程。 故障(5) 錯(cuò)誤信息: OGG-01161 Bad column index (4) specified for table QQQ.TIANSHI, max columns = 4. 處理方法: 對(duì)照一下生產(chǎn)端與容災(zāi)端的這一張表的表結(jié)構(gòu),如果容災(zāi)端的表缺少一列,,則在容災(zāi)端,,登陸數(shù)據(jù)庫,增加這一列,,然后啟動(dòng)復(fù)制進(jìn)程,。 故障(6) 錯(cuò)誤信息: ERROR OGG-00199 Table QQQ.T0417 does not exist in target database. 處理方法: 查看源端抽取進(jìn)程的參數(shù),DDL復(fù)制參數(shù)是否配置,,針對(duì)這張表,,重新實(shí)施數(shù)據(jù)初始化。 GOLDENGATE運(yùn)維手冊 OGG常用監(jiān)控命令說明對(duì)GoldenGate實(shí)例進(jìn)行監(jiān)控,,最簡單的辦法是通過GGSCI命令行的方式進(jìn)行,。通過在命令行輸入一系列命令,并查看返回信息,,來判斷GoldenGate運(yùn)行情況是否正常,。命令行返回的信息包括整體概況、進(jìn)程運(yùn)行狀態(tài),、檢查點(diǎn)信息,、參數(shù)文件配置、延時(shí)等,。 除了直接通過主機(jī)登錄GGSCI界面之外,,也可以通過GoldenGate Director Web界面登錄到每個(gè)GoldenGate實(shí)例,并運(yùn)行GGSCI命令,。假如客戶部署了很多GoldenGate實(shí)例,,如果單獨(dú)登錄到每個(gè)實(shí)例的GGSCI界面,會(huì)很不方便,,此時(shí)建議通過GoldenGate Director Web界面,,登錄到每個(gè)實(shí)例,并運(yùn)行命令行命令,。 啟動(dòng)GoldenGate進(jìn)程1) 首先以啟動(dòng)GoldenGate進(jìn)程的系統(tǒng)用戶(一般為oracle)登錄源系統(tǒng),。 2) 進(jìn)入GoldenGate安裝目錄,執(zhí)行./ggsci進(jìn)入命令行模式,。 3) 啟動(dòng)源端管理進(jìn)程GGSCI > start mgr 4) 同樣登陸到目標(biāo)端GoldenGate安裝目錄,,執(zhí)行./ggsci,然后執(zhí)行GGSCI > start mgr啟動(dòng)管理進(jìn)程,。 5) 在源端執(zhí)行GGSCI > start er *啟動(dòng)所有進(jìn)程 6) 同樣登錄到備份端執(zhí)行GGSCI > start er *啟動(dòng)所有進(jìn)程 7) 使用GGSCI > info er * 或者 GGSCI > info <進(jìn)程名>察看進(jìn)程狀態(tài)是否為Running(表示已經(jīng)啟動(dòng)),。注意有的進(jìn)程需要幾分鐘起來,請(qǐng)重復(fù)命令觀察其啟動(dòng)狀態(tài),。 說明:無論源還是目標(biāo),,啟動(dòng)各extract/replicat進(jìn)程前需要啟動(dòng)mgr進(jìn)程,。 start 命令的一般用法是:start <進(jìn)程名稱> 如: GGSCI> start extdm 啟動(dòng)一個(gè)名叫extdm的進(jìn)程 也可以使用通配符,,如: GGSCI> start er * 啟動(dòng)所有的extract和replicat進(jìn)程 GGSCI> start extract *d* 啟動(dòng)所有的包含字符‘d’extract進(jìn)程 GGSCI> start replicat rep* 啟動(dòng)所有以“rep“開頭的replicat進(jìn)程 停止GoldenGate進(jìn)程依照以下步驟停止GoldenGate進(jìn)程: 1) 以啟動(dòng)GoldenGate進(jìn)程的系統(tǒng)用戶(一般為oracle)登錄源主機(jī),,進(jìn)入GoldenGate安裝目錄執(zhí)行./ggsci進(jìn)入命令行管理界面 2) (本步驟僅針對(duì)抽取日志的主extract進(jìn)程, data pump進(jìn)程和replicat進(jìn)程不需要本步驟)驗(yàn)證GoldenGate的抽取進(jìn)程重起所需的日志存在,,對(duì)各個(gè)主extXX進(jìn)程,,執(zhí)行如下命令: ggsci> info extXX, showch ….. Read Checkpoint #1 …. Recovery Checkpoint (position of oldest unprocessed transaction in the data source): Thread #: 1 Sequence #: 9671 RBA: 239077904 Timestamp: 2008-05-20 11:39:07.000000 SCN: 2195.1048654191 Redo File: Not available Current Checkpoint (position of last record read in the data source): Thread #: 1 Sequence #: 9671 RBA: 239377476 Timestamp: 2008-05-20 11:39:10.000000 SCN: 2195.1048654339 Redo File: Not Available Read Checkpoint #2 ….. Recovery Checkpoint (position of oldest unprocessed transaction in the data source): Thread #: 2 Sequence #: 5287 RBA: 131154160 Timestamp: 2008-05-20 11:37:42.000000 SCN: 2195.1048640151 Redo File: /dev/rredo07 Current Checkpoint (position of last record read in the data source): Thread #: 2 Sequence #: 5287 RBA: 138594492 Timestamp: 2008-05-20 11:39:14.000000 SCN: 2195.1048654739 Redo File: /dev/rredo07 ….. 首先察看Recovery Checkpoint所需要讀取的最古老日志序列號(hào),如舉例中的實(shí)例1需要日志9671及其以后所有歸檔日志,,實(shí)例2需要序列號(hào)為5287及以后所有歸檔日志,,確認(rèn)這些歸檔日志存在于歸檔日志目錄后才可以執(zhí)行下一步重起。如果這些日志已經(jīng)被刪除,,則下次重新啟動(dòng)需要先恢復(fù)歸檔日志,。 注意:對(duì)于OGG 11及以后版本新增了自動(dòng)緩存長交易的功能,缺省每隔4小時(shí)自動(dòng)對(duì)未提交交易緩存到本地硬盤,,這樣只需要最多8個(gè)小時(shí)歸檔日志即可,。但是緩存長交易操作只在extract運(yùn)行時(shí)有效,停止后不會(huì)再緩存,,此時(shí)所需歸檔日志最少為8個(gè)小時(shí)加上停機(jī)時(shí)間,,一般為了保險(xiǎn)起見建議確保重啟時(shí)要保留有12個(gè)小時(shí)加上停機(jī)時(shí)間的歸檔日志。 3) 執(zhí)行GGSCI >stop er *停止所有源進(jìn)程,,或者分別對(duì)各個(gè)進(jìn)程執(zhí)行stop <進(jìn)程名>單獨(dú)停止,。 4) 以oracle用戶登錄目標(biāo)系統(tǒng),進(jìn)入安裝目錄/oraclelog1/goldengate,,執(zhí)行./ggsci進(jìn)入命令行,。 5) 在目標(biāo)系統(tǒng)執(zhí)行stop er *停止復(fù)制 6) 在兩端進(jìn)程都已停止的情況下,如需要可通過stop mgr停止各系統(tǒng)內(nèi)的管理進(jìn)程。 類似的,,stop命令具有跟start命令一樣的用法,。這里不再贅述。 注意,,如果是只修改抽取或者復(fù)制進(jìn)程參數(shù),,則不需要停止MGR。不要輕易停止MGR進(jìn)程,,并且慎重使用通配符er *,, 以免對(duì)其他復(fù)制進(jìn)程造成不利影響。 查看整體運(yùn)行情況進(jìn)入到GoldenGate安裝目錄,,運(yùn)行GGSCI,,然后使用info all命令查看整體運(yùn)行情況。如下圖示:
Group表示進(jìn)程的名稱(MGR進(jìn)程不顯示名字),;Lag表示進(jìn)程的延時(shí),;Status表示進(jìn)程的狀態(tài),。有四種狀態(tài): STARTING: 表示正在啟動(dòng)過程中 RUNNING:表示進(jìn)程正常運(yùn)行 STOPPED:表示進(jìn)程被正常關(guān)閉 ABENDED:表示進(jìn)程非正常關(guān)閉,需要進(jìn)一步調(diào)查原因 正常情況下,,所有進(jìn)程的狀態(tài)應(yīng)該為RUNNING,,且Lag應(yīng)該在一個(gè)合理的范圍內(nèi)。 查看參數(shù)設(shè)置使用view params <進(jìn)程名> 可以查看進(jìn)程的參數(shù)設(shè)置,。該命令同樣支持通配符*,。
查看進(jìn)程狀態(tài)使用info <進(jìn)程名稱> 命令可以查看進(jìn)程信息??梢圆榭吹降男畔ㄟM(jìn)程狀態(tài),、checkpoint信息、延時(shí)等,。如:
還可以使用info <進(jìn)程名稱> detail 命令查看更詳細(xì)的信息,。包括所使用的trail文件,參數(shù)文件,、報(bào)告文件,、警告日志的位置等。如:
使用info <進(jìn)程名稱> showch 命令可以查看到詳細(xì)的關(guān)于checkpoint的信息,,用于查看GoldenGate進(jìn)程處理過的事務(wù)記錄,。其中比較重要的是extract進(jìn)程的recovery checkpoint,它表示源數(shù)據(jù)中最早的未被處理的事務(wù),;通過recovery checkpoint可以查看到該事務(wù)的redo log位于哪個(gè)日志文件以及該日志文件的序列號(hào),。所有序列號(hào)比它大的日志文件,均需要保留,。
查看延時(shí)GGSCI> lag <進(jìn)程名稱> 可以查看詳細(xì)的延時(shí)信息,。如:
此命令比用info命令查看到的延時(shí)信息更加精確。 注意,,此命令只能夠查看到最后一條處理過的記錄的延時(shí)信息,。 此命令支持通配符 *。 查看統(tǒng)計(jì)信息GGSCI> stats <進(jìn)程名稱>,<時(shí)間頻度>,table . 可以查看進(jìn)程處理的記錄數(shù),。該報(bào)告會(huì)詳細(xì)的列出處理的類型和記錄數(shù),。如:
GGSCI> stats edr, total列出自進(jìn)程啟動(dòng)以來處理的所有記錄數(shù)。 GGSCI> stats edr, daily, table gg.test列出當(dāng)天以來處理的有關(guān)gg.test表的所有記錄數(shù),。 查看運(yùn)行報(bào)告GGSCI> view report <進(jìn)程名稱> 可以查看運(yùn)行報(bào)告,。如:
也可以進(jìn)入到/dirrpt/目錄下,查看對(duì)應(yīng)的報(bào)告文件,。最新的報(bào)告總是以<進(jìn)程名稱>.rpt命名的,。加后綴數(shù)字的報(bào)告是歷史報(bào)告,數(shù)字越大對(duì)應(yīng)的時(shí)間越久,。如下圖示:
如果進(jìn)程運(yùn)行時(shí)有錯(cuò)誤,,則報(bào)告文件中會(huì)包括錯(cuò)誤代碼和詳細(xì)的錯(cuò)誤診斷信息,。通過查找錯(cuò)誤代碼,可以幫助定位錯(cuò)誤原因,,解決問題,。 OGG的常見運(yùn)維任務(wù)指南配置自動(dòng)刪除隊(duì)列1) 進(jìn)入安裝目錄執(zhí)行./ggsci; 2) 執(zhí)行edit param mgr編輯管理進(jìn)程參數(shù),,加入或修改以下行 purgeoldextracts //dirdat/*, usecheckpoint, minkeepdays 7 其中,,第一個(gè)參數(shù)為隊(duì)列位置,,*可匹配備份中心所有隊(duì)列文件,; 第二個(gè)參數(shù)表示是首先要保證滿足檢查點(diǎn)需要,不能刪除未處理隊(duì)列,; 第三個(gè)參數(shù)表示最小保留多少天,,后面的數(shù)字為天數(shù)。例如,,如果希望只保留隊(duì)列/ggs/dirdat/xm文件3天,,可以配置如下: purgeoldextracts /ggs/dirdat/xm, usecheckpoint, minkeepdays 3 3) 停止MGR進(jìn)程,修改好參數(shù)后重啟該進(jìn)程 GGSCI > stop mgr 輸入y確認(rèn)停止 GGSCI > start mgr 注:臨時(shí)停止mgr進(jìn)程并不影響數(shù)據(jù)復(fù)制,。 配置啟動(dòng)MGR時(shí)自動(dòng)啟動(dòng)Extract和Replicat進(jìn)程1) 進(jìn)入安裝目錄執(zhí)行./ggsci,; 2) 執(zhí)行edit param mgr編輯管理進(jìn)程參數(shù),加入以下行 AUTOSTART ER * 3) 停止MGR進(jìn)程,,修改好參數(shù)后重啟該進(jìn)程 GGSCI > stop mgr GGSCI > start mgr 注意:一般建議不用自動(dòng)啟動(dòng),,而是手工啟動(dòng),便于觀察狀態(tài)驗(yàn)證啟動(dòng)是否成功,,同時(shí)也便于手工修改參數(shù),。 配置MGR自動(dòng)重新啟動(dòng)Extract和Replicat進(jìn)程GoldenGate具有自動(dòng)重起extract或者replicat進(jìn)程的功能,能夠自動(dòng)恢復(fù)如網(wǎng)絡(luò)中斷,、數(shù)據(jù)庫臨時(shí)掛起等引起的錯(cuò)誤,,在系統(tǒng)恢復(fù)后自動(dòng)重起相關(guān)進(jìn)程,無需人工介入,。 1) 進(jìn)入安裝目錄執(zhí)行g(shù)gsci進(jìn)入命令行界面,; 2) 執(zhí)行edit param mgr編輯管理進(jìn)程參數(shù),加入以下行 AUTORESTART ER *, RETRIES 3, WAITMINUTES 5, RESETMINUTES 60 以上參數(shù)表示每5分鐘嘗試重新啟動(dòng)所有進(jìn)程,,共嘗試三次,。以后每60分鐘清零,再按照每5分鐘嘗試一次共試3次,。 3) 停止MGR進(jìn)程,,修改好參數(shù)后重啟該進(jìn)程,使修改后的參數(shù)文件生效 GGSCI > stop mgr GGSCI > start mgr 長事務(wù)管理在停止抽取進(jìn)程前需要通過命令檢查是否存在長交易,,以防止下次啟動(dòng)無法找到歸檔日志:
為了方便長交易的管理,,GoldenGate提供了一些命令來查看這些長交易,,可以幫助客戶和應(yīng)用開發(fā)商查找到對(duì)應(yīng)長交易,并在GoldenGate中予以提交或者回滾,。 (一) 查看長交易的方法 Ggsci> send extract <進(jìn)程名> , showtrans [thread n] [count n] 其中,,<進(jìn)程名>為所要察看的進(jìn)程名,如extsz/extxm/extjx等,; Thread n是可選的,,表示只查看其中一個(gè)節(jié)點(diǎn)上的未提交交易; Count n也是可選的,,表示只顯示n條記錄,。例如,查看extsz進(jìn)程中節(jié)點(diǎn)1上最長的10個(gè)交易,可以通過下列命令: Ggsci> send extract extsz , showtrans thread 1 count 10 輸出結(jié)果是以時(shí)間降序排列的所有未提交交易列表,,通過xid可以查找到對(duì)應(yīng)的事務(wù),,請(qǐng)應(yīng)用開發(fā)商和DBA幫助可以查找出未提交原因,通過數(shù)據(jù)庫予以提交或者回滾后GoldenGate的checkpoint會(huì)自動(dòng)向前滾動(dòng),。 (二) 使用GoldenGate命令跳過或接受長交易的方法 在GoldenGate中強(qiáng)制提交或者回滾指定事務(wù),,可以通過以下命令(<>中的為參數(shù)): Ggsci> SEND EXTRACT <進(jìn)程名>, SKIPTRANS <5.17.27634> THREAD <2> //跳過交易 Ggsci>SEND EXTRACT <進(jìn)程名>, FORCETRANS <5.17.27634> THREAD <1> //強(qiáng)制認(rèn)為該交易已經(jīng)提交 說明:使用這些命令只會(huì)讓GoldenGate進(jìn)程跳過或者認(rèn)為該交易已經(jīng)提交,但并不改變數(shù)據(jù)庫中的交易,,他們依舊存在于數(shù)據(jù)庫中,。因此,強(qiáng)烈建議使用數(shù)據(jù)庫中提交或者回滾交易而不是使用GoldenGate處理,。 (三) 配置長交易告警 可以在extract進(jìn)程中配置長交易告警,,參數(shù)如下所示: extract extsz …… warnlongtrans 12h, checkintervals 10m exttrail /backup/goldengate/dirdat/sz …. 以上表示GoldenGate會(huì)每隔10分鐘檢查一下長交易,如果有超過12個(gè)小時(shí)的長交易,,GoldenGate會(huì)在根目錄下的ggserr.log里面加入一條告警信息,。可以通過察看ggserr.log或者在ggsci中執(zhí)行view ggsevt命令查看這些告警信息,。以上配置可以有助于及時(shí)發(fā)現(xiàn)長交易并予以處理,。 說明:在OGG 11g中,extract提供了BR參數(shù)可以設(shè)置每隔一段時(shí)間(默認(rèn)4小時(shí))將長交易緩存到本地硬盤(默認(rèn)dirtmp目錄下),,因此extract只要不停止一般需要的歸檔日志不超過8個(gè)小時(shí)(極限情況),。但是如果extract停掉后,便無法再自動(dòng)緩存長交易,,需要的歸檔日志就會(huì)依賴于停機(jī)時(shí)間變長,。 表的重新再同步(需時(shí)間窗口)如果是某些表由于各種原因造成兩邊數(shù)據(jù)不一致,需要重新進(jìn)行同步,,可以參照以下步驟,。 1) 確認(rèn)需要修改的表無數(shù)據(jù)變化(如果有條件建議停止應(yīng)用系統(tǒng)并鎖定除去sys和goldengate以外的其它所有用戶防止升級(jí)期間數(shù)據(jù)變化,或者鎖定所要再同步的表),; 2) 重啟dpe進(jìn)程(為了能夠?qū)y(tǒng)計(jì)信息清零),; 3) 停止目標(biāo)端的rep進(jìn)程,; 注意:步驟4-6為將源端數(shù)據(jù)通過exp/imp導(dǎo)入到目標(biāo)端,客戶也可以選擇其它初始化方式,,比如在目標(biāo)端為源端表建立dblink,,然后通過create table as select from的方式初始化目標(biāo)端表。 4) 在源端使用exp導(dǎo)出該表或者幾張表數(shù)據(jù),。例如: exp goldengate/XXXX file=nanhai.dmp tables=ctais2.SB_ZSXX grants=y 5) 通過ftp傳輸?shù)侥繕?biāo)端,; 6) 在目標(biāo)端,使用imp導(dǎo)入數(shù)據(jù),; nohup imp goldengate/XXXXX file=nanhai.dmp fromuser=ctais2 touser=ctais2 ignore=y & 7) 如果這些表有外鍵,,在目標(biāo)端檢查這些外鍵并禁止它們(記得維護(hù)dirsql下的禁止和啟用外鍵的腳本SQL); 8) 啟動(dòng)目標(biāo)端的rep進(jìn)程,; 9) 使用stats mydpe命令觀察data pump的統(tǒng)計(jì)信息,,觀察里面是否包含了本次重新同步表的數(shù)據(jù)變化,如確認(rèn)該時(shí)段內(nèi)這些表無數(shù)據(jù)變化,,則重新初始化成功;否則中間可能產(chǎn)生重復(fù)數(shù)據(jù),,目標(biāo)replicat會(huì)報(bào)錯(cuò),,將錯(cuò)誤處理機(jī)制設(shè)置為reperror default,discard,等待replicat跟上后對(duì)discard中的記錄進(jìn)行再次驗(yàn)證,,如果全部一致則重新初始化也算成功完成,,當(dāng)然也可以另擇時(shí)段對(duì)這些表重新執(zhí)行初始化。 表的重新再同步(無需時(shí)間窗口)如果是某些表由于各種原因造成兩邊數(shù)據(jù)不一致,,需要重新進(jìn)行同步,,但實(shí)際業(yè)務(wù)始終24小時(shí)可用,不能提供時(shí)間窗口,,則可以參照以下步驟,。(因較為復(fù)雜,使用需謹(jǐn)慎?。?/p> 1) 確認(rèn)ext/dpe/rep進(jìn)程均無較大延遲,,否則等待追平再執(zhí)行操作; 2) 停止目標(biāo)端的rep進(jìn)程,; 注意:步驟3-5為將源端數(shù)據(jù)通過exp/imp導(dǎo)入到目標(biāo)端,,客戶也可以選擇其它初始化方式,比如expdp/impdp,。 3) 在源端獲得當(dāng)前的scn號(hào),。例如: select dbms_flashback.get_system_change_number from dual; 以下以獲得的scn號(hào)為1176681為例 4) 在源端使用exp導(dǎo)出所需重新初始化的表或者幾張表數(shù)據(jù),并且指定到剛才記下的scn號(hào),。例如: exp / tables=ctais2.SB_ZSXX grants=n statistics=none triggers=n compress=n FLASHBACK_SCN=1176681 5) 通過ftp傳輸?shù)侥繕?biāo)端,; 6) 在目標(biāo)端,,使用imp導(dǎo)入數(shù)據(jù); nohup imp goldengate/XXXXX file=nanhai.dmp fromuser=ctais2 touser=ctais2 ignore=y & 7) 如果這些表有外鍵,,在目標(biāo)端檢查這些外鍵并禁止它們(記得維護(hù)dirsql下的禁止和啟用外鍵的腳本SQL),; 8) 編輯目標(biāo)端對(duì)應(yīng)的rep參數(shù)文件,在其map里面加入一個(gè)過濾條件,,只對(duì)這些重新初始化的表應(yīng)用指定scn號(hào)之后的記錄(一定要注意不要修改本次初始化之外的其它表,,會(huì)造成數(shù)據(jù)丟失!): map source.mytab, target target.mytab, filter ( @GETENV ('TRANSACTION', 'CSN') > 1176681 ) ; 9) 確認(rèn)參數(shù)無誤后,,啟動(dòng)目標(biāo)端的rep進(jìn)程,; 10) 使用info repxx或者lag repxx直到該進(jìn)程追上,停止該進(jìn)程去掉filter即可進(jìn)入正常復(fù)制,。 數(shù)據(jù)結(jié)構(gòu)變更和應(yīng)用升級(jí)(僅復(fù)制DML時(shí))源端和目標(biāo)端數(shù)據(jù)庫增減復(fù)制表(一) 增加復(fù)制表 在GoldenGate的進(jìn)程參數(shù)中,,如果通過*來匹配所有表,因此只要符合*所匹配的條件,,那么只要在源端建立了表之后GoldenGate就能自動(dòng)復(fù)制,,無需修改配置文件,但是需要為新增的表添加附加日志,。 步驟如下:
如果不是enable則需要手動(dòng)加入: GGSCI > add trandata . 注:(僅對(duì)Oracle 9i)如果該表有主鍵或者該表不超過32列,,則顯示enabled表示添加成功;如果無主鍵并且列超過32列,,則可能出現(xiàn)錯(cuò)誤顯示無法添加則需要手工處理,,此時(shí)請(qǐng)根據(jù)附錄二中方法手工處理。 如果沒有使用統(tǒng)配符,,則需要在主Extract,、Data Pump里面最后的table列表里加入新的復(fù)制表;在目標(biāo)端replicat的map列表同樣也加入該表的映射,。 然后,,新增表請(qǐng)首先在目標(biāo)端建立表結(jié)構(gòu)。 如果有外鍵和trigger,,需要在目標(biāo)表臨時(shí)禁止該外鍵和trigger,,并維護(hù)在dirsql下的禁止和啟用這些對(duì)象的對(duì)應(yīng)腳本文件。 對(duì)于修改了文件的所有源和目標(biāo)進(jìn)程,,均需重啟進(jìn)程使新的參數(shù)生效,。 (二) 減少復(fù)制表 GoldenGate缺省復(fù)制所有符合通配符條件的表,如果有的表不再需要,,可以在源端drop掉,,然后到目標(biāo)drop掉,無需對(duì)復(fù)制做任何修改。 如果其中幾個(gè)表依然存在,,只是無需GoldenGate復(fù)制,,則可以通過以下步驟排除: 1) 在源端系統(tǒng)上首先驗(yàn)證所需歸檔日志存在后通過stop extXX停止對(duì)應(yīng)的extXX進(jìn)程; 2) 在目標(biāo)端系統(tǒng)上ggsci中執(zhí)行stop repXX停止目標(biāo)端的復(fù)制進(jìn)程,; 3) 在源端修改ext進(jìn)程的參數(shù)文件排除所不復(fù)制的表: 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) 在目標(biāo)端修改rep進(jìn)程參數(shù),,同樣排除該表:
注:如果是沒有使用通配符,則直接注釋掉該表所在的map行即可,。 5) 在目標(biāo)端系統(tǒng)上啟動(dòng)復(fù)制進(jìn)程 repXX GGSCI > start repXX 6) 在源端系統(tǒng)上啟動(dòng)源端的抓取進(jìn)程extXX GGSCI > start extXX 即可進(jìn)入正常復(fù)制狀態(tài),。 (僅復(fù)制DML時(shí))修改表結(jié)構(gòu) 當(dāng)數(shù)據(jù)庫需要復(fù)制的表結(jié)構(gòu)有所改變,如增加列,,改變某些列的屬性如長度等表結(jié)構(gòu)改變后,,可以按照下列步驟執(zhí)行: 1) 按照本文前面所述操作順序停止源和目標(biāo)端各抽取及投遞進(jìn)程(注意停源端抽取要驗(yàn)證一下歸檔日志是否存在防止無法重起),無需停止manager進(jìn)程,; 2) 修改目標(biāo)表結(jié)構(gòu); 3) 修改源表結(jié)構(gòu); 4) 如果表有主鍵,,并且本次修改未修改主鍵,則可以直接啟動(dòng)源和目標(biāo)所有進(jìn)程繼續(xù)復(fù)制,,完成本次修改,;否則,如果表無主鍵或者本次修改了主鍵則需繼續(xù)執(zhí)行下列步驟,; ggsci> dblogin userid goldengate, password XXXXXX ggsci> delete trandata schema.mytable ggsci> add trandata schema.mytable (僅對(duì)Oracle 9i)如果表超過了32列則上述操作可能會(huì)報(bào)錯(cuò),此時(shí)需要手工進(jìn)行處理,,請(qǐng)參考附錄二如何手動(dòng)為表刪除和增加附加日志,。 5) 重新啟動(dòng)源端和目標(biāo)端的抓取和復(fù)制進(jìn)程。 (僅復(fù)制DML時(shí))客戶應(yīng)用的升級(jí)如果是客戶的應(yīng)用進(jìn)行了升級(jí),,導(dǎo)致了源系統(tǒng)表的變化,,在不配置DDL復(fù)制到情況下,需要對(duì)GoldenGate同步進(jìn)程進(jìn)行修改,,可以參照以下步驟,。 1) 停止源和目標(biāo)端各抽取及投遞進(jìn)程(注意停源端抽取要驗(yàn)證一下歸檔日志是否存在防止無法重起),無需停止manager進(jìn)程,; 2) 對(duì)源系統(tǒng)進(jìn)行升級(jí); 3) 在目標(biāo)端將客戶升級(jí)應(yīng)用所創(chuàng)立的存儲(chǔ)過程,、表、function等操作再重新構(gòu)建一遍,。對(duì)業(yè)務(wù)表的增刪改等DML操作不必在目標(biāo)端再執(zhí)行,,它們會(huì)被OGG復(fù)制過去; 4) 在目標(biāo)端手工禁止建立的trigger和外鍵,并將這些sql以及反向維護(hù)的(即重新啟用trigger和外鍵)SQL添加到目標(biāo)端OGG dirsql目錄下對(duì)應(yīng)的腳本文件里; 注意:在安裝實(shí)施時(shí),應(yīng)當(dāng)將執(zhí)行的禁止trigger和外鍵的表放到目標(biāo)dirsql下,,文件名建議為disableTrigger.sql和disableFK.sql,。同時(shí),需要準(zhǔn)備一個(gè)反向維護(hù)(即重新啟用trigger和外鍵,,建議為enableTrigger.sql和enableFK.sql)SQL,,同樣放置到目標(biāo)端OGG的dirsql目錄下,以備將來接管應(yīng)用時(shí)重新啟用,。 5) 對(duì)于升級(jí)過程中在源端增加的表,,需要為新增的表添加附加日志。步驟如下: GGSCI 〉dblogin userid goldengate, password XXXXXXX GGSCI > info trandata . 如果不是enable則需要手動(dòng)加入: GGSCI > add trandata . 注:(僅對(duì)Oracle 9i)如果該表有主鍵或者該表不超過32列,,則顯示enabled表示添加成功,;如果無主鍵并且列超過32列,則可能出現(xiàn)錯(cuò)誤顯示無法添加則需要手工處理,,此時(shí)請(qǐng)根據(jù)附錄二中方法手工處理,。 6) 對(duì)于升級(jí)過程中在源端drop掉的表,GoldenGate缺省復(fù)制所有符合通配符條件的表,,可以直接在目標(biāo)端drop掉,,無需對(duì)復(fù)制做任何修改; 7) 如果升級(jí)過程中修改了主鍵的表則需繼續(xù)執(zhí)行下列步驟,; ggsci> dblogin userid goldengate, password XXXXXX ggsci> delete trandata schema.mytable ggsci> add trandata schema.mytable (僅對(duì)Oracle 9i)如果表超過了32列則上述操作可能會(huì)報(bào)錯(cuò),,此時(shí)需要手工進(jìn)行處理,請(qǐng)參考附錄二如何手動(dòng)為表刪除和增加附加日志,。 8) 重新啟動(dòng)源端和目標(biāo)端的抓取和復(fù)制進(jìn)程,。 配置DDL復(fù)制自動(dòng)同步數(shù)據(jù)結(jié)構(gòu)變更是否打開DDL復(fù)制對(duì)于OGG的DDL復(fù)制具體限制請(qǐng)參考附錄。鑒于這些限制,,另外一個(gè)重要因素是DDL的trigger會(huì)對(duì)源庫性能帶來一定的影響,,在國網(wǎng)原則上并不推薦DDL復(fù)制。如果有特殊理由需要打開DDL復(fù)制,,可以與Oracle工程師予以協(xié)商,。 打開DDL復(fù)制的步驟以下內(nèi)容為配置DDL復(fù)制的步驟,僅作參考,,具體請(qǐng)參照GoldenGate的官方安裝文檔,。 ? (可選,但強(qiáng)烈建議)定期收集統(tǒng)計(jì)信息,,提高數(shù)據(jù)字典訪問速度 OGG的DDL復(fù)制需要大量訪問數(shù)據(jù)字典信息,,通過數(shù)據(jù)庫定期收集統(tǒng)計(jì)信息(例如,每月一次),,可以有效提高OGG DDL復(fù)制的性能,。以下為一個(gè)例子:
建立OGG復(fù)制用戶,或給現(xiàn)有用戶賦權(quán)限: CREATE USER goldengate IDENTIFIED BY goldengate DEFAULT TABLESPACE ts_ogg; GRANT CONNECT TO goldengate; GRANT RESOURCE TO goldengate; grant dba to goldengate; 指定DDL對(duì)象所在的schema,這里直接建立在goldengate用戶下:
檢查數(shù)據(jù)庫的recyclebin參數(shù)是否已關(guān)閉: SQL> show parameter recyclebin NAME TYPE ------------------------------------ --------------------------------- VALUE ------------------------------ recyclebin string on 如不是off,,需要關(guān)閉recyclebin: alter system set recyclebin=off 建立OGG的DDL對(duì)象:
注意這里的提示:它需要你手工將這個(gè)GGS_GGSUSER_ROLE指定給你的extract所使用的數(shù)據(jù)庫用戶(即參數(shù)文件里面通過userid指定的用戶),,可以到sqlplus下執(zhí)行類似的sql: GRANT GGS_GGSUSER_ROLE TO ggs1; 這里的ggs1是extract使用的用戶。如果你有多個(gè)extract,,使用不同的數(shù)據(jù)庫用戶,,則需要重述以上過程全部賦予GGS_GGSUSER_ROLE權(quán)限。 啟動(dòng)OGG DDL捕捉的trigger 在sqlplus里面執(zhí)行ddl_enable.sql腳本啟用ddl捕捉的trigger,。 說明:ddl捕捉的trigger與OGG的extract進(jìn)程是相互獨(dú)立的,,它并不依賴于extract進(jìn)程存在。即使OGG的extract進(jìn)程不存在或者沒有啟動(dòng),,但是trigger已經(jīng)啟用了,,那么捕捉ddl的動(dòng)作就一直延續(xù)下去。如想徹底停止捕捉DDL捕捉,,需要執(zhí)行下步禁用ddl的trigger,。 (可選)安裝提高OGG DDL復(fù)制性能的工具 為了提供OGG的DDL復(fù)制的性能,可以將ddl_pin腳本加入到數(shù)據(jù)庫啟動(dòng)的腳本后面,,該腳本需要帶一個(gè)OGG的DDL用戶(即安裝DDL對(duì)象的用戶,,本例中是goldengate)的參數(shù): SQL> @ddl_pin (如果不再需要DDL復(fù)制時(shí))停止OGG DDL捕捉的trigger 在sqlplus里面執(zhí)行ddl_disable.sql腳本啟用ddl捕捉的trigger。 DDL復(fù)制的典型配置GoldenGate的data pump進(jìn)程和replicat的ddl開關(guān)默認(rèn)是打開的,,只有主extract是默認(rèn)關(guān)閉的,,所以DDL的配置一般只在主extract進(jìn)行。 結(jié)合附錄所述的OGG的各種限制,,如果需要打開DDL復(fù)制,,則建議只打開跟數(shù)據(jù)有密切關(guān)系的表和index的DDL復(fù)制,參數(shù)如下: DDL & INCLUDE MAPPED OBJTYPE 'table' & INCLUDE MAPPED OBJTYPE 'index' DDLOPTIONS ADDTRANDATA, NOCROSSRENAME 另外,,在mgr里面加入自動(dòng)purge ddl中間表的參數(shù):
對(duì)于其它對(duì)象,,依然建議使用手工維護(hù)的方式在兩端同時(shí)升級(jí)。要注意的是級(jí)聯(lián)刪除和trigger,,在目標(biāo)端建立后應(yīng)當(dāng)立即禁用。 異常處理預(yù)案網(wǎng)絡(luò)故障如果MGR進(jìn)程參數(shù)文件里面設(shè)置了autorestart參數(shù),,GoldenGate可以自動(dòng)重啟,,無需人工干預(yù)。 當(dāng)網(wǎng)絡(luò)發(fā)生故障時(shí), GoldenGate負(fù)責(zé)產(chǎn)生遠(yuǎn)地隊(duì)列的Datapump進(jìn)程會(huì)自動(dòng)停止. 此時(shí), MGR進(jìn)程會(huì)定期根據(jù)mgr.prm里面autorestart設(shè)置自動(dòng)啟動(dòng)Datapump進(jìn)程以試探網(wǎng)絡(luò)是否恢復(fù),。在網(wǎng)絡(luò)恢復(fù)后, 負(fù)責(zé)產(chǎn)生遠(yuǎn)程隊(duì)列的Datapump進(jìn)程會(huì)被重新啟動(dòng),,GoldenGate的檢查點(diǎn)機(jī)制可以保證進(jìn)程繼續(xù)從上次中止復(fù)制的日志位置繼續(xù)復(fù)制。 需要注意的是,,因?yàn)樵炊说某槿∵M(jìn)程(Capture)仍然在不斷的抓取日志并寫入本地隊(duì)列文件,,但是Datapump進(jìn)程不能及時(shí)把本地隊(duì)列搬動(dòng)到遠(yuǎn)地,所以本地隊(duì)列文件無法被自動(dòng)清除而堆積下來。需要保證足夠容量的存儲(chǔ)空間來存儲(chǔ)堆積的隊(duì)列文件,。計(jì)算公式如下: 存儲(chǔ)容量≥單位時(shí)間產(chǎn)生的隊(duì)列大小×網(wǎng)絡(luò)故障恢復(fù)時(shí)間 MGR定期啟動(dòng)抓取和復(fù)制進(jìn)程參數(shù)配置參考: GGSCI > edit param mgr port 7809 autorestart er *,waitminutes 3,retries 5,RESETMINUTES 60 每3分鐘重試一次,,5次重試失敗以后等待60分鐘,然后重新試三次,。 RAC環(huán)境下單節(jié)點(diǎn)失敗在RAC環(huán)境下,,GoldenGate軟件安裝在共享目錄下??梢酝ㄟ^任一個(gè)節(jié)點(diǎn)連接到共享目錄,,啟動(dòng)GoldenGate運(yùn)行界面。如果其中一個(gè)節(jié)點(diǎn)失敗,,導(dǎo)致GoldenGate進(jìn)程中止,,可直接切換到另外一個(gè)節(jié)點(diǎn)繼續(xù)運(yùn)行。建議在Oracle技術(shù)支持協(xié)助下進(jìn)行以下操作: 1) 以oracle用戶登錄源系統(tǒng)(通過另一完好節(jié)點(diǎn)),; 2) 確認(rèn)將GoldenGate安裝所在文件系統(tǒng)裝載到另一節(jié)點(diǎn)相同目錄,; 3) 確認(rèn)GoldenGate安裝目錄屬于oracle用戶及其所在組; 4) 確認(rèn)oracle用戶及其所在組對(duì)GoldenGate安裝目錄擁有讀寫權(quán)限,; 5) 進(jìn)入goldengate安裝目錄,; 6) 執(zhí)行./ggsci進(jìn)入命令行界面; 7) 執(zhí)行start mgr啟動(dòng)mgr,; 8) 執(zhí)行start er *啟動(dòng)所有進(jìn)程,; 檢查各進(jìn)程是否正常啟動(dòng),即可進(jìn)入正常復(fù)制,。以上過程可以通過集成到CRS或HACMP等集群軟件實(shí)現(xiàn)自動(dòng)的切換,,具體步驟請(qǐng)參照國網(wǎng)測試文檔。 Extract進(jìn)程常見異常對(duì)于源數(shù)據(jù)庫,,抽取進(jìn)程extxm如果變?yōu)閍bended,,則可以通過在ggsci中使用view report命令察看報(bào)告,可以通過搜索ERROR快速定位錯(cuò)誤,。 一般情況下,,抽取異常的原因是因?yàn)槠錈o法找到對(duì)應(yīng)的歸檔日志,可以通過到歸檔日志目錄命令行下執(zhí)行 ls –lt arch_X_XXXXX.arc 察看該日志是否存在,,如不存在則可能的原因是: § 日志已經(jīng)被壓縮 GoldenGate無法自動(dòng)解壓縮,,需要人工解壓縮后才能讀取。 § 日志已經(jīng)被刪除 如果日志已經(jīng)被刪除,,需要進(jìn)行恢復(fù)才能繼續(xù)復(fù)制,,請(qǐng)聯(lián)系本單位DBA執(zhí)行恢復(fù)歸檔日志操作。 一般需要定期備份歸檔日志,,并清除舊的歸檔日志,。需要保證歸檔日志在歸檔目錄中保留足夠長時(shí)間之后,,才能被備份和清除。即:定期備份清除若干小時(shí)之前的歸檔,,而不是全部歸檔,。保留時(shí)間計(jì)算如下: 某歸檔文件保留時(shí)間≥抽取進(jìn)程處理完該文件中所有日志所需的時(shí)間 可以通過命令行或者GoldenGate Director Web界面,運(yùn)行info exXX showch命令查看抓取進(jìn)程exXX處理到哪條日志序列號(hào),。在此序列號(hào)之前的歸檔,,都可以被安全的清除。如下圖所示:
Replicat進(jìn)程常見異常對(duì)于目標(biāo)數(shù)據(jù)庫,,投遞進(jìn)程repXX如果變?yōu)閍bended,,則可以通過在ggsci中使用view report命令察看報(bào)告,可以通過搜索ERROR快速定位錯(cuò)誤,。 復(fù)制進(jìn)程的錯(cuò)誤通常為目標(biāo)數(shù)據(jù)庫錯(cuò)誤,,比如: 1) 數(shù)據(jù)庫臨時(shí)停機(jī); 2) 目標(biāo)表空間存儲(chǔ)空間不夠,; 3) 目標(biāo)表出現(xiàn)不一致,。 可以根據(jù)報(bào)告查看錯(cuò)誤原因,排除后重新啟動(dòng)rep進(jìn)程即可,。 需要注意一點(diǎn):往往容易忽略UNDO表空間,。如果DML語句中包含了大量的update和delete操作,則目標(biāo)端undo的生成速度會(huì)很快,,有可能填滿UNDO表空間,。因此需要經(jīng)常檢查UNDO表空間的大小。 異常處理一般步驟 如果GoldenGate復(fù)制出現(xiàn)異常,,可以通過以下步驟嘗試解決問題: 1. 通過ggsci>view report命令查找ERROR字樣,,確定錯(cuò)誤原因并根據(jù)其信息進(jìn)行排除; 2. 通過ggsci>view ggsevt查看告警日志信息,; 3. 檢查兩端數(shù)據(jù)庫是否正常運(yùn)行,,網(wǎng)絡(luò)是否連通; 4. 如不能確定錯(cuò)誤原因,,則可以尋求Oracle技術(shù)支持,。在尋求技術(shù)支持時(shí)一般需要提供以下信息: a) 錯(cuò)誤描述 b) 進(jìn)程報(bào)告,位于dirrpt下以大寫進(jìn)程名字開頭,,以.rpt結(jié)尾,,如進(jìn)程名叫extsz,則報(bào)告名字叫EXTSZ.rpt,; c) GGS日志ggserr.log,位于GGS主目錄下,; d) 丟失數(shù)據(jù)報(bào)告,,在復(fù)制進(jìn)程的參數(shù)disardfile中定義,,一般結(jié)尾為.dsc; e) 當(dāng)前隊(duì)列,,位于dirdat下,。 |
|