您好,登錄后才能下訂單哦!
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ù)制過程最終完成。
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í)供給
2. 實(shí)時(shí)報(bào)表
靈活拓?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)
⒈ 監(jiān)控與啟動(dòng) GoldenGate 的其它進(jìn)程
⒉ 管理 trail 文件及 Reporting
在 Windows 系統(tǒng)上,Manager 進(jìn)程是作為一個(gè)服務(wù)來啟動(dòng)的,在 Unix 系統(tǒng)下是一個(gè)進(jìn)程
② Extract
Extract 進(jìn)程運(yùn)行在數(shù)據(jù)庫源端上,它是Golden Gate的捕獲機(jī)制,可以配置Extract 進(jìn)程來做如下工作:
⒈ 初始數(shù)據(jù)裝載:對(duì)于初始數(shù)據(jù)裝載,Extract 進(jìn)程直接從源對(duì)象中提取數(shù)據(jù)
⒉ 同步變化捕獲:保持源數(shù)據(jù)與其它數(shù)據(jù)集的同步。初始數(shù)據(jù)同步完成后,Extract 進(jìn)程捕獲源數(shù)據(jù)的變化;如DML變化、 DDL變化等
③ Replicat
Replicat 進(jìn)程是運(yùn)行在目標(biāo)端系統(tǒng)的一個(gè)進(jìn)程,負(fù)責(zé)讀取 Extract 進(jìn)程提取到的數(shù)據(jù)(變更的事務(wù)或 DDL 變化)并應(yīng)用到目標(biāo)數(shù)據(jù)庫
就像 Extract 進(jìn)程一樣,也可以配置 Replicat 進(jìn)程來完成如下工作:
⒈ 初始化數(shù)據(jù)裝載:對(duì)于初始化數(shù)據(jù)裝載,Replicat 進(jìn)程應(yīng)用數(shù)據(jù)到目標(biāo)對(duì)象或者路由它們到一個(gè)高速的 Bulk-load 工具上
⒉ 數(shù)據(jù)同步,將 Extract 進(jìn)程捕獲到的提交了的事務(wù)應(yīng)用到目標(biāo)數(shù)據(jù)庫中
④ Collector
Collector 是運(yùn)行在目標(biāo)端的一個(gè)后臺(tái)進(jìn)程
接收從 TCP/IP 網(wǎng)絡(luò)傳輸過來的數(shù)據(jù)庫變化,并寫到 Trail 文件里
動(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
⑤ Trails
為了持續(xù)地提取與復(fù)制數(shù)據(jù)庫變化,GoldenGate 將捕獲到的數(shù)據(jù)變化臨時(shí)存放在磁盤上的一系列文件中,這些文件就叫做 Trail 文件
這些文件可以在 source DB 上也可以在目標(biāo) DB 上,也可以在中間系統(tǒng)上,這依賴于選擇哪種配置情況
在數(shù)據(jù)庫源端上的叫做 Local Trail 或者 Extract Trail;在目標(biāo)端的叫做 Remote Trail
⑥ Data Pumps
Data Pump 是一個(gè)配置在源端的輔助的 Extract 機(jī)制
Data Pump 是一個(gè)可選組件,如果不配置 Data Pump,那么由 Extract 主進(jìn)程將數(shù)據(jù)發(fā)送到目標(biāo)端的 Remote Trail 文件中
如果配置了 Data Pump,會(huì)由 Data Pump將Extract 主進(jìn)程寫好的本地 Trail 文件通過網(wǎng)絡(luò)發(fā)送到目標(biāo)端的 Remote Trail 文件中
使用 Data Pump 的好處是:
⒈ 如果目標(biāo)端或者網(wǎng)絡(luò)失敗,源端的 Extract 進(jìn)程不會(huì)意外終止
⒉ 需要在不同的階段實(shí)現(xiàn)數(shù)據(jù)的過濾或者轉(zhuǎn)換
⒊ 多個(gè)源數(shù)據(jù)庫復(fù)制到數(shù)據(jù)中心
⒋ 數(shù)據(jù)需要復(fù)制到多個(gè)目標(biāo)數(shù)據(jù)庫
⑦ Data source
當(dāng)處理事務(wù)的變更數(shù)據(jù)時(shí),Extract 進(jìn)程可以從數(shù)據(jù)庫(Oracle, DB2, SQL Server, MySQL等)的事務(wù)日志中直接獲取
或從 GoldenGate VAM中獲取。通過 VAM,數(shù)據(jù)庫廠商將提供所需的組件,用于 Extract 進(jìn)程抽取數(shù)據(jù)的變更
⑧ Groups
為了區(qū)分一個(gè)系統(tǒng)上的多個(gè) Extract 和 Replicat 進(jìn)程,我們可以定義進(jìn)程組
例如:要并行復(fù)制不同的數(shù)據(jù)集,我們可以創(chuàng)建兩個(gè) Replicat 組
一個(gè)進(jìn)程組由一個(gè)進(jìn)程組成(Extract 進(jìn)程或者 Replicat 進(jìn)程),一個(gè)相應(yīng)的參數(shù)文件,一個(gè) Checkpoint 文件,以及其它與之相關(guān)的文件
如果處理組中的進(jìn)程是 Replicat 進(jìn)程,那么處理組還要包含一個(gè) Checkpoint 表
GoldenGate簡(jiǎn)介
Oracle Golden Gate軟件是一種基于日志的結(jié)構(gòu)化數(shù)據(jù)復(fù)制備份軟件,它通過解析源數(shù)據(jù)庫在線日志或歸檔日志獲得數(shù)據(jù)的增量變化,再將這些變化應(yīng)用到目標(biāo)數(shù)據(jù)庫,從而實(shí)現(xiàn)源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫同步。Oracle Golden Gate可以在異構(gòu)的IT基礎(chǔ)結(jié)構(gòu)(包括幾乎所有常用操作系統(tǒng)平臺(tái)和數(shù)據(jù)庫平臺(tái))之間實(shí)現(xiàn)大量數(shù)據(jù)亞秒一級(jí)的實(shí)時(shí)復(fù)制,從而在可以在應(yīng)急系統(tǒng)、在線報(bào)表、 實(shí)時(shí)數(shù)據(jù)倉庫供應(yīng)、交易跟蹤、數(shù)據(jù)同步、集中/分發(fā)、容災(zāi)、數(shù)據(jù)庫升級(jí)和移植、雙業(yè)務(wù)中心等多個(gè)場(chǎng)景下應(yīng)用。同時(shí),Oracle Golden Gate可以實(shí)現(xiàn)一對(duì)一、廣播(一對(duì)多)、聚合(多對(duì)一)、雙向、點(diǎn)對(duì)點(diǎn)、級(jí)聯(lián)等多種靈活的拓?fù)浣Y(jié)構(gòu)。
GoldenGate技術(shù)架構(gòu)
和傳統(tǒng)的邏輯復(fù)制一樣,Oracle GoldenGate實(shí)現(xiàn)原理是通過抽取源端的redo log或者archive log,然后通過TCP/IP投遞到目標(biāo)端,最后解析還原應(yīng)用到目標(biāo)端,使目標(biāo)端實(shí)現(xiàn)同源端數(shù)據(jù)同步。以下是OracleGoldenGate的技術(shù)架構(gòu):
Manager進(jìn)程
Manager進(jìn)程是GoldenGate的控制進(jìn)程,運(yùn)行在源端和目標(biāo)端上。它主要作用有以下幾個(gè)方面:?jiǎn)?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)程
Extract運(yùn)行在數(shù)據(jù)庫源端,負(fù)責(zé)從源端數(shù)據(jù)表或者日志中捕獲數(shù)據(jù)。Extract的作用可以按照表來時(shí)間來劃分:
初始時(shí)間裝載階段:在初始數(shù)據(jù)裝載階段,Extract進(jìn)程直接從源端的數(shù)據(jù)表中抽取數(shù)據(jù)。
同步變化捕獲階段:初始數(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í)。
在進(jìn)行初始化轉(zhuǎn)載,或者批量同步數(shù)據(jù)時(shí), GoldenGate會(huì)生成extract文件來存儲(chǔ)數(shù)據(jù)而不是trail文件。默認(rèn)情況下, 只會(huì)生成一個(gè) extract文件,但如果出于操作系統(tǒng)對(duì)單個(gè)文件大小限制或者其他因素的考慮,也可以通過配置生成多個(gè) extract文件。 extract文件不記錄檢查點(diǎn)。
Extract進(jìn)程的狀態(tài)包括Stopped(正常停止),Starting(正在啟動(dòng)),Running(正在運(yùn)行),Abended(Abnomal End的縮寫,標(biāo)示異常結(jié)束)。
Pump進(jìn)程
pump進(jìn)程運(yùn)行在數(shù)據(jù)庫源端,其作用是將源端產(chǎn)生的本地trail文件,把trail以數(shù)據(jù)塊的形式通過TCP/IP 協(xié)議發(fā)送到目標(biāo)端,這通常也是推薦的方式。pump進(jìn)程本質(zhì)是extract進(jìn)程的一種特殊形式,如果不使用trail文件,那么extract進(jìn)程在抽取完數(shù)據(jù)以后,直接投遞到目標(biāo)端,生成遠(yuǎn)程trail文件。
與 Pump進(jìn)程對(duì)應(yīng) 的叫Server Collector進(jìn)程,這個(gè)進(jìn)程不需要引起我的關(guān)注,因?yàn)樵趯?shí)際操作過程中,無需我們對(duì)其進(jìn)行任何配置,所以對(duì)我們來說它是透明的。它運(yùn)行在目標(biāo)端,其 任務(wù)就是把Extract/Pump投遞過來的數(shù)據(jù)重新組裝成遠(yuǎn)程ttrail文件。
注意:無論是否使用pump進(jìn)程,在目標(biāo)端都會(huì)生成trail文件
pump進(jìn)程可以在線或者批量配置,他可以進(jìn)行數(shù)據(jù)過濾,映射和轉(zhuǎn)換,同時(shí)他還可以配置為“直通模式”,這樣數(shù)據(jù)被傳輸?shù)侥繕?biāo)端時(shí)就可以直接生成所需的格式,無需另外操作。 直通模式提高了data pump的效率,因?yàn)樯珊蟮膶?duì)象 不需要繼續(xù)進(jìn)行檢索。
在大多數(shù)情況下,oracle都建議采用data pump,原因如下:
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)端。
2、 可以支持復(fù)雜的數(shù)據(jù)過濾或者轉(zhuǎn)換: 當(dāng)使用數(shù)據(jù)過濾或者轉(zhuǎn)換時(shí),可以先配置一個(gè)data pump進(jìn)程在目標(biāo)端或者源端進(jìn)行第一步的轉(zhuǎn)換,利用另一個(gè)data pump進(jìn)程或者 Replicat組進(jìn)行第二部的轉(zhuǎn)換。
3、有效的規(guī)劃存儲(chǔ)資源 :當(dāng)從多個(gè)數(shù)據(jù)源同步到一個(gè)數(shù)據(jù)中心時(shí),采用data pump的方式,可以在源端保存抽取的數(shù)據(jù),目標(biāo)端保存trail文件,從而節(jié)約存儲(chǔ)空間。
4、解決單數(shù)據(jù)源向多個(gè)目標(biāo)端傳輸數(shù)據(jù)的單點(diǎn)故障: 當(dāng)從一個(gè)數(shù)據(jù)源發(fā)送數(shù)據(jù)到多個(gè)目標(biāo)端時(shí),可以為每個(gè)目標(biāo)端分別配置不同的data pump進(jìn)程。這樣如果某個(gè)目標(biāo)端失效或者網(wǎng)絡(luò)故障時(shí),其他的目標(biāo)端不會(huì)受到影響可以繼續(xù)同步數(shù)據(jù)。
Replicat進(jìn)程
Replicat進(jìn)程,通常我們也把它叫做應(yīng)用進(jìn)程。運(yùn)行在目標(biāo)端,是數(shù)據(jù)傳遞的最后一站,負(fù)責(zé)讀取目標(biāo)端trail文件中的內(nèi)容,并將其解析為DML或 DDL語句,然后應(yīng)用到目標(biāo)數(shù)據(jù)庫中。
和Extract進(jìn)程一樣,Replicat也有其內(nèi)部的checkpoint機(jī)制,保證重啟后可以從上次記錄的位置開始恢復(fù)而無數(shù)據(jù)損失的風(fēng)險(xiǎn)。
Replicat 進(jìn)程的狀態(tài)包括Stopped(正常停止),Starting(正在啟動(dòng)),Running(正在運(yùn)行),Abended(Abnomal End的縮寫,標(biāo)示異常結(jié)束)。
Trail文件
為了更有效、更安全的把數(shù)據(jù)庫事務(wù)信息從源端投遞到目標(biāo)端。GoldenGate引進(jìn)trail文件的概念。前面提到extract抽取完數(shù)據(jù)以后 Goldengate會(huì)將抽取的事務(wù)信息轉(zhuǎn)化為一種GoldenGate專有格式的文件。然后pump負(fù)責(zé)把源端的trail文件投遞到目標(biāo)端,所以源、 目標(biāo)兩端都會(huì)存在這種文件。 trail文件存在的目的旨在防止單點(diǎn)故障,將事務(wù)信息持久化,并且使用checkpoint機(jī)制來記錄其讀寫位置,如果故障發(fā)生,則數(shù)據(jù)可以根據(jù)checkpoint記錄的位置來重傳 。 當(dāng)然,也可以通過extract通過TCP/IP協(xié)議直接發(fā)送到目標(biāo)端,生成遠(yuǎn)程trail文件。但這種方式可能造成數(shù)據(jù)丟失,前面已經(jīng)提到過了,這里不再贅述。
Trail文件默認(rèn)為10MB,以兩個(gè)字符開始加上000000~999999的數(shù)字作為文件名。如c:\directory/tr000001.默認(rèn)情況下存儲(chǔ)在GoldenGate的dirdat子目錄中??梢詾椴煌瑧?yīng)用或者對(duì)象創(chuàng)建不同的trail文件。同一時(shí)刻,只會(huì)有一個(gè)extract進(jìn)程處理一個(gè)trail文件。
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
我們可以通過為不同的extract和replicat進(jìn)程進(jìn)行分組來去區(qū)分不同進(jìn)程之間的作用。例如,當(dāng)需要并行的復(fù)制不同的數(shù)據(jù)集時(shí),我們則可以創(chuàng)建兩個(gè)或者多個(gè)復(fù)制進(jìn)程。
進(jìn)程組中包含進(jìn)程,進(jìn)程文件,checkpoint文件和其他與進(jìn)程相關(guān)的文件。對(duì)于replicat進(jìn)程來說,如果配置了checkpoint table,則不同組的都會(huì)包含checkpoint table。
組的命名規(guī)則如下
GGSCI
GGSCI是GoldenGate Software Command Interface 的縮寫,它提供了十分豐富的命令來對(duì)Goldengate進(jìn)行各種操作,如創(chuàng)建、修改、監(jiān)控GoldenGate進(jìn)程等等。
Commit Sequence Number
前文已經(jīng)多次提到,Goldengate是以事務(wù)為單位來保證數(shù)據(jù)的完整性的,那么 GoldenGate又是怎么識(shí)別事務(wù)的呢? 這里用到的是Commit Sequence Number(CSN)。CSN存儲(chǔ)在事務(wù)日志中和trail文件中 ,用于數(shù)據(jù)的抽取和復(fù)制。CSN作為事務(wù)開始的標(biāo)志被記錄在trail文件中,可以通過@GETENV字段轉(zhuǎn)換函數(shù)或者logdump工具來查看。不同的數(shù)據(jù)庫平臺(tái)的CSN顯示如下
GoldenGate對(duì)不同數(shù)據(jù)庫的支持情況
*只能作為目標(biāo)端,不能作為源端。但Goldengate可以從mysql直接裝載的原表中抽取數(shù)據(jù)。(由于筆者不了解mysql,這里只是在字面意思翻譯,原文如下
the exception being that GoldenGate can extract records from MySQL source tables as part of a GoldenGate direct load.
** GoldenGate進(jìn)行事務(wù)數(shù)據(jù)管理的API工具
*** 只支持鏡像復(fù)制,不支持?jǐn)?shù)據(jù)操作、過濾,字段映射等。
參考至:《Oracle GoldenGate Administrator Guide》
《企業(yè)級(jí)IT運(yùn)維寶典之GoldenGate實(shí)戰(zhàn)_第1章》聯(lián)動(dòng)北方著
在數(shù)據(jù)庫服務(wù)器上創(chuàng)建文件系統(tǒng):/u01/gg,作為GoldenGate的安裝目錄。
安裝GoldenGate軟件和維護(hù)GoldenGate軟件時(shí),可以使用系統(tǒng)上的oracle用戶。GoldenGate安裝目錄的所有者必須是GoldenGate管理用戶,本次實(shí)施過程中使用oracle用戶作為GoldenGate管理用戶,添加oracle用戶的環(huán)境變量(在生產(chǎn)端和容災(zāi)端均要進(jìn)行以下操作):
export GG_HOME=/u01/gg
export LD_LIBRARY_PATH=$GG_HOME:$ORACLE_HOME/lib:/usr/bin:/lib
export PATH=$GG_HOME:$PATH
切換到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)行以下操作):
cd /u01/gg
./ggsci
在GGSCI界面下創(chuàng)建子目錄(在生產(chǎn)端和容災(zāi)端均要進(jìn)行以下操作):
GGSCI>create subdirs
至此,GoldenGate軟件安裝完畢。
查看數(shù)據(jù)庫的歸檔模式:
SQL>archive log list;
如果是非歸檔模式,需要開啟歸檔模式:
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;
打開附加日志并切換日志(保證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;
alter database force logging;
在生產(chǎn)端和容災(zāi)端均要進(jìn)行以下操作:
--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;
切換到GoldenGate安裝目錄下,執(zhí)行命令:
cd /u01/gg
./ggsci
GGSCI>EDIT PARAMS ./GLOBALS
在文件中添加以下內(nèi)容:
GGSCHEMA ogg --指定的進(jìn)行DDL復(fù)制的數(shù)據(jù)庫用戶
利用默認(rèn)的密鑰,生成密文:
GGSCI>encrypt password ogg encryptkey default
Encrypted password: AACAAAAAAAAAAADAHBLDCCIIOIRFNEPB
記錄這個(gè)密文,將在以下進(jìn)程參數(shù)的配置中使用。
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
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.*;
EXTRACT dpen
RMTHOST 192.168.4.171 , MGRPORT 7839, compress
PASSTHRU
numfiles 50000
RMTTRAIL ./dirdat/na
TABLE QQQ.*;
TABLE CUI.*;
$ 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:
SQL>GRANT GGS_GGSUSER_ROLE TO ogg;
注:這里的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。
在初始化過程中,源數(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í)行命令如下:
//創(chuàng)建進(jìn)程 EXTN
GGSCI>add extract extn,tranlog,begin now
GGSCI>add exttrail ./dirdat/na,extract extn,megabytes 500
//創(chuàng)建進(jìn)程 DPEN
GGSCI>add extract dpen,exttrailsource ./dirdat/na
GGSCI>add rmttrail ./dirdat/na,extract dpen,megabytes 500
在生產(chǎn)端啟動(dòng)管理進(jìn)程:
GGSCI> start mgr
啟用DDL 捕獲trigger:
$ cd /u01/gg
$ sqlplus “/as sysdba”
SQL> @ddl_enable.sql
在生產(chǎn)端啟動(dòng)抽取進(jìn)程:
GGSCI> start EXTN
在數(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)限:
SQL>CREATE OR REPLACE DIRECTORY DATA_PUMP AS '/u01';
SQL>grant read ,write on DIRECTORY DATA_PUMP to ogg;
在生產(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)入:
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
PORT 7839
DYNAMICPORTLIST 7840-7860
--AUTOSTART ER *
--AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 2
userid ogg, password AACAAAAAAAAAAADAHBLDCCIIOIRFNEPB, ENCRYPTKEY default
切換到GoldenGate安裝目錄下,執(zhí)行命令:
cd /u01/gg
./ggsci
ggsci>EDIT PARAMS ./GLOBALS
在文件中添加以下內(nèi)容:
GGSCHEMA ogg --指定的進(jìn)行DDL復(fù)制的數(shù)據(jù)庫用戶
REPLICAT repn
setenv (NLS_LANG=AMERICAN_AMERICA.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.*;
執(zhí)行以下命令創(chuàng)建復(fù)制進(jìn)程repn:
GGSCI>add replicat repn, exttrail ./dirdat/na, nodbcheckpoint
GGSCI>start dpen
GGSCI>start REPLICAT repn aftercsn 123456789
(1)在生產(chǎn)端數(shù)據(jù)庫上,創(chuàng)建一張表。
(2)在生產(chǎn)端數(shù)據(jù)庫上,修改這個(gè)張表的數(shù)據(jù)。
(3)在生產(chǎn)端數(shù)據(jù)庫上,刪除這張表。
(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目錄是否撐滿。
五.Goldengate初級(jí)的性能優(yōu)化
Batchsql
Insert abend
限制內(nèi)存使用
顆粒度拆分
六、goldengate版本升級(jí)
七、goldengate雙向復(fù)制
八、生產(chǎn)庫與容災(zāi)庫之間的回切
八、異構(gòu)數(shù)據(jù)庫之間的數(shù)據(jù)轉(zhuǎn)換,數(shù)據(jù)過濾篩選
故障(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)維手冊(cè)
對(duì)GoldenGate實(shí)例進(jìn)行監(jiā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)行命令行命令。
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)程:
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)程造成不利影響。
進(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)。
使用view params <進(jìn)程名> 可以查看進(jìn)程的參數(shù)設(shè)置。該命令同樣支持通配符*。
使用info <進(jìn)程名稱> 命令可以查看進(jìn)程信息。可以查看到的信息包括進(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)比它大的日志文件,均需要保留。
GGSCI> lag <進(jìn)程名稱> 可以查看詳細(xì)的延時(shí)信息。如:
此命令比用info命令查看到的延時(shí)信息更加精確。
注意,此命令只能夠查看到最后一條處理過的記錄的延時(shí)信息。
此命令支持通配符 *。
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ù)。
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ò)誤原因,解決問題。
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ù)制。
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ù)。
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
在停止抽取進(jìn)程前需要通過命令檢查是否存在長交易,以防止下次啟動(dòng)無法找到歸檔日志:
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
…..
為了方便長交易的管理,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ù)據(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ù)據(jù)不一致,需要重新進(jìn)行同步,但實(shí)際業(yè)務(wù)始終24小時(shí)可用,不能提供時(shí)間窗口,則可以參照以下步驟。(因較為復(fù)雜,使用需謹(jǐn)慎?。?/span>
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ù)丟失?。?/span>
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ù)制。
(一) 增加復(fù)制表
在GoldenGate的進(jìn)程參數(shù)中,如果通過*來匹配所有表,因此只要符合*所匹配的條件,那么只要在源端建立了表之后GoldenGate就能自動(dòng)復(fù)制,無需修改配置文件,但是需要為新增的表添加附加日志。
步驟如下:
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ù)附錄二中方法手工處理。
如果沒有使用統(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ù),同樣排除該表:
GGSCI>edit param repXX
在map前面加入一行:
--mapexclude CTAIS2.SHOULIXINXI
mapexclude myschema.mytable
MAP ctais2.* ,TARGET ctais2.*;
注:如果是沒有使用通配符,則直接注釋掉該表所在的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)。
當(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)程。
如果是客戶的應(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)程。
對(duì)于OGG的DDL復(fù)制具體限制請(qǐng)參考附錄。鑒于這些限制,另外一個(gè)重要因素是DDL的trigger會(huì)對(duì)源庫性能帶來一定的影響,在國網(wǎng)原則上并不推薦DDL復(fù)制。如果有特殊理由需要打開DDL復(fù)制,可以與Oracle工程師予以協(xié)商。
以下內(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è)例子:
sqlplus /nolog <<eof</eof<>
connect / as sysdba
alter 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);
exit
EOF
? 建立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用戶下:
Ggsci>EDIT PARAMS ./GLOBALS
GGSCHEMA 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ì)象:
sqlplus "/ as sysdba"
SQL> @marker_setup.sql
Enter GoldenGate schema name:goldengate
SQL> @ddl_setup.sql
Enter GoldenGate schema name:goldengate
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:
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:
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。
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ù):
userid goldengate,password XXXXX
PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7
PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7
對(duì)于其它對(duì)象,依然建議使用手工維護(hù)的方式在兩端同時(shí)升級(jí)。要注意的是級(jí)聯(lián)刪除和trigger,在目標(biāo)端建立后應(yīng)當(dāng)立即禁用。
如果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)境下,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)測(cè)試文檔。
對(duì)于源數(shù)據(jù)庫,抽取進(jìn)程extxm如果變?yōu)?/span>abended,則可以通過在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)之前的歸檔,都可以被安全的清除。如下圖所示:
對(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下。
GoldenGate依賴對(duì)于數(shù)據(jù)庫日志的解析獲取數(shù)據(jù)變化,因此只能支持?jǐn)?shù)據(jù)庫中的數(shù)據(jù)變化復(fù)制,無法支持文件等非結(jié)構(gòu)化數(shù)據(jù)的復(fù)制。
GoldenGate支持Oralce常見數(shù)據(jù)類型的復(fù)制。
l GoldenGate不支持的數(shù)據(jù)類型
a) ANYDATA
b) ANYDATASET
c) ANYTYPE
d) BFILE
e) BINARY_INTEGER
f) MLSLABEL
g) PLS_INTEGER
h) TIMEZONE_ABBR
i) TIMEZONE_REGION
j) URITYPE
k) UROWID
l GoldenGate有限制支持XML Type復(fù)制
? 僅限于Oracle 9i及以后版本
? 表必須有主鍵或者唯一索引
l GoldenGate有限制支持UDT用戶自定義類型復(fù)制
? 如有該類型數(shù)據(jù)請(qǐng)聯(lián)系技術(shù)支持人員并提供腳本。
GoldenGate當(dāng)前支持普通表的所有DML操作和有限制支持部分特殊對(duì)象的DML操作,對(duì)于特殊表或?qū)ο笳?qǐng)參照后面特殊對(duì)象一節(jié)的說明。
l GoldenGate不支持nologging的表等對(duì)象
當(dāng)表或表空間被設(shè)置為nologging后,使用sqlloader或者append等非常規(guī)模式插入數(shù)據(jù)將不會(huì)被寫入到數(shù)據(jù)庫日志,因此GoldenGate無法獲取這些數(shù)據(jù)變化。建議將所有需要的業(yè)務(wù)表設(shè)置為logging狀態(tài),對(duì)于nologging的表不予以復(fù)制。
l GoldenGate暫不支持對(duì)象和操作如下
a) REF
b) 使用COMPRESS 選項(xiàng)建立的表空間和表
c) Database Replay
l GoldenGate支持Sequence序列的復(fù)制
l GoldenGate可以通過復(fù)制源表支持對(duì)于同義詞或者DBLink的復(fù)制。
由于對(duì)于這些對(duì)象本身的操作發(fā)生于其所鏈接的源數(shù)據(jù)庫對(duì)象,數(shù)據(jù)庫日志中并不記錄對(duì)這些鏈接目標(biāo)對(duì)象的操作,因此GoldenGate不復(fù)制對(duì)同義詞或者DBLink本身的操作,但這些操作會(huì)應(yīng)用在源表上并產(chǎn)生日志,因此可以通過復(fù)制源表復(fù)制變化。
l GoldenGate有限制支持IOT索引組織表復(fù)制
? 僅限于Oracle 10.2及以后版本
? 能夠支持使用MAPPING TABLE創(chuàng)建的IOT,但是只抽取基表的數(shù)據(jù)變化,而不是MAPPING TABLE。
? 不支持以compress模式存儲(chǔ)的IOT。例如,不支持存儲(chǔ)在一個(gè)使用compress選項(xiàng)的表空間里的IOT。
l GoldenGate有限制支持Clustered Table復(fù)制
? 僅限于Oracle 9i及以后版本
? 不支持Encrypted加密和compressed壓縮的clustered tables
l GoldenGate有限制支持物化視圖復(fù)制
? 不支持使用WITH ROWID選項(xiàng)創(chuàng)建的物化視圖
? 源表必須有主鍵
? 不支持物化視圖的Truncate但支持DELETE FROM
? 目標(biāo)物化視圖必須是可更新的
? 只在Oracle 10g或以后的版本支持物化視圖的Full refresh
GoldenGateDDL復(fù)制的原理是通過Trigger從源數(shù)據(jù)庫獲取sql,到目標(biāo)端進(jìn)行重現(xiàn),在實(shí)際使用中有較多限制,即源端能夠執(zhí)行的sql到了目標(biāo)端未必能夠執(zhí)行成功。以下為常見的一些問題:
? 當(dāng)SQL語句里面設(shè)計(jì)的對(duì)象在目標(biāo)不存在時(shí),DDL無法執(zhí)行成功。例如,源建立了一個(gè)DBLINk或create table as select * from mydblink,此時(shí)目標(biāo)端可能并沒有這個(gè)dblink指向的庫或?qū)ο?,所?/span>sql語句會(huì)報(bào)錯(cuò);
? 當(dāng)兩端的物理位置不同時(shí),建立data file或tablespace等與物理位置相關(guān)的語句需要在目標(biāo)端替換為目標(biāo)的物理位置;
? 當(dāng)創(chuàng)建約束沒有指定名稱時(shí),在源和目標(biāo)會(huì)生成不同名稱的對(duì)象,這樣以后對(duì)這些對(duì)象再進(jìn)行修改時(shí)就無法正確映射到目標(biāo)端;
? 當(dāng)復(fù)制帶有LOB的表時(shí),ddl操作必須等待DML操作全部完成以后再復(fù)制;
? 不能復(fù)制表明和列名帶有中文的表;
? 表或其它對(duì)象的定義里面不能加入中文注釋;
? 不能復(fù)制帶有編譯錯(cuò)誤的CREATE trigger/procedure/function/package等對(duì)象;
? 不能復(fù)制結(jié)尾帶有‘/’的sql語句.
此外,GoldenGate DDL復(fù)制需要關(guān)閉Oracle的_RECYCLEBIN參數(shù)(Oracle 10.1)或者RECYCLEBIN參數(shù)(Oracle 10.2及以后版本)。
還有一個(gè)比較重要的是:由于是Trigger based,GoldenGate的DDL復(fù)制可能會(huì)降低源數(shù)據(jù)庫的性能,所以不推薦使用DDL復(fù)制,具體請(qǐng)參照國網(wǎng)OGG實(shí)施原則。
說明:更多詳細(xì)信息請(qǐng)參照OGG的官方參考手冊(cè)。
為數(shù)據(jù)庫表添加附加日志操作的本質(zhì)是執(zhí)行如下的SQL語句:
Alter table
Oracle GoldenGate的add trandata 也是調(diào)用這個(gè)語句執(zhí)行:
1) 當(dāng)表有主鍵時(shí),會(huì)將所有作為主鍵的列放到columns子句里面添加到附加日志組里;
2) 如果沒有主鍵,則會(huì)找唯一索引,將唯一索引列放到columns子句里面添加到附加日志組里;
3) 如果沒有主鍵和唯一索引,則會(huì)將所有列添加到附加日志組中去。
在對(duì)于無主鍵和唯一索引表添加附加日志時(shí),Oracle 9i有個(gè)限制: 即每個(gè)附加日志組不可以超過32個(gè)列(大致數(shù)字,與實(shí)際列定義長度有關(guān)).此時(shí)調(diào)用GoldenGate的add Trandata命令會(huì)失敗,其處理方法是將該表的所有列拆分為若干組,每組不超過32各列,然后分別添加附加日志組(對(duì)不同組合設(shè)置不同附加日志組名)。以下為一個(gè)超過32列表添加附加日志例子:
ALTER TABLE SIEBEL.XYZ_SQL ADD SUPPLEMENTAL LOG GROUP GGS_XYZ_SQL_649101_1(ACTION ,ACTION_HASH ,ADDRESS ,BUFFER_GETS ,CHILD_ADDRESS ,CHILD_LATCH ,CHILD_NUMBER ,COMMAND_TYPE ,CPU_TIME ,DISK_READS ,ELAPSED_TIME ,EXECUTIONS ,FETCHES ,FIRST_LOAD_TIME ,HASH_VALUE ,INSTANCE_ID ,INVALIDATIONS ,IS_OBSOLETE ,KEPT_VERSIONS ,LAST_LOAD_TIME ,LITERAL_HASH_VALUE ,LOADED_VERSIONS ,LOADS ,MODULE ,MODULE_HASH ,OBJECT_STATUS ,OPEN_VERSIONS ,OPTIMIZER_COST ,OPTIMIZER_MODE ,OUTLINE_CATEGORY ,OUTLINE_SID ,PARSE_CALLS) always;
ALTER TABLE SIEBEL.XYZ_SQL ADD SUPPLEMENTAL LOG GROUP GGS_XYZ_SQL_649101_2(PARSING_SCHEMA_ID ,PARSING_USER_ID ,PERSISTENT_MEM ,PLAN_HASH_VALUE ,REMOTE ,ROWS_PROCESSED ,RUNTIME_MEM ,SERIALIZABLE_ABORTS ,SHARABLE_MEM ,SNAP_ID ,SORTS ,SQLTYPE ,SQL_TEXT ,TYPE_CHK_HEAP ,USERS_EXECUTING ,USERS_OPENING) always;
說明:通過手工方式加入附加日志后,不能在ggsci中使用info trandata查看到附加日志,此時(shí)可以通過下列語句查詢是否有表沒有加入到附加日志:
SQL> select * from dba_log_groups where owner='SIEBEL' and table_name=’XXX’;
如想驗(yàn)證是否所需的列均在附加日志中,可以再查詢dba_log_group_columns。
如需將附加日志組drop掉,可以采用如下格式:
Alter table
About Me
............................................................................................................................... ● 本文整理自網(wǎng)絡(luò) ● 本文在itpub(http://blog.itpub.net/26736162)、博客園(http://www.cnblogs.com/lhrbest)和個(gè)人微信公眾號(hào)(xiaomaimiaolhr)上有同步更新 ● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/ ● 本文博客園地址:http://www.cnblogs.com/lhrbest ● 本文pdf版及小麥苗云盤地址:http://blog.itpub.net/26736162/viewspace-1624453/ ● 數(shù)據(jù)庫筆試面試題庫及解答:http://blog.itpub.net/26736162/viewspace-2134706/ ● QQ群:230161599 微信群:私聊 ● 聯(lián)系我請(qǐng)加QQ好友(646634621),注明添加緣由 ● 于 2017-07-01 09:00 ~ 2017-07-31 22:00 在魔都完成 ● 文章內(nèi)容來源于小麥苗的學(xué)習(xí)筆記,部分整理自網(wǎng)絡(luò),若有侵權(quán)或不當(dāng)之處還請(qǐng)諒解 ● 版權(quán)所有,歡迎分享本文,轉(zhuǎn)載請(qǐng)保留出處 ............................................................................................................................... 拿起手機(jī)使用微信客戶端掃描下邊的左邊圖片來關(guān)注小麥苗的微信公眾號(hào):xiaomaimiaolhr,掃描右邊的二維碼加入小麥苗的QQ群,學(xué)習(xí)最實(shí)用的數(shù)據(jù)庫技術(shù)。
|
|
|
|
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。