『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南


安裝 Oracle

安裝 Oracle11g 32位【Oracle 32位的話,OGG 也必須是 32位,否則會有0xc000007b無法正常啟動 錯誤】 安裝目錄為 D:\oracle\product\11.1.0\db1 【這個目錄要設置為 環境變量 ORACLE_HOME】

設置環境變量

JAVAHOME    C:\Program Files\Java\jdk1.8.0121

ORACLEHOME   D:\oracle\product\11.1.0\db1

ORACLE_SID   ORCL

如何查找環境變量

獲取 ORACLESID  : 打開 SQLPlus,登錄 SYS 賬戶,執行 select instancename from v$instance;

獲取 ORACLEHOME : 查找 Oracle安裝目錄,這個目錄有個特征:有一個子目錄名叫 RDBMS。就是說: %ORACLEHOME%\RDBMS\ 這個路徑要能正常打開即為配置成功。

安裝 OGG

http://www.oracle.com/technetwork/cn/middleware/goldengate/downloads/index.html 拖到頁面最后面

搜索 32位的 Oracle_11g 的 OGG

目標1

  • 給安裝的Oracle_11g 創建 兩個用戶 admin 和 root 。

  • admin 對應了 ADMIN 結構,創建了一個 TB_ TEST表。

  • root 對應了 ROOT 結構,也創建一個 TB_ TEST (表結構一摸一樣)。

  • 當 admin.TBTEST 中的表數據 變化時,root.TB TEST 的表數據 自動同步(備份)

  • PS. 實際的 容災備份,肯定是 兩個 Oracle 服務器,通過網絡傳輸 備份數據 —— 各位可以想象 admin 和 root 在兩台不同服務器 上。

目標2

  • 當 admin.TB_ TEST 表數據發生變化時,把這種變化 傳遞給 Java、C# 程序。

  • 當 Java、C# 程序得到 數據變化消息時,把 數據的變化 記錄到日志中(或者其他操作)。

配置數據庫

打開 SQL Plus

SYS登錄

啟用日志存檔模式:

啟用強制記錄模式:

啟用 SUPPLEME:

關閉源端數據庫回收站:

切換一下日志,最好還能重啟一下 數據庫服務 —— 或者重啟一下系統:

創建用戶,授權DBA權限(可以自己摸索OGG的最低權限)。

創建數據表

開始配置 OGG

按順序 輸入如下指令:

> create subdirs

> edit param mgr

往記事本中,寫入 如下內容,保存關閉:

PORT 7809

DYNAMICPORTLIST 7840-7850

> start mgr

> dblogin userid admin password admin

> add trandata admin.*

> add extract ext1, tranlog, begin now

> edit param ext1

填寫如下配置:

extract ext1

userid admin,password oracle

rmthost 127.0.0.1, mgrport 7809

rmttrail D:\oracle\product\11.1.0\x86_ogg4oracle\dirdat\r1

dynamicresolution

gettruncates

table admin.*;

> add rmttrail D:\oracle\product\11.1.0\x86_ogg4oracle\dirdat\r1 extract ext1

> start mgr

> start ext1

> info all

復制 OGG 文件夾,准備開始配置 備份服務 root(用戶),【admin 表 TBTEST 會備份到 root 表 TBTEST】

雙擊 新復制的 ggsci.exe

> edit param mgr

> add replicat rep1 exttrail D:\oracle\product\11.1.0\x86_ogg4oracle_target\dirdat\r1, nodbcheckpoint

> edit param rep1

填寫如下內容:(這里的配置是錯誤的,查錯后的正確配置在下面)

replicat rep1

userid root,password oracle

assumetargetdefs

reperror default,discard

discardfile c:\oradata\repsz.dsc,append,megabytes 100

map admin., target root.;

手動創建 上面的 C:\oradata\ 文件夾。【不手動創建會報錯】

> start mgr

> start rep1

目前為止

目標1 測試開始

執行腳本:

