雙向同步需要考慮的是怎么解決循環復制,以及同時更新一張表以誰為基准。
配置過程就不寫了,大致和oracle到mysql的單向+mysql到oracle的單向差不多。
需要注意的有如下幾點:
1.oracle和mysql的2端,抽取(extract)和應用(replication)應該使用不同的用戶
2.為解決禁止循環復制,應該在ext進程配置3個參數,如下:
oracle的extract:
extract ext4 dynamicresolution userid ggs,password ggs RANLOGOPTIONS EXCLUDEUSER repggs GETAPPLOPS IGNOREREPLICATES exttrail /u01/ogg/11.2/dirdat/dd table hr.ah6;
mysql的extract:
extract ext5 setenv (MYSQL_HOME="/u01/mysql") sourcedb sure@localhost:3306,userid root,password 123456 tranlogoptions altlogdest /tmp/binlog.index TRANLOGOPTIONS EXCLUDEUSER reproot GETAPPLOPS IGNOREREPLICATES exttrail /u01/ogg/11.2/dirdat/mb --dynamicresolution --gettruncates table sure.ah6;
只復制應用產生的數據,忽略replication產生的數據,以及忽略replication進程的用戶。
3. ./GLOBALS 是全局變量,只在replication的時候有用,所以配置的時候需要加上:
GGSCHEMA repggs --這個參數只在oracle里面有
CheckpointTable repggs.checkpointtab --這個參數oracle和mysql里面都有
4.在extract用ggs/root用戶,在replication用repggs/reproot用戶
5.因為是雙向同步,所以同一個表,比如說ah6,在oracle生成的define要傳遞到mysql去,在mysql生成的define也要傳遞到oracle去。
所以,建議命名規則是oracle->mysql:ah6_o2m.prm,mysql->oracle:ah6_m2o.prm
6.從oracle復制到mysql的dml操作,需要手工commit,這個還沒找到解決的方法(除了把auto_commit改為on)。