了解如何安裝、設(shè)置和配置 Oracle GoldenGate 以輕松實現(xiàn) Oracle Database 10g 和 11g 之間數(shù)據(jù)的無縫復(fù)制。
作者:Porus Homi Havewala
2010 年 4 月發(fā)布
Oracle GoldenGate 用于在各種企業(yè)系統(tǒng)間以亞秒級速度復(fù)制和集成事務(wù)數(shù)據(jù),是同類最佳的、易于部署的產(chǎn)品。Oracle GoldenGate 可以靈活地在同類和異類系統(tǒng)(包括不同版本的 Oracle Database、不同的硬件平臺)tb之間以及 Oracle 數(shù)據(jù)庫和非 Oracle 數(shù)據(jù)庫(包括 Microsoft SQL Server、用于開放系統(tǒng)和 z/OS 的 IBM DB2、Sybase 等等)之間移動數(shù)據(jù)。
本文演示如何安裝、設(shè)置和配置此產(chǎn)品以輕松實現(xiàn) Oracle Database 10g 和 11g 之間數(shù)據(jù)的無縫復(fù)制,還介紹了此產(chǎn)品的加速能力。
Oracle 于 2009 年收購了 GoldenGate,我們可以看到在全球各行業(yè)超過 4,000 個解決方案中實施了 Oracle GoldenGate。該軟件執(zhí)行實時的、基于日志的更改數(shù)據(jù)捕獲 (CDC),能夠在異構(gòu)數(shù)據(jù)庫間以極低的延遲和很小的空間移動大量事務(wù)數(shù)據(jù)。
通常,您部署 GoldenGate 捕獲、數(shù)據(jù)泵和交付進程,并且可將這些進程部署在許多不同的操作系統(tǒng)和數(shù)據(jù)庫上??筛鶕?jù)目標(biāo)數(shù)據(jù)庫的需要,復(fù)制所有數(shù)據(jù)或部分數(shù)據(jù)。當(dāng) Oracle GoldenGate 用于 Oracle 數(shù)據(jù)庫時,可以復(fù)制數(shù)據(jù)操作語言 (DML) 和數(shù)據(jù)定義語言 (DDL) 操作。(目前只能在同類(不能在異類的)Oracle 版本間復(fù)制 DDL 操作。)
Oracle GoldenGate 官方支持 Oracle9i 第 2 版到 Oracle Database 11g 第 2 版,并且對所有這些版本提供 DML/DDL 支持。該產(chǎn)品可用于 Oracle Database 的企業(yè)版和標(biāo)準(zhǔn)版。
如上所述,可以在所支持的同類或異類 Oracle Database 版本間移動數(shù)據(jù),也可以在 Oracle 數(shù)據(jù)庫和非 Oracle 數(shù)據(jù)庫間移動數(shù)據(jù)。大多數(shù)情況下,可對數(shù)據(jù)進行篩選、映射和轉(zhuǎn)換。注意,如果啟用了 DDL 支持(換言之,如果使用 GoldenGate 進行同類 Oracle Database 版本之間的 DDL 復(fù)制),則不支持數(shù)據(jù)篩選、映射和轉(zhuǎn)換。
Oracle GoldenGate 是以 DBA 為中心的,因此 DBA 很容易學(xué)會如何使用它。其實現(xiàn)時間也是最少的 — 一些站點只用一個月的時間就完全付諸實現(xiàn)。
可獲得什么
Oracle GoldenGate 產(chǎn)品系列包括:
- Oracle GoldenGate
- Management Pack for Oracle GoldenGate(也稱為 Oracle GoldenGate Director)
- Oracle GoldenGate Veridata
- Oracle GoldenGate Application Adapters
- Oracle GoldenGate for Mainframe
為使增值服務(wù)造??蛻簦琌racle GoldenGate 核心許可包括 Oracle Active Data Guard 的全權(quán)使用許可和 Oracle Database 中 XStream 的全權(quán)使用許可。XStream 是與 Oracle Streams 接口的 API。Oracle Active Data Guard 支持主動打開備用數(shù)據(jù)庫以提供報表服務(wù),甚至在應(yīng)用重做數(shù)據(jù)的同時也如此。這個特性非常棒,可將生產(chǎn)報表和查詢工作分流到備用數(shù)據(jù)庫上。
一直以來,Oracle Streams 只用于在 Oracle 數(shù)據(jù)庫間復(fù)制數(shù)據(jù)。Oracle GoldenGate 還可以在非 Oracle 數(shù)據(jù)庫間復(fù)制數(shù)據(jù),并且這種復(fù)制易于建立。
我們應(yīng)注意到,已發(fā)布的 Oracle — GoldenGate 發(fā)展方向聲明 中指出,“由于 Oracle GoldenGate 的戰(zhàn)略性,將繼續(xù)支持 Oracle Streams,但不會對其進行主動增強。而是對 Oracle Streams 中最好的內(nèi)容行評估以確定是否將其并入 Oracle GoldenGate 中。”
此演示的目的
為了進行此次演示,您應(yīng)在一臺 Microsoft Windows 服務(wù)器上有三個數(shù)據(jù)庫。這三個數(shù)據(jù)庫是 HRPRD1、HRPRD2 和 HRPRD3。其數(shù)據(jù)庫版本分別為 Oracle Database 11g、 Oracle Database 10g 和 Oracle Database 10g 。
這三個數(shù)據(jù)庫的 SYS 和 SYSTEM 口令已設(shè)置為 hrpassword1,用于測試目的。稍后可更改此口令。
此演示的目的是在 HRPRD2 和 HRPRD3 這兩個 Oracle 10g 數(shù)據(jù)庫的 HR.EMPLOYEES 表之間建立單向復(fù)制。對第一個數(shù)據(jù)庫中此表的 DML 更改應(yīng)傳給第二個數(shù)據(jù)庫。然后,我們將對這一復(fù)制進行增強,可以將更改同時復(fù)制到 Oracle 11g 數(shù)據(jù)庫 HRPRD1 中。其結(jié)果是,對 HRPRD2 中該表的任何更新、插入和刪除不僅將會成功更新 HRPRD3,也會成功更新 HRPRD1。
這種從 Oracle Database 10g 到 Oracle Database 10g 然后再到 Oracle Database 11g 的復(fù)制策略常用于升級情況,進行升級時,需要先復(fù)制數(shù)據(jù),然后方可切換到升級后的數(shù)據(jù)庫版本。Oracle GoldenGate 提供了簡單的解決方案。
注意,針對 Oracle 數(shù)據(jù)庫時,您不 需要使用 Microsoft ODBC 數(shù)據(jù)源管理器為這些數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)源名稱 (DSN)。Oracle GoldenGate 復(fù)制將使用監(jiān)聽器直接連接到 Oracle 數(shù)據(jù)庫。
需要下載的內(nèi)容
首先,對于 Windows 系統(tǒng),需要從 Microsoft 下載中心下載 Microsoft Visual C ++ 2005 SP1 Redistributable Package,然后進行安裝。如果計算機上未安裝 Visual C++,這用于安裝運行本應(yīng)用程序時所需的 Visual C++ 庫的運行時組件。
接下來,需要從 Oracle 技術(shù)網(wǎng) 下載 Oracle GoldenGate 軟件。截至本文撰寫時,OTN 只支持 Windows 平臺 64 位版本:適用于 Windows 2000、XP 和 2003(64 位)上的 Oracle 10g 的 Oracle GoldenGate 10.4.0.x 版 (8 MB)。要下載 32 位 Windows 版本,您必須使用 Oracle E-Delivery 網(wǎng)站。(請注意,E-Delivery 下載有一個為期 30 天的試用產(chǎn)品許可,而非 OTN 開發(fā)人員許可。)登錄此網(wǎng)站后,搜索適用于 Microsoft Windows(32 位)平臺的“Oracle Fusion Middleware Product Pack”(因為 Oracle GoldenGate 被視作一個 Oracle 融合中間件產(chǎn)品,而非 Oracle Database 產(chǎn)品),然后單擊 Go 。
此時會出現(xiàn)介質(zhì)包列表。在此列表中,先選擇 Oracle GoldenGate on Oracle Media Pack for Microsoft Windows (32-bit) 。
此介質(zhì)包中包含:
適用于 Windows 2000、XP 和 2003 上的 Oracle 10g 的 Oracle GoldenGate 10.4.0.x 版 |
V18162-01 |
大小:8.4 MB |
適用于 Windows 2000、XP 和 2003 上的 Oracle 11g 的 Oracle GoldenGate 10.4.0.x 版 |
V18164-01 |
大小:8.4 MB |
Oracle GoldenGate 文檔 |
V18423-01 |
大小:20 MB |
下載這三個 zip 文件,因為您需要適用于 Oracle 10g 和 Oracle 11g 的 Oracle GoldenGate。
然后,返回到 Oracle 融合中間件的介質(zhì)包列表,從中tb選擇 Management Pack for Oracle GoldenGate (v2.0.0.2) Media Pack for Microsoft Windows 。
該管理包介質(zhì)包中包含:
適用于 Windows 的 Oracle GoldenGate Director V2.0.0.x Server |
V18127-01 |
大小:228 MB |
適用于 Windows 的 Oracle GoldenGate Director V2.0.0.x Client |
V18128-01 |
大?。?5 MB |
Oracle GoldenGate Director 文檔 |
V18129-01 |
大?。?52 KB |
如果您想安裝管理包,下載所有這些文件。該管理包是一個安裝您 Windows 服務(wù)器上的獨立產(chǎn)品,。該產(chǎn)品原名為 Oracle GoldenGate Director,它包含一個多層的客戶端-服務(wù)器應(yīng)用程序,使組織可以輕松監(jiān)視和管理其 Oracle GoldenGate 部署。
使用 Oracle GoldenGate Director 的 GUI 界面,可以集中設(shè)計和配置 Oracle GoldenGate,還可以管理和監(jiān)視為了在公司各服務(wù)器間復(fù)制數(shù)據(jù)而建立的各種 Oracle GoldenGate 進程。
介質(zhì)包的主列表中還有其他一些介質(zhì)包,如 Oracle GoldenGate Veridata Media Pack for Microsoft Windows。
Oracle GoldenGate Veridata 軟件作為服務(wù)器進行安裝,在不同平臺上具有代理,它負責(zé)將一組數(shù)據(jù)與另一組數(shù)據(jù)進行對比以識別不同步的數(shù)據(jù),對比時無需停機。此對比可全天候進行,可與大流量的復(fù)制同時進行。還可在不同平臺間進行數(shù)據(jù)對比。
除了上述主要介質(zhì)包外,列表中還顯示了其他 Oracle GoldenGate 包。這些軟件包適用于非 Oracle 數(shù)據(jù)庫,如 Sybase、SQL Server、IBM DB2、Teradata,還有 JMS 和平面文件,這反映了 Oracle GoldenGate 支持異構(gòu)的性質(zhì)。
安裝步驟
您下載的 Oracle GoldenGate 文檔 zip 文件 (V18423-01.zip) 中包含 Oracle GoldenGate Oracle Installation and Setup Guide Version 10.4 (gg_ora_inst_v104.pdf),其中描述了適用于 Linux、UNIX 和 Windows 上的 Oracle 數(shù)據(jù)庫的 Oracle GoldenGate 的安裝步驟。
注意,還有其他一些安裝文檔,它們針對適用于 Sybase、SQL Server、DB2、MySQL、Teradata 等的 Oracle GoldenGate。
首先,將 Oracle GoldenGate for Oracle 10g (V18162-01.zip) 解壓縮到一個新的 Oracle GoldenGate 軟件目錄中,目錄名中不含任何空格。例如,您可以使用 C:\OGG10G 作為 Oracle GoldenGate 目錄。此目錄中的軟件代碼將用于建立第一個和第二個 Oracle 10g 數(shù)據(jù)庫之間的復(fù)制。
由于您的第三個數(shù)據(jù)庫是 Oracle Database 11g 版 ,您還需要解壓縮 Oracle GoldenGate for Oracle 11g (V18164-01.zip)。對于此版本的 Oracle GoldenGate,您需要使用一個單獨的目錄,C:\OGG11G。此目錄中的軟件代碼將用于控制到第三個 Oracle Database 11g 數(shù)據(jù)庫的復(fù)制。
如果您有 Oracle9i 數(shù)據(jù)庫并且想從其復(fù)制數(shù)據(jù)或向其復(fù)制數(shù)據(jù),需要另一個適用于 Oracle9i 的 Oracle GoldenGate 軟件。不過,您不能通過 Oracle 網(wǎng)站下載 Oracle GoldenGate 的 Oracle9i 版本。如果您需要此版本,可能需要通過 My Oracle Support 發(fā)出一個系統(tǒng)請求 (SR)。
在命令提示符處輸入以下命令:
mkdir C:\OGG10G
cd C:\OGG10G
unzip c:\V18162-01.zip
mkdir C:\OGG11G
cd C:\OGG11G
unzip C:\V18164-01.zip
# start the 10g
databases if not already started
net start OracleServiceHRPRD2
net start OracleServiceHRPRD3
# start the 11g
database if not already started
net start OracleServiceHRPRD1
設(shè)置環(huán)境變量
現(xiàn)在,您可以打開兩個命令窗口(開始..運行..Cmd) ,針對 Oracle Database 10g 和 Oracle Database 11g 將相應(yīng)的環(huán)境變量(如 ORACLE_HOME、ORACLE_SID、LD_LIBRARY_PATH 等)設(shè)置為相應(yīng)的值。
為了在兩個 Oracle 10g 數(shù)據(jù)庫間建立復(fù)制,將這些變量進行如下設(shè)置:
set ORACLE_HOME=C:\Oracle\product\10.2.0\db_1
set ORACLE_SID=HRPRD2
set PATH=%ORACLE_HOME%\bin;%PATH%
set LD_LIBRARY_PATH=C:\OGG10G; %ORACLE_HOME%\LIB;
%ORACLE_HOME%\jdbc\lib
set CLASSPATH=;C:\Program
Files\Java\jre6\lib\ext\QTJava.zip;%ORACLE_HOME%\jdbc\lib
ORACLE_SID 可設(shè)置為 HRPRD2 或 HRPRD3,兩者都是 Oracle 10g 數(shù)據(jù)庫。請注意 PATH、LD_LIBRARY_PATH 和 CLASSPATH 的值。
另一種方法是用系統(tǒng)變量進行這些設(shè)置,為此您可以在 Windows XP Professional 中使用:我的電腦..屬性..高級..環(huán)境變量..系統(tǒng)變量。在這里添加新的系統(tǒng)變量并按如上所述更改路徑。
在此例中,在一臺服務(wù)器上運行兩個數(shù)據(jù)庫版本的缺點是,每次啟動 Oracle GoldenGate for Oracle 10g 或 Oracle GoldenGate for Oracle 11g 的 Manager 服務(wù)時,都必須更改系統(tǒng)變量。您可能要添加與 Oracle Database 11g 有關(guān)的系統(tǒng)變量,然后啟動 Oracle GoldenGate for Oracle 11g Manager 服務(wù)。這之后,您可能要更改這些系統(tǒng)變量,使其適合于 Oracle Database 10g ,然后啟動 Oracle GoldenGate for Oracle 10g Manager 服務(wù)。由于這是一個測試系統(tǒng),這么做可能沒有問題。但在生產(chǎn)環(huán)境下,您需要采取一種更自動化的方法(如采用腳本化的方法)在腳本中設(shè)置這些變量并啟動 Manager 服務(wù)。
GGSCI 命令解釋程序
在命令窗口或“我的電腦”級別設(shè)置環(huán)境變量之后,轉(zhuǎn)到 Oracle GoldenGate 的文件夾下,通過命令行(見圖 1)或 Windows 資源管理器運行 Oracle GoldenGate Command Interpreter for Oracle (GGSCI) 程序。
圖 1 Oracle GoldenGate Command Interpreter
現(xiàn)在,您可在 GGSCI 中執(zhí)行 CREATE SUBDIRS 命令來創(chuàng)建 Oracle GoldenGate 的工作子目錄。參見圖 2,其中列出了所創(chuàng)建的重要目錄。
圖 2 創(chuàng)建工作子目錄
將 Oracle GoldenGate Manager 作為本地程序運行
您可以將 Oracle GoldenGate Manager 當(dāng)作一個本地程序在命令窗口中運行,也可以將它作為一個 Windows 服務(wù)安裝以便在 Windows 啟動時自動啟動。我們建議使用后面這種方法。
如果您希望將其作為一個本地命令運行,只需調(diào)用目錄中的 Manager 執(zhí)行文件(調(diào)用時帶著一個參數(shù)文件)即可。命令語法為:
C:\OGG10G>mgr
Usage: MGR PARAMFILE <param file> [REPORTFILE <report file>]
[PID <process id>] [PORT <port number>]
[USESUBDIRS] [NOUSESUBDIRS]
[PAUSEATEND] [NOPAUSEATEND]
[CD <directory>]
PARAMFILE 是必需的參數(shù)。因此,您必須在 GGSCI 中創(chuàng)建一個參數(shù)文件:
GGSCI (HaviPori) 1> edit params mgr
此命令將在 C:\OGG10G\dirprm 目錄中創(chuàng)建一個新的 mgr.prm 文件。在該文件中鍵入將用于運行 manager 進程的端口號,然后保存該文件。
PORT 7809
默認端口號為 7809。無論您選擇哪個端口號,請確保該端口號未被任何其他程序所使用并且沒有任何防火墻限制。因為 PORT 是 Manager 唯一需要的參數(shù),所以必須指定該參數(shù)。GGSCI 使用該端口將請求發(fā)送給 Manager 以啟動進程,并且 Extract 進程也使用該端口進行各種操作。
創(chuàng)建該參數(shù)文件之后,就可以在 Windows 命令提示符下啟動 Manager 了,如下所示:
C:\OGG10G>mgr paramfile c:\OGG10G\dirprm\mgr.prm
該命令啟動 Manager,并且顯示圖 3 所示的消息:
圖 3 在 Windows 命令提示符處啟動 Manager
必須保持此窗口為打開狀態(tài),以保持 Manager 運行。如果您注銷,該窗口將關(guān)閉,Manager 將停止運行。
將 Manager 作為 Windows 服務(wù)進行安裝
上文描述了手動啟動 Manager 的方法,還有一種啟動方法,那就是將 Manager 作為自動啟動的 Windows 服務(wù)來安裝。
在 Windows 集群環(huán)境下必須使用后面這種方法,因為出現(xiàn)故障時只有服務(wù)可以自動切換到備用服務(wù)器上。在非集群系統(tǒng)中,將 Manager 作為服務(wù)來安裝是可選的方法但也是強烈建議的方法。
在 Windows 中作為服務(wù)創(chuàng)建 Manager 進程時,該服務(wù)的默認名稱為 GGSMGR。您可以為此服務(wù)指定自定義的名稱。如果您在同一臺服務(wù)器上需要不止一個 Oracle GoldenGate Manager 服務(wù),比如一個針對 Oracle GoldenGate for Oracle 10g 的服務(wù)和另一個針對 Oracle GoldenGate for Oracle 11g 的服務(wù),則指定名稱是很重要的。如果您打算運行 Oracle GoldenGate Veridata,還需要一個 Manager 服務(wù)。
用以下方法為 Manager 服務(wù)指定一個不同的名稱。在 GGSCI 命令提示符處執(zhí)行以下命令:
EDIT PARAMS ./GLOBALS
在出現(xiàn)的記事本編輯器中,選擇新建一個文件(如果是首次這么做),然后輸入以下代碼并保存該 GLOBALS 文件:
MGRSERVNAME OracleGGSMGR1
根據(jù) Windows 上的 Oracle 服務(wù)一般帶有 Oracle 前綴(如 OracleDBConsole<instancename>、OracleJobScheduler<instancename> 服務(wù))的慣例,使用名稱 OracleGGSMGR1。
通過 C:\OGG10G 目錄中的 Install 程序可輕松創(chuàng)建 Manager 服務(wù)。使用 install addservice 命令,如圖 4 所示:
圖 4 創(chuàng)建 Manager 服務(wù)
新服務(wù)在 Windows 服務(wù)列表中顯示為一個自動啟動的服務(wù)(見圖 5):
圖 5 Manager 服務(wù)屬性
Manager 服務(wù)以本地系統(tǒng)帳戶運行,也可配置為以特定帳戶(使用用戶名和口令選項)運行,該用戶名和口令可由 addservice 命令指定?,F(xiàn)在可通過以下命令啟動該服務(wù):
GGSCI (HaviPori) 1> start manager
Starting Manager as service ('OracleGGSMGR1')...
Service started.
安裝 Windows 事件消息
還可使用 Install 程序?qū)⑹录惭b到 Windows 注冊表中,這樣它們可通過 Windows Event Manager 顯示。使用以下命令可完成此操作:
C:\OGG10G>install addevents
Oracle GoldenGate messages installed successfully.
Install program terminated normally.
還可將 category.dll 和 ggsmsg.dll 文件從 C:\OGG10G 目錄復(fù)制到 C:\WINDOWS\system32 目錄,從而生成具體的而不是一般性的錯誤。
建立復(fù)制 — 在 HRPRD2 上建立 Extract 進程
Oracle GoldenGate Manager 進程已啟動并運行。下一步要建立數(shù)據(jù)庫之間的復(fù)制。
為此,您至少需要創(chuàng)建和配置一個 Extract 和 Replicat 組。在這些組中指定您想捕獲和復(fù)制的數(shù)據(jù)。
Extract 進程捕獲發(fā)生的數(shù)據(jù)更改并將這些更改發(fā)送給目標(biāo)服務(wù)器上的一個“線索”。在目標(biāo)服務(wù)器上啟動 Replicat 進程,該進程負責(zé)進行實際的復(fù)制,它從線索中獲取數(shù)據(jù)更改,然后將這些更改應(yīng)用到目標(biāo)數(shù)據(jù)庫中。
您還需要為 Oracle GoldenGate Replication 準(zhǔn)備數(shù)據(jù)庫:在數(shù)據(jù)庫級打開追加日志 功能。為此,在以 SYSDBA 身份登錄到數(shù)據(jù)庫后使用以下命令:
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
Database altered.
SQL> alter system switch logfile;
System altered
現(xiàn)在可以添加 Extract 組了。
GGSCI (HaviPori) 1> ADD EXTRACT emp_ext, TRANLOG, BEGIN NOW
EXTRACT added.
您在這里指定了 TRANLOG,這意味著事務(wù)(重做)日志成為數(shù)據(jù)源。BEGIN 后面可以是該日志中的一個時間戳以便從該時刻開始進行處理,也可以是 NOW 以便立即開始處理。TRANLOG 還可以帶有 EXTSEQNO 選項(某個 Oracle 重做日志的序列號,從該日志開始)和 EXTRBA 選項(該日志中的相對字節(jié)地址)。
注意,Extract 組的名稱只能有八位字符。如果進行以下指定,則可獲得完全幫助。
GGSCI (HaviPori) 1> help add extract
接下來,我們要添加一個 RMTTRAIL 或 EXTTRAIL。前者用于遠程計算機,如果您在同一臺本地計算機上建立復(fù)制,則建議使用后者。我們將使用 EXTTRAIL,通過以下命令來創(chuàng)建它:
GGSCI (HaviPori) 1> ADD EXTTRAIL C:\OGG10G\dirdat\et, EXTRACT emp_ext
EXTTRAIL added.
EXTTRAIL 被指定為服務(wù)器上的一個物理子目錄 — 最好在 dirdat 子目錄下,dirdat 是為 Oracle GoldenGate 復(fù)制而創(chuàng)建的工作目錄之一。
指定的文件名只能是兩位字符,因為在創(chuàng)建實際文件時,會在這兩個指定的字符后追加一個數(shù)字后綴以產(chǎn)生實際文件名。例如,當(dāng) EXTRACT 進程啟動并且發(fā)生數(shù)據(jù)更改時,會創(chuàng)建一個 C:\OGG10G\dirdat\et000001 文件作為提取文件。
RMTTRAIL 的命令語法與之相同,如果您要使用 RMTTRAIL,只需用 RMTTRAIL 代替 EXTTRAIL。主要差別體現(xiàn)在 extract 的參數(shù)文件中 — 下一步將創(chuàng)建此參數(shù)文件。使用 RMTTRAIL 時,該參數(shù)文件將有更多參數(shù)用于描述遠程主機和遠程管理器端口號。
現(xiàn)在,我們來為 Extract 組 emp_ext 創(chuàng)建參數(shù)文件,如下所示:
GGSCI (HaviPori) 1> EDIT PARAM emp_ext
在此文件中,鍵入以下代碼行:
EXTRACT emp_ext
USERID system@localhost:1521/HRPRD2, PASSWORD hrpassword1
EXTTRAIL C:\OGG10G\dirdat\et
TABLE hr.employees;
您指定了在這個 Extract 組中,對第一個 Oracle 10g 數(shù)據(jù)庫(即 HRPRD2)中的表 HR.EMPLOYEES 進行提取。
如果您使用了 RMTTRAIL,則只需按下列行進行更改:
RMTHOST <remote host>, MGRPORT <remote manager port number>
RMTTRAIL C:\<remote GoldennGate Directory>\dirdat\rt
現(xiàn)在,可使用以下命令啟動 extract:
GGSCI (HaviPori) 1> START EXTRACT EMP_EXT
Sending START request to MANAGER ('OracleGGSMGR1') ...
EXTRACT EMP_EXT starting
該進程的狀態(tài)和有關(guān)信息如下所示:
GGSCI (HaviPori) 2> STATUS EXTRACT EMP_EXT
EXTRACT EMP_EXT: RUNNING
GGSCI (HaviPori) 3> INFO EXTRACT EMP_EXT
EXTRACT EMP_EXT Last Started 2009-12-08 13:04 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:00 ago)
Log Read Checkpoint Oracle Redo Logs
2009-12-08 13:05:58 Seqno 11, RBA 578560
還可查看有關(guān)該進程的詳細信息:
GGSCI (HaviPori) 4> INFO EXTRACT EMP_EXT detail
EXTRACT EMP_EXT Last Started 2009-12-08 13:04 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:00 ago)
Log Read Checkpoint Oracle Redo Logs
2009-12-08 13:07:19 Seqno 11, RBA 596992
Target Extract Trails:
Remote Trail Name Seqno RBA Max MB
C:\OGG10G\dirprm\et 0 923 10
Extract Source Begin End
D:\ORADATA\HRPRD2\REDO01.LOG 2009-12-08 12:59 2009-12-08 13:07
Not Available * Initialized * 2009-12-08 12:59
Current directory C:\OGG10G
Report file C:\OGG10G\dirrpt\EMP_EXT.rpt
Parameter file C:\OGG10G\dirprm\EMP_EXT.prm
Checkpoint file C:\OGG10G\dirchk\EMP_EXT.cpe
Process file C:\OGG10G\dirpcs\EMP_EXT.pce
Error log C:\OGG10G \ggserr.log
診斷 Extract
只要有錯誤,extract 進程就會顯示為 STOPPED 狀態(tài)。這種情況下需要進行錯誤分析。
首先,查看報告文件 C:\OGG10G\dirrpt\EMP_EXT.rpt,上面的詳細信息中提到了該報告。
然后,查看日志文件 ggserr.log 和 sqlnet.log 中是否有任何說明性的消息,這兩個文件位于 C:\OGG10G 主目錄中。
ggserr.log 文件包含事件信息,例如:
2009-12-02 14:53:26 GGS INFO 301 Oracle GoldenGate
Manager for Oracle, mgr.prm: Command received from GGSCI on host 10.10.10.10 (START EXTRACT EMP_EXT ).
2009-12-02 14:53:26 GGS INFO 302 Oracle GoldenGate Manager for Oracle, mgr.prm:
EXTRACT EMP_EXT starting.
也可通過以下方法查看這些事件:
GGSCI (HaviPori) 1> VIEW GGSEVT
…
….
2009-12-02 15:09:34 GGS INFO 302 Oracle GoldenGate Manager for Oracle,
mgr.prm: EXTRACT EMP_EXT starting.
2009-12-02 15:13:26 GGS INFO 399 Oracle GoldenGate Command Interpreter
for Oracle: GGSCI command (HaviPoriH): EDIT PARAM emp_ext.
sqlnet.log 可顯示錯誤,例如:
TNS-12557: TNS:protocol adapter not loadable
這個特定錯誤指明存在數(shù)據(jù)庫連接問題,您需要在監(jiān)聽器級進行分析。確保 Path 環(huán)境變量在最開始處包含了 Oracle Home bin 子目錄??赡苡衅渌?TNS 錯誤,它們可能會指明其他解決方法。
EMP_EXT.rpt 可顯示如下所示的錯誤:
2009-12-08 13:01:27 GGS ERROR 182 OCI Error beginning
session (status = 28009-ORA-28009: connection as SYS should be as SYSDBA or SYSOPER).
2009-12-08 13:01:27 GGS ERROR 190 PROCESS ABENDING.
這指明 Extract 進程正在嘗試以 sys 而不是 SYSDBA 身份登錄。只需在 Extract 的參數(shù)文件中將登錄參數(shù)改為“system”即可。
在這里我們應(yīng)注意,在 Extract 參數(shù)文件中 login 行的末尾指定 SYSDBA 是不起作用的,盡管這么做對于 GGSCI 中的 DBLOGIN 命令(在下文中可看到此命令)確實會起作用。
ggserr.log 文件可顯示類似錯誤:
2009-12-03 00:43:16 GGS INFO 399 Oracle GoldenGate
Command Interpreter for Oracle: GGSCI command (HaviPoriH): start manager.
2009-12-03 00:43:25 GGS ERROR 182 Oracle GoldenGate
Manager for Oracle, mgr.prm: OCI Error during OCIServerAttach
(status = 12154-ORA-12154: TNS:could not resolve the connect identifier specified).
2009-12-03 00:43:25 GGS ERROR 190 Oracle GoldenGate
Manager for Oracle, mgr.prm: PROCESS ABENDING.
這指明 Manager 的參數(shù)文件 mgr.prm 中所提供的登錄憑證可能存在問題。其結(jié)果是 Manager 沒有啟動。
您還可能在 Extract 的報告文件中看到另一個錯誤。例如,EMP_EXT.rpt 可能會有此類錯誤:
2009-12-07 16:40:08 GGS ERROR 190 No minimum supplemental
logging is enabled. This may cause extract process to handle key
update incorrectly if key column is not in first row piece.
2009-12-07 16:40:08 GGS ERROR 190 PROCESS ABENDING.
問題的解決方法顯然是在數(shù)據(jù)庫級啟用追加日志功能。由于該功能已啟用,在本例中將不會看到此錯誤。
在 HRPRD3 上建立 Replicat 進程
現(xiàn)在轉(zhuǎn)到目標(biāo)數(shù)據(jù)庫 HRPRD3,在本例中該數(shù)據(jù)庫位于同一服務(wù)器上。由于這也是一個 Oracle 10g 數(shù)據(jù)庫,您可以使用同一 Oracle GoldenGate for Oracle 10g 安裝軟件(在 C:\OGG10G 子目錄中)和同一 Manager 服務(wù)。如果這個數(shù)據(jù)庫位于另一臺服務(wù)器上,您需要在該服務(wù)器上安裝適用于該數(shù)據(jù)庫版本的相應(yīng) Oracle GoldenGate 軟件然后配置一個新的 Manager 服務(wù)。
首先,使用 GGSCI 的 DBLOGIN 命令連接到該數(shù)據(jù)庫,這樣以后發(fā)出的其他命令將在此數(shù)據(jù)庫上運行。
注意,DBLOGIN 正常運行,如下所示:
GGSCI (HaviPori) 1>
DBLOGIN USERID system@localhost:1521/HRPRD3 PASSWORD hrpassword1
Successfully logged into database.
在 GGSCI help 中可以看到還有兩個參數(shù):SOURCEDB 和 TARGETDB。這兩個參數(shù)只用于非 Oracle 數(shù)據(jù)庫。
現(xiàn)在,需要為要復(fù)制的 employees 表添加一個檢查點表:
GGSCI (HaviPori) 2> ADD CHECKPOINTTABLE HR.EMPLOYEES_CHKPT
Successfully created checkpoint table HR.EMPLOYEES_CHKPT.
此表中保存的檢查點指示 Replicat 進程的當(dāng)前讀寫位置。這用于在進程需要重啟時或者在服務(wù)器出現(xiàn)任何故障或網(wǎng)絡(luò)停頓時防止數(shù)據(jù)丟失。如果沒有這一機制,將導(dǎo)致數(shù)據(jù)丟失。另一個好處是,通過使用檢查點,多個 Extract 或 Replicat 進程可通過相同的一組線索進行讀取。
對于以批處理模式運行的 Extract 和 Replicat 進程,檢查點不是必需的,因為這樣的進程總是可以重啟。然而,在 Extract 和 Replicat 進程連續(xù)工作的情況下,檢查點是必需的。檢查點通常保存在 dirchk 子目錄的文件中,但是對于 Replicat,可以選擇在數(shù)據(jù)庫的檢查點表中保存檢查點。
如果您在 GLOBALS 參數(shù)文件中指定檢查點表,則上面的命令可使用該文件中的規(guī)定。這種情況下,只需這樣來使用該命令:
GGSCI (HaviPori) 3> ADD CHECKPOINTTABLE
No checkpoint table specified, using GLOBALS specification (hr.employees_chkpt).
Successfully created checkpoint table HR.EMPLOYEES_CHKPT.
現(xiàn)在可以添加 Replicat 組了, 具體如下所示,其中指定的 EXTTRAIL 正是在第一個數(shù)據(jù)庫中建立 Extract 組時所使用的 EXTTRAIL。這樣,該 Replicat 組將以 Extract 組創(chuàng)建的線索為數(shù)據(jù)源,即使用相同的線索:
GGSCI (HaviPori) 4> ADD REPLICAT emp_rep, EXTTRAIL C:\OGG10G\dirdat\et, CHECKPOINTTABLE hr.employees_chkpt,
REPLICAT added.
編輯此 Replicat 組的參數(shù)文件,具體如下:
GGSCI (HaviPori) 5> EDIT PARAM emp_rep
在新文件中輸入以下內(nèi)容:
REPLICAT emp_rep
USERID system@localhost:1521/HRPRD3, PASSWORD hrpassword1
ASSUMETARGETDEFS
MAP hr.employees, TARGET hr.employees;
由于各表具有完全相同的 DDL 結(jié)構(gòu),您使用 ASSUMETARGETDEFS 參數(shù)。
現(xiàn)在可以啟動 Replicat 組:
GGSCI (HaviPori) 6> start REPLICAT emp_rep
Sending START request to MANAGER ('GGSMGR') ...
REPLICAT EMP_REP starting
稍候片刻再查看其狀態(tài),如果立即查看,其狀態(tài)可能顯示為“stopped”??吹綘顟B(tài)為 “running”后,查看詳細信息,執(zhí)行 info all 命令顯示所有正在運行的進程:
GGSCI (HaviPori) 7> status REPLICAT emp_rep
REPLICAT EMP_REP: STOPPED
GGSCI (HaviPori) 8> status REPLICAT emp_rep
REPLICAT EMP_REP: RUNNING
GGSCI (HaviPori) 11> info REPLICAT emp_rep detail
REPLICAT EMP_REP Last Started 2009-12-08 13:35 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:01 ago)
Log Read Checkpoint File C:\OGG10G\dirdat\et000001
2009-12-08 13:33:24.000000 RBA 985
Extract Source Begin End
C:\OGG10G\dirdat\et000001 2009-12-08 13:33 2009-12-08 13:33
C:\OGG10G\dirdat\et000000 * Initialized * 2009-12-08 13:33
Current directory C:\OGG10G
Report file C:\OGG10G\dirrpt\EMP_REP.rpt
Parameter file C:\OGG10G\dirprm\EMP_REP.prm
Checkpoint file C:\OGG10G\dirchk\EMP_REP.cpr
Checkpoint table HR.EMPLOYEES_CHKPT
Process file C:\OGG10G\dirpcs\EMP_REP.pcr
Error log C:\OGG10G\ggserr.log
GGSCI (HaviPori) 12> info all
Program Status Group Lag Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EMP_EXT 00:00:00 00:00:03
REPLICAT RUNNING EMP_REP 00:00:00 00:00:06
此時可對兩個 Oracle Database 10g 數(shù)據(jù)庫 HRPRD2 和 HRPRD3 之間的復(fù)制進行測試。但我們決定等到建立好到 Oracle 11g 數(shù)據(jù)庫 HRPRD1 的復(fù)制之后再進行測試。下面我們將建立該復(fù)制。
在 HRPRD1 上建立 Replicat 進程
您的 Oracle 11g 數(shù)據(jù)庫 HRPRD1 也在同一服務(wù)器上。由于它是一個 11g 數(shù)據(jù)庫版本,您需要使用本文開始時解壓縮到 C:\OGG11G 目錄中的 Oracle GoldenGate for Oracle 11g 軟件。
對于 Oracle 11g 數(shù)據(jù)庫 home,按如下所示設(shè)置環(huán)境變量:
set ORACLE_HOME=C:\app\havipori\product\11.1.0\db_1
set ORACLE_SID=HRPRD1
set PATH=%ORACLE_HOME%\bin;%PATH%
set LD_LIBRARY_PATH=C:\OGG11G; %ORACLE_HOME%\LIB; %ORACLE_HOME%\jdbc\lib
set CLASSPATH=;C:\Program Files\Java\jre6\lib\ext\QTJava.zip;%ORACLE_HOME%\jdbc\lib
按照與 Oracle GoldenGate for Oracle 10g 安裝軟件類似的步驟進行操作,創(chuàng)建一個名為 OracleGGSMGR2 的 Manager 服務(wù)并啟動它。創(chuàng)建工作子目錄和 mgr.prm 文件。這些步驟如下所示:
C:\OGG11G>ggsci
GGSCI (HaviPori) 1> EDIT PARAMS ./GLOBALS
在該文件中鍵入 MGRSERVNAME OracleGGSMGR2,然后保存。
C:\OGG11G>install addservice
Service 'OracleGGSMGR2' created.
Install program terminated normally.
GGSCI (HaviPori) 1>create subdirs
Creating subdirectories under current directory C:\OGG11G
Parameter files C:\OGG11G\dirprm: created
Report files C:\OGG11G\dirrpt: created
Checkpoint files C:\OGG11G\dirchk: created
Process status files C:\OGG11G\dirpcs: created
SQL script files C:\OGG11G\dirsql: created
Database definitions files C:\OGG11G\dirdef: created
Extract data files C:\OGG11G\dirdat: created
Temporary files C:\OGG11G\dirtmp: created
Veridata files C:\OGG11G\dirver: created
Veridata Lock files C:\OGG11G\dirver\lock: created
Veridata Out-Of-Sync files C:\OGG11G\dirver\oos: created
Veridata Out-Of-Sync XML files C:\OGG11G\dirver\oosxml: created
Veridata Parameter files C:\OGG11G\dirver\params: created
Veridata Report files C:\OGG11G\dirver\report: created
Veridata Status files C:\OGG11G\dirver\status: created
Veridata Trace files C:\OGG11G\dirver\trace: created
Stdout files C:\OGG11G\dirout: created
GGSCI (HaviPori) 2> EDIT PARAMS mgr
在該文件中鍵入以下代碼行,然后保存該文件。注意,這里使用了不同的端口號并且 Manager 現(xiàn)在登錄到 HRPRD1 上。
PORT 7810
USERID system@localhost:1521/HRPRD1 PASSWORD hrpassword1
現(xiàn)在可以啟動 Manager 了。下一步是使用 DBLOGIN 登錄到 Oracle 11g 數(shù)據(jù)庫,然后在此數(shù)據(jù)庫中創(chuàng)建檢查點表。
GGSCI (HaviPori) 3> start manager
Starting Manager as service ('OracleGGSMGR2')...
Service started.
GGSCI (HaviPori) 4> DBLOGIN USERID system@localhost:1521/HRPRD1 PASSWORD hrpassword1
Successfully logged into database.
GGSCI (HaviPori) 5> ADD CHECKPOINTTABLE HR.EMPLOYEES_CHKPT
Successfully created checkpoint table HR.EMPLOYEES_CHKPT.
現(xiàn)在,可以在數(shù)據(jù)庫 HRPRD1 中創(chuàng)建第二個 Replicat 組了。注意,我們將使用和前面數(shù)據(jù)庫 HRPRD3 所使用的完全相同的線索。
這樣,HRPRD2 的數(shù)據(jù)所寫入到的同一個線索同時為兩個數(shù)據(jù)庫(HRPRD3 和 HRPRD1)、兩個 Replicat 組所使用。這相當(dāng)棒。
如果在 ADD REPLICAT 命令中不使用 BEGIN NOW,則 Replicat 進程會在跟蹤開始時就啟動,這也不錯。
GGSCI (HaviPori) 6> ADD REPLICAT emp_rep, EXTTRAIL C:\OGG10G\dirdat\et, CHECKPOINTTABLE hr.employees_chkpt,
REPLICAT added.
GGSCI (HaviPori) 7> EDIT PARAM emp_rep
在此文件中輸入以下幾行內(nèi)容:
REPLICAT emp_rep
USERID system@localhost:1521/HRPRD1, PASSWORD hrpassword1
ASSUMETARGETDEFS
HANDLECOLLISIONS
DISCARDFILE c:\OGG11G\dirrpt\emp_ext.dsc, purge
MAP hr.employees, TARGET hr.employees;
注意該文件中額外的參數(shù),如 HANDLECOLLISIONS 和 DISCARDFILE。這是為了對表中記錄重復(fù)之類的錯誤進行處理。我們已將這些參數(shù)作為選項放入此文件中,也可以將它們放入第一個 Replicat 組的參數(shù)文件中。
HANDLECOLLISIONS 在源數(shù)據(jù)庫活動時對初始數(shù)據(jù)加載進行自動錯誤處理。確保在初始加載完成后刪除此參數(shù)。DISCARDFILE 參數(shù)指示被刪除的記錄將保存在哪個文件中。
現(xiàn)在啟動該 Replicat 組并查看其狀態(tài):
GGSCI (HaviPori) 8> start REPLICAT emp_rep
Sending START request to MANAGER ('GGSMGR2') ...
REPLICAT EMP_REP starting
GGSCI (HaviPori) 9> status REPLICAT emp_rep
REPLICAT EMP_REP: STOPPED
其狀態(tài)顯示為 stopped,但 C:\OGG11G 目錄下的任何日志文件中都沒有錯誤指示。
迫使錯誤顯示出來的唯一方法是從命令提示符處運行 Replicat。這可用于調(diào)試目的 — 錯誤(如果有的話)會顯示在屏幕上而不是寫入報告文件中。但在 Oracle GoldenGate for Oracle 11g 版本中,看上去需要通過這種方法來使 Replicat 運行起來,雖然我們認為這可能是測試服務(wù)器上的環(huán)境問題造成的。使用的命令為:
C:\OGG11G> replicat paramfile c:\OGG11G\dirprm\emp_rep.prm
***********************************************************************
Oracle GoldenGate Delivery for Oracle
Version 10.4.0.19 Build 002
Windows (optimized), Oracle 11 on Sep 18 2009 16:44:02
Copyright (C) 1995, 2009, Oracle and/or its affiliates. All rights reserved.
Starting at 2009-12-09 11:46:28
***********************************************************************
Operating System Version:
Microsoft Windows XP Professional, on x86
Version 5.1 (Build 2600: Service Pack 2)
Process id: 1504
Description:
***********************************************************************
** Running with the following parameters **
***********************************************************************
REPLICAT emp_rep
USERID system@localhost:1521/HRPRD1, PASSWORD ***********
ASSUMETARGETDEFS
HANdlecollisions
Discardfile c:\OGG11G\dirrpt\emp_ext.dsc, purge
MAP hr.employees, TARGET hr.employees;
CACHEMGR virtual memory values (may have been adjusted)
CACHEBUFFERSIZE: 64K
CACHESIZE: 512M
CACHEBUFFERSIZE (soft max): 4M
CACHEPAGEOUTSIZE (normal): 4M
PROCESS VM AVAIL FROM OS (min): 1G
CACHESIZEMAX (strict force to disk): 881M
Database Version:
Oracle Database 11g
Enterprise Edition Release 11.1.0.6.0 - Production
PL/SQL Release 11.1.0.6.0 - Production
CORE 11.1.0.6.0 Production
TNS for 32-bit Windows: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production
Database Language and Character Set:
NLS_LANG environment variable not set, using default value AMERICAN_AMERICA.WE8M
SWIN1252.
NLS_LANGUAGE = "AMERICAN"
NLS_TERRITORY = "AMERICA"
NLS_CHARACTERSET = "WE8MSWIN1252"
Warning: NLS_LANG is not set. Please refer to user manual for more information.
***********************************************************************
** Run Time Messages **
***********************************************************************
Opened trail file C:\OGG10G\dirdat\et000001 at 2009-12-09 11:46:35
MAP resolved (entry HR.EMPLOYEES):
MAP HR.EMPLOYEES, TARGET hr.employees;
Using following columns in default map by name:
EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE,
JOB_ID, SALARY, COMMISSION_PCT, MANAGER_ID, DEPARTMENT_ID
Using the following key columns for target table HR.EMPLOYEES: EMPLOYEE_ID.
此時,Replicat 進程已準(zhǔn)備就緒,我們可在屏幕上查看其狀態(tài)。如果您打開一個新的命令窗口、啟動 GGSCI 并查看其狀態(tài),Replicat 進程會顯示為 RUNNING。這樣,通過這種方式,Oracle Database 11g 中的復(fù)制開始工作。
文件中額外的參數(shù)(如 HANDLECOLLISIONS 和 DISCARDFILE)是特意添加的,這是因為通過命令行運行 Replicat 進程時屏幕上曾顯示出記錄重復(fù)錯誤。從下面的輸出結(jié)果中可以看到這些錯誤,這些錯誤指示初始加載時出現(xiàn)的問題與重復(fù)的記錄有關(guān)。
通過進一步的分析發(fā)現(xiàn),某個用戶在 Oracle 11g 目標(biāo)數(shù)據(jù)庫中手動插入了記錄,而手動插入的數(shù)據(jù)與啟動 Oracle GoldenGate 復(fù)制進程之后 插入到 Oracle 10g 源數(shù)據(jù)庫中的數(shù)據(jù)相同。這就引發(fā)了記錄重復(fù),從而導(dǎo)致重復(fù)問題。
…
***********************************************************************
** Run Time Messages **
***********************************************************************
Opened trail file C:\OGG10G\dirdat\et000000 at 2009-12-09 11:17:51
Switching to next trail file C:\OGG10G\dirdat\et000001 at 2009-12-09 11:17:51 du
e to EOF, with current RBA 923
Opened trail file C:\OGG10G\dirdat\et000001 at 2009-12-09 11:17:51
Processed extract process graceful restart record at seq 1, rba 923.
MAP resolved (entry HR.EMPLOYEES):
MAP HR.EMPLOYEES, TARGET hr.employees;
Using following columns in default map by name:
EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE,
JOB_ID, SALARY, COMMISSION_PCT, MANAGER_ID, DEPARTMENT_ID
Using the following key columns for target table HR.EMPLOYEES: EMPLOYEE_ID.
2009-12-09 11:17:54 GGS WARNING 218 Aborted grouped transaction on 'HR.EMP
LOYEES', Database error 1 (ORA-00001: unique constraint (HR.EMP_EMAIL_UK) violat
ed).
2009-12-09 11:17:54 GGS WARNING 218 Repositioning to rba 985 in seqno 1.
2009-12-09 11:17:54 GGS WARNING 218 SQL error 1 mapping HR.EMPLOYEES to HR
.EMPLOYEES OCI Error ORA-00001: unique constraint (HR.EMP_EMAIL_UK) violated (st
atus = 1), SQL <INSERT INTO "HR"."EMPLOYEES" ("EMPLOYEE_ID","FIRST_NAME","LAST_N
AME","EMAIL","PHONE_NUMBER","HIRE_DATE","JOB_ID","SALARY","COMMISSION_PCT","MANA
GER_ID","DEPARTMENT_ID") VALUES (:a0,:a1,:a2,:a3,:a4,:a5>.
2009-12-09 11:17:54 GGS WARNING 218 Repositioning to rba 985 in seqno 1.
….
解決此問題的辦法是使用 HANDLECOLLISIONS 和 DISCARDFILE 參數(shù),然后重啟該 Replicat 進程。DISCARDFILE 在出現(xiàn)被刪除的記錄時可提供更多信息。在命令提示符處啟動運行 Replicat 進程后,等待直到其通過線索完成運行并根據(jù)需要刪除記錄。
然后在命令窗口按 Ctrl-C 停止該 Replicat 進程。這將顯示:
Enter X to exit or C to continue: X
***********************************************************************
* ** Run Time Statistics ** *
***********************************************************************
Last record for the last committed transaction is the following:
___________________________________________________________________
Trail name : C:\OGG10G\dirdat\et000001
Hdr-Ind : E (x45) Partition : . (x04)
UndoFlag : . (x00) BeforeAfter: A (x41)
RecLength : 196 (x00c4) IO Time : 2009-12-08 13:43:36.000000
IOType : 5 (x05) OrigNode : 255 (xff)
TransInd : . (x03) FormatType : R (x52)
SyskeyLen : 0 (x00) Incomplete : . (x00)
AuditRBA : 11 AuditPos : 1188880
Continued : N (x00) RecCount : 1 (x01)
2009-12-08 13:43:36.000000 Insert Len 196 RBA 1295
Name: HR.EMPLOYEES
___________________________________________________________________
Reading C:\OGG10G\dirdat\et000001, current RBA 1604, 2 records
Report at 2009-12-09 11:47:56 (activity since 2009-12-09 11:46:35)
From Table HR.EMPLOYEES to HR.EMPLOYEES:
# inserts: 2
# updates: 0
# deletes: 0
# discards: 0
# insert collisions: 2
Last log location read:
FILE: C:\OGG10G\dirdat\et000001
SEQNO: 1
RBA: 1604
TIMESTAMP: Not Available
EOF: YES
READERR: 400
現(xiàn)在可以取消 HANDLECOLLISIONS 參數(shù)了,可在該參數(shù)行之前添加“—”將其注釋掉。然后在命令行重啟該 Replicat 進程。由于記錄重復(fù)問題已得到解決,該進程現(xiàn)在可以正常工作,以后對源數(shù)據(jù)庫進行任何更改時,該進程都可將這些更改復(fù)制過來。
對復(fù)制進行測試
從圖 6 的命令行窗口中可以看到 HRPRD1、HRPRD2 和 HRPRD3 這三個數(shù)據(jù)庫的 HR.EMPLOYEES 表中的記錄。這三個數(shù)據(jù)庫都正好有 107 條記錄。在第三個窗口中可看到使用的 SELECT 命令。
圖 6 三個數(shù)據(jù)庫中的員工記錄
現(xiàn)在可以在源數(shù)據(jù)庫 HRPRD2 的 HR.EMPLOYEES 表中 INSERT 和 COMMIT 一些行,然后查看這些行是否被復(fù)制到目標(biāo)數(shù)據(jù)庫 HRPRD3 和 HRPRD1 中。從圖 7 中可以看到這些 INSERT 操作。
圖 7 插入到 HRPRD2 的員工表中
對所有三個數(shù)據(jù)庫再次運行 SELECT,其結(jié)果顯示,即刻發(fā)生了到目標(biāo)數(shù)據(jù)庫的復(fù)制,所有數(shù)據(jù)庫現(xiàn)在都有 109 條記錄(如圖 8 所示)。這樣,使用 Oracle GoldenGate 到 Oracle 10g 和 Oracle 11g 的復(fù)制成功。
圖 8 即刻復(fù)制到其他數(shù)據(jù)庫
您已看到,從 Oracle Database 10g 到 10g 數(shù)據(jù)庫的復(fù)制可正常進行。從 Oracle Database 10g 到 11g 數(shù)據(jù)庫的復(fù)制也可正常進行,但是只有在命令提示符處啟動 Replicat 進程(例如使用“replicat paramfile c:\OGG11G\dirprm\emp_rep.prm”)才會如此。而從 GGSCI 啟動 Replicat 進程仍會使其滯留于 stopped 狀態(tài)。這可能是由于我們的測試服務(wù)器存在環(huán)境錯誤。我們應(yīng)記住,如果從命令提示符處啟動就不會有錯誤,進程會正常運行。
功能、資源需求和影響
您已看到,Oracle GoldenGate 的 Extract 和 Replicat 進程已生效。每個實例(即一個 Manager 進程)可通過 GGSCI 命令接口支持多達 300 個并發(fā)的 Extract 和 Replicat 進程,這個數(shù)量相當(dāng)大。
然而,隨著此類進程數(shù)量的增加,對內(nèi)存的占用也會增加 — 每個 Extract 和 Replicat 進程需要大約 25 至 55 MB 內(nèi)存。對內(nèi)存的占用實際上可能更高,這取決于并發(fā)事務(wù)的數(shù)量和事務(wù)大小。這始終是個問題。
Oracle GoldenGate Replication 還對源系統(tǒng)有 3% 到 5% 的 CPU 影響,這取決于生成的重做日志的數(shù)量。
我們在這里建立的是單向復(fù)制。還可以建立雙向多主復(fù)制(對多站點更新的復(fù)制)。在這樣的安裝環(huán)境中,Oracle GoldenGate 通過研究和了解兩個站點何時更新相同的記錄來解決沖突。您可以設(shè)置一些沖突解決規(guī)則(如時間戳,或者哪一方始終優(yōu)先等等),您也可以就如何解決沖突設(shè)置用戶退出機制。
即使目標(biāo)數(shù)據(jù)庫的表中沒有唯一鍵時,Oracle GoldenGate 也能復(fù)制數(shù)據(jù)。這對所有支持的數(shù)據(jù)庫都是可行的,條件是您能夠指定那些是唯一的列或者使用整行作為一個鍵 — 因為任何刪除或更新操作都需要某種唯一性。
目前,Oracle GoldenGate 不能復(fù)制雙字節(jié)數(shù)據(jù),但計劃在未來的版本中支持這種復(fù)制。現(xiàn)在,對雙字節(jié)數(shù)據(jù)的處理可傳遞給一個備用數(shù)據(jù)庫以用于災(zāi)難恢復(fù)。
Oracle GoldenGate Director
Oracle GoldenGate 中的這一產(chǎn)品現(xiàn)在名為 Oracle Management Pack for GoldenGate。這是一個多層的客戶端-服務(wù)器應(yīng)用程序,通過一個 GUI 界面監(jiān)視和管理 Oracle GoldenGate 的部署。如果多臺主機上安裝了 Oracle GoldenGate Director 的遠程客戶端,您可以對這些主機上運行的多個 Oracle GoldenGate 實例(Manager 進程)進行管理。
這些客戶端全部連接到集中安裝的 Oracle GoldenGate Director 服務(wù)器,該服務(wù)器使用 Oracle WebLogic Server 11g (10.3.1) 作為功能應(yīng)用服務(wù)器。以前,較早的 JBoss Application Server 3.2.7 附帶 Oracle GoldenGate Director?,F(xiàn)在它為 Oracle WebLogic Server 所取代,但要注意后者必須在安裝 Oracle GoldenGate Director 服務(wù)器之前在系統(tǒng)上預(yù)先安裝并運行。
Oracle GoldenGate Director 服務(wù)器有一個 Web 界面并且需要在現(xiàn)有 Oracle 數(shù)據(jù)庫中擁有自己的數(shù)據(jù)庫信息庫(至少 200 MB),您也可以對該信息庫使用 MySql 或 Microsoft SQL Server 。作為一項安全措施,Oracle GoldenGate Director 的安裝要求該信息庫所使用的數(shù)據(jù)庫口令必須至少為八位字符,其中至少包含一個數(shù)字和一個字母數(shù)字字符。
如果在 GGSCI 中定義一個進程,您可以通過 Oracle GoldenGate Director 配置、監(jiān)視和控制該進程。從操作系統(tǒng)命令行執(zhí)行的其他獨立進程(如 DDLGEN 進程)不能通過 Oracle GoldenGate Director 監(jiān)視。
在 Windows、UNIX 和 NonStop 平臺上,Extract 進程、Replicat 進程、Manager 進程、線索(本地或遠程)、文件(本地或遠程)以及 Extract 和 Replicat 任務(wù)均可通過 Oracle GoldenGate Director 來配置、監(jiān)視和控制。
總結(jié)及其他信息
在 Oracle GoldenGate Manager 參數(shù)文件中可以指定其他參數(shù),可通過這些參數(shù)來允許動態(tài)端口分配、在 Manager 啟動時自動啟動復(fù)制進程(如 Extract 和 Replicat)、建立對所有線索的集中維護(清除)。
The Oracle GoldenGate Administration Guide Version 10.4 詳細介紹了這些高級 Manager 參數(shù)。該指南還介紹了如何以不同的方法配置 Extract 和 Replicat 進程、如何將 Oracle GoldenGate Replication 用于實時報表、實時數(shù)據(jù)分布、實時數(shù)據(jù)倉儲、維護實時備用數(shù)據(jù)庫和主-主高可用性等各種目的,以及如何配置 DDL 同步。在某個數(shù)據(jù)庫要升級,但要求停機時間幾乎為零的情況下,Oracle GoldenGate 也非常有用 — 您只需建立從舊的數(shù)據(jù)庫版本到新的數(shù)據(jù)庫版本之間的 Oracle GoldenGate 復(fù)制,然后在切換時將您的所有客戶端切換為指向新數(shù)據(jù)庫即可。這會是一個極好的選擇,例如,如果您準(zhǔn)備將現(xiàn)有數(shù)據(jù)庫移到 Oracle Exadata V2 數(shù)據(jù)庫機上,以便將您的所有數(shù)據(jù)庫整合到世界上最快的數(shù)據(jù)庫機。
有關(guān) Oracle GoldenGate 的另一個有用的參考資料是 Oracle GoldenGate Troubleshooting and Tuning Guide Version 10.4 。在本文開始時下載的文檔 zip 文件中包含了這個參考資料和管理指南 。
我們想感謝 Oracle 融合中間件和 Oracle GoldenGate 的各位 Oracle 產(chǎn)品經(jīng)理,本文所述建立 Oracle GoldenGate 復(fù)制的過程得到了他們的欣然幫助(真正的 Oracle 精神)。我們期待著計劃之中的 Oracle GoldenGate Director 與 Oracle Enterprise Manager Grid Control 的集成。
Oracle Enterprise Manager Grid Control 是 Oracle 的一個強大的企業(yè)管理產(chǎn)品。如果您想了解如何對您環(huán)境中所有的 Oracle RAC 或非 Oracle RAC 數(shù)據(jù)庫、Oracle 自動存儲管理 (ASM) 實例和 Oracle Clusterware 自動打補丁,請閱讀作者的一篇題為“使用 Oracle Enterprise Manager Grid Control 修補數(shù)千個數(shù)據(jù)庫” 的文章。有關(guān)如何使用 Oracle Enterprise Manager Grid Control 為您公司的數(shù)據(jù)庫輕松建立 Oracle Recovery Manager (Oracle RMAN) 備份的信息,請閱讀“Oracle RMAN 備份:提供簡單方式 ”。
另外,要了解使用 Oracle Enterprise Manager Grid Control 進行 Oracle Data Guard 的安裝、管理(包括倒換和故障切換)和監(jiān)視如何能夠節(jié)省大量的時間和資源,請閱讀作者最近發(fā)表的另一篇文章“使用 Grid Control 輕松預(yù)防生產(chǎn)災(zāi)難 ”。