insert into TB_TEST(fid, fname, fbirthday, fsex) values (10, '路人甲', "TO_DATE"('1992-02-10', 'yyyy-MM-dd'), '男');

對比兩個表:

出現BUG了,作者想要冷靜一會兒。

仔細檢查,似乎發現了 BUG:

大喊一聲:神獸保佑,代碼無BUG。

先在 ADMIN OGG中輸入命令: > start mgr > start ext1

打開 ROOT 的 MGR 7909: > start mgr > start rep1

這日子沒法過了。

猜想: 我們在復制 D:\oracle\product\11.1.0\x86ogg4oracle\ 到 x86ogg4oracle_target 時,是不是把 源端的配置 也復制過來了?

於是在 x86ogg4oracletarget 中搜索 ext1 —— 確實搜索除了 源端中的 ext1 配置。【目標端不需要這個配置,把搜索出的 ext1 全部刪除】

再次執行 insert 語句 —— 問題依然沒有解決:還是無法同步 —— 心已經稀碎,碎了一地。

在一籌莫展時,意外在 x86ogg4oracletarget\ ggserr.log 中發現了一行錯誤:

將 x86ogg4oracle\dirdat\ 和 x86ogg4oracle_target\dirdat\ 兩個文件夾一比較:

手動將 x86ogg4oracle\dirdat\ 中的文件 復制到 x86ogg4oracle_target\dirdat\ ,重啟 源端、目標端 的 服務【start mgr 、start ext1、 start rep1、這些基本啟動命令,我在文章的下面 就不多說了】

再次insert —— 奇跡發生了:

最終發現,想實現同步 就得讓 \x86ogg4oracletarget\dirdat\ 中 有數據。那么這個目錄的數據 從哪里來?

  • 1、\x86ogg4oracle\dirdata\ 中的數據 通過 某種機制 傳輸到 \x86ogg4oracle_target\dirdata\

  • 2、配置 ext1 時,其中的參數 rmttrail 不該配 源端路徑,要配成 目標端路徑

開始驗證猜想:

  • 我們啟動 源端OGG,啟動 ext1,執行 insert腳本 —— 結果發現:\x86_ogg4oracle\dirdata\ 不會生成文件。

  • 我們再啟動 目標端OGG,啟動 rep1,執行 insert腳本 —— 結果發現 \x86_ogg4oracle\dirdata\ 文件產生了。

  • —— 即:配置ext1 時的數據目錄,rmttrail 是 目標端目錄。

理論清晰了,開始重新配置 ext1 和 rep1:

  • 在 \x86_ogg4oracle\ 中搜索 ext1 —— 全部刪除,保留 ext1.prm

  • 在 \x86ogg4oracletarget\ 中搜索 rep1 —— 全部刪除,保留 rep1.prm

重建 ext1:

extract ext1

userid admin,password oracle

rmthost 127.0.0.1, mgrport 7909

rmttrail D:\oracle\product\11.1.0\x86ogg4oracletarget\dirdat\r1

dynamicresolution

gettruncates

table admin.*;

重建 rep1:

replicat rep1

userid root,password oracle

assumetargetdefs

reperror default,discard

discardfile D:\oracle\product\11.1.0\x86ogg4oracletarget\dirdat\repsz.dsc,append,megabytes 100

map admin., target root.;

執行 insert 腳本 —— 2秒鍾后,同步成功:

遺留問題

\x86_ogg4oracle\ 在啟動 ext1 時, 執行 insert —— 捕獲到的數據變化 存放在哪里?

目標2,如何 編寫對應的 Java插件 —— 待續。

OGG 是基於變化的同步 —— 之前沒同步的部分,啟用OGG之后也不會同步。

那么: 源端 TBTEST.FID =10,目標端 TBTEST.FID =30(一開始就不同步)

  • —— 源端執行 UPDATE TB_TEST SET FID=FID*2

  • —— 目標端 的 FID 會變成多少?與源端一致 FID=20?還是 FID=60?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM