Oracle數據庫同步探討
需求:
現有兩臺oracle數據庫服務器A和B(A,B可以是在同一內網,也可以是在互聯網上的兩臺獨立機器)。A和B里有都有testable表,結構一樣,現需要當A庫中的testable表變化時,B庫里的testable也相應變化數據
我的解決方案:
在A中建立到B庫的鏈接,然后對要同步的表做一個同義synonym,最后建一個觸發器,就可以完成了。當然,你所用的當前的用戶要有相應的權限去執行這些操作。
當從A向B同步數據時,應該在A上做所有的設置:
1,為保證連接到另一臺遠程服務器的數據庫,你需要建立一個DB Link,但是,這里要注意語法格式,using +"connect string",這個connect string應該是存在于oracle服務器的TNSNAMES.ORA文件里,監聽程序將從這里獲取遠方服務器
的ip地址等信息,我定義了一個'251'的connect string如下:
251 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.251)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = mychoice) ) ) |
2,然后就可以定義DB Link了:
create public database link TEST2.US.ORACLE.COM connect to 用戶名 identified by "密碼" using '251'; |
3,建立synonym(同義)
create or replace synonym TEST01 |
建立完了以后,你可以通過:
select * from test01
上面的語句相當于在B服務器上執行:
select * from testable
4,封建觸發器:
當A中的testable表變化時(這里只考慮插入操作),就會觸發向遠程的B庫的testable也插入相應的數據:
create or replace trigger rtest after insert on testable for each row begin insert into test01 (something) values (:new.something); |
ok,現在我們可以測試一下,你在A庫中往testable表中插入一條記錄,看看B庫中是不是也相應的增加了
方法二:
posted on 2008-01-06 15:14 Java Fly 閱讀(1818) 評論(3) 編輯 收藏 所屬分類: Oracle命題