oracle資料庫同步在兩台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) ) ) |
把它存到你的TNSNAMES.ORA檔案裡。
2,然後就可以定義DB Link了:
create public database link TEST2.US.ORACLE.COM connect to 使用者名稱 identified by "密碼" using '251'; |
3,建立synonym(同義)
create or replace synonym TEST01 for MYCHOICE.TESTABLE@TEST2.US.ORACLE.COM; |
建立完了以後,你可以通過:
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); end; |
ok,現在我們可以測試一下,你在A庫中往testable表中插入一條記錄,看看B庫中是不是也相應的增加了
http://blog.chinaunix.net/u/11317/showart_189040.html