安裝 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?
