Oracle使用goldengate分別向Oracle和mysql雙路的單向複製

還不算暈發表於2013-10-29

一.Oracle分別向Oracle和mysql雙路的單向複製是在:

ORACLE-mysql的單向複製基礎上做的。http://blog.csdn.net/q947817003/article/details/13294937

二.分別再在ORACLE主庫及ORACLE目標庫上增加相應程式

ORACLE源端增加:

1.增加配置extract程式

按順序執行以下操作:
add extract extora,tranlog, begin now

目標端檔案的位置--這裡要注意rmttrail指的是目標端的路徑。
add rmttrail /u01/ogg/dirdat/ot, extract extora

edit params extora
在開啟的編輯視窗寫入
extract extora
userid ogg, password ogg
rmthost 192.168.1.213, mgrport 7809
rmttrail /u01/ogg/dirdat/ot
table test5.test5;
##################################################

2.目標端增加replicat程式:

-----我這裡MYSQL目標庫和ORACLE目標庫在同一臺虛擬機器,如果是同樣情況要要注意:
OGG FOR MYSQL和OGG FOR ORACLE安裝在不同目錄,並且所涉及的MGR及接收、抽取程式都是獨立的。
相關的程式都需要單獨啟動。
同時要注意OGG FOR MYSQL和OGG FOR ORACLE兩個主程式要執行在不同的埠,如我的OGG FOR ORACLE執行在7809.  OGG FOR MYSQL執行在7810
逐次輸入以下命令:
dblogin userid ogg,password ogg
add checkpointtable ogg.checkpoint           ###########如果之前已經配置過增加這個表,就不需要執行這一句。
add replicat repora,exttrail /u01/ogg/dirdat/ot, checkpointtable ogg.checkpoint

edit params repora
在彈出編輯視窗輸入以下:---我這裡只設定了同步test5使用者的test5表

試中再建立。
replicat repora
handlecollisions
assumetargetdefs
userid ogg,password ogg
discardfile /u01/ogg/dirdat/repora_discard.txt,append, megabytes 10
map test5.test5, target test5.test5;

三、在ORACLE目標庫建立使用者及表,並啟動主及目標庫的OGG程式。

1.ORACEL目標資料庫中建立使用者和表所使用的語句如下:
使用DBA使用者執行 create user test5 identified by test5;
grant connect,resource to test5;
conn test5/test5
create table test5(aa int primary key);

2.啟動主及目標庫的OGG程式
涉及語句大致如下:
start mgr
start extract extmysql  或start   extmysql
start  replicat repmysql   或start  repmysql
start extract extora  或start   extora
start  replicat repora   或start  repora

3.程式 啟動後的狀態如下:
ORACLE主庫OGG程式:  --只用不用 了EXTMYSQL  EXTORA兩個,其它的是其它複製測試用的,不用管。--以下的OGG程式同理。
GGSCI (bys001.oel.com) 21> info all
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                          
EXTRACT     ABENDED     EXT1        00:00:00      26:20:26   
EXTRACT     ABENDED     EXT3        00:00:00      26:18:25   
EXTRACT     RUNNING     EXTMYSQL    07:39:30      00:00:04   
EXTRACT     RUNNING     EXTORA      00:00:00      00:08:28   
EXTRACT     ABENDED     PUMP3       00:00:00      26:20:29   
REPLICAT    ABENDED     REP2        00:00:00      26:18:29

MYSQL目標庫OGG程式:
GGSCI (bys2.oel.com) 4> info all
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                          
REPLICAT    RUNNING     REPMYSQL    00:00:00      00:00:00

ORACLE目標庫OGG程式:
GGSCI (bys2.oel.com) 14> info all
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                          
EXTRACT     ABENDED     EXT2        00:00:00      26:19:06   
REPLICAT    ABENDED     REP1        00:00:00      26:18:59   
REPLICAT    ABENDED     REP3        00:00:00      26:18:58   
REPLICAT    RUNNING     REPORA      00:00:00      00:00:
所涉及的OGG相關程式均正常執行。

四、同步測試

注:下面測試中在統計SQL語句執行時間中是不準確的,比如下面的語句

00:19:21 TEST5@bys1>insert into test5 values(333);
1 row created.
00:19:50 TEST5@

如果統計插入語句的執行時間,應該統計執行完語句的返回的下一個命令提示符中的時間,即00:19:50,而不是00:19:21。目前沒實驗環境,暫且這樣。

1.在源庫做插入操作:

  --源庫已經有兩條資料,是在做ORACLE-mysql的單向複製時留下的,這裡不清除,
測試可以看到,新增加的ORACLE目標庫中初始沒有這兩條資料,我的配置裡OGG也不會自動同步源庫與目標庫表中存在的資料。
TEST5@bys1>select * from test5;
        AA
----------
       100
       200
TEST5@bys1>set time on
00:19:21 TEST5@bys1>insert into test5 values(333);
1 row created.
00:19:50 TEST5@bys1>commit;   

Commit complete.

00:19:53 TEST5@bys1>---注意記錄一下提交的時間,方便在目標庫檢視資料同步情況。

2.目標ORACLE庫查詢資料同步情況:

---因為目標庫內資料未做初始化,原庫有兩條資料100和200.目標庫未初始化這些資料。--可以手動插入那兩條資料即可。
[oracle@bys2 mysqlogg]$ sqlplus test5/test5
TEST5@bys2>set time on
00:19:32 TEST5@bys2>select * from test5;
no rows selected
00:19:54 TEST5@bys2>select * from test5;  -
no rows selected
00:19:57 TEST5@bys2>select * from test5;  ---可以看到,主庫提交後延遲有4秒鐘多。
        AA
----------
       333

3.目標MYSQL庫同步情況:

[oracle@bys2 mysqlogg]$ mysql -u root -p oggtest
Enter password:
mysql> select * from test5;
+-----+
| aa  |
+-----+
| 100 |
| 200 |
| 333 |
+-----+
3 rows in set (0.00 sec)
mysql> select * from chktab;            ----查詢這個表, audit_ts  列在OACLE源庫發出COMMIT後就有了更新。 last_update_ts列是在00:19:54秒,和ORACLE目標庫一樣是有4秒多的延遲了。                                                                                            
+------------+------------+-------+------+----------------------------+---------------------+---------------------+---------------+
| group_name | group_key  | seqno | rba  | audit_ts                   | create_ts           | last_update_ts      | current_dir   |
+------------+------------+-------+------+----------------------------+---------------------+---------------------+---------------+
| REPMYSQL   | 2345303211 |     2 | 1218 | 2013-08-31 00:19:50.795556 | 2013-08-30 14:14:31 |2013-08-31 00:19:54 | /u01/mysqlogg |
+------------+------------+-------+------+----------------------------+---------------------+---------------------+---------------+
1 row in set (0.00 sec)

相關文章