Java Fly

          Java&Oracle
          隨筆 - 12, 文章 - 20, 評論 - 27, 引用 - 0
          數(shù)據(jù)加載中……

          Oracle數(shù)據(jù)庫同步探討

          方法一:
                  需求:
          現(xiàn)有兩臺oracle數(shù)據(jù)庫服務(wù)器A和B(A,B可以是在同一內(nèi)網(wǎng),也可以是在互聯(lián)網(wǎng)上的兩臺獨(dú)立機(jī)器)。A和B里有都有testable表,結(jié)構(gòu)一樣,現(xiàn)需要當(dāng)A庫中的testable表變化時,B庫里的testable也相應(yīng)變化數(shù)據(jù)

          我的解決方案:
          在A中建立到B庫的鏈接,然后對要同步的表做一個同義synonym,最后建一個觸發(fā)器,就可以完成了。當(dāng)然,你所用的當(dāng)前的用戶要有相應(yīng)的權(quán)限去執(zhí)行這些操作。

          當(dāng)從A向B同步數(shù)據(jù)時,應(yīng)該在A上做所有的設(shè)置:
          1,為保證連接到另一臺遠(yuǎn)程服務(wù)器的數(shù)據(jù)庫,你需要建立一個DB Link,但是,這里要注意語法格式,using +"connect string",這個connect string應(yīng)該是存在于oracle服務(wù)器的TNSNAMES.ORA文件里,監(jiān)聽程序?qū)倪@里獲取遠(yuǎn)方服務(wù)器
          的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
          上面的語句相當(dāng)于在B服務(wù)器上執(zhí)行:
          select * from testable 

          4,封建觸發(fā)器:
          當(dāng)A中的testable表變化時(這里只考慮插入操作),就會觸發(fā)向遠(yuǎn)程的B庫的testable也插入相應(yīng)的數(shù)據(jù):
          create or replace trigger rtest
          after insert on testable
          for each row
          begin 

          insert into test01 (something) values (:new.something);
          end;

          ok,現(xiàn)在我們可以測試一下,你在A庫中往testable表中插入一條記錄,看看B庫中是不是也相應(yīng)的增加了

          方法二:

          posted on 2008-01-06 15:14 Java Fly 閱讀(1819) 評論(3)  編輯  收藏 所屬分類: Oracle命題

          評論

          # re: Oracle數(shù)據(jù)庫同步探討[未登錄]  回復(fù)  更多評論   

          insert into test01 (something) values (:new.something);這個地方出錯了,Compilation errors for TRIGGER DP.SYN_STORE_INFO

          Error: PLS-00049: bad bind variable 'NEW.SOMETHING'
          Line: 5
          Text: insert into store_info01 (SOMETHING) values (:new.SOMETHING);
          2008-01-14 16:53 | xxx

          # re: Oracle數(shù)據(jù)庫同步探討[未登錄]  回復(fù)  更多評論   

          大字段如何處理?
          2009-07-06 21:38 | abc

          # re: Oracle數(shù)據(jù)庫同步探討  回復(fù)  更多評論   

          當(dāng)B庫出現(xiàn)斷網(wǎng)的情況時,你A庫在插入數(shù)據(jù)到B時,會出現(xiàn)問題。此方法同步數(shù)據(jù),不可取
          2013-10-14 14:22 | oracle_db
          主站蜘蛛池模板: 谷城县| 乌苏市| 霍城县| 略阳县| 东丰县| 西乌珠穆沁旗| 新宁县| 滁州市| 新民市| 永济市| 文山县| 连州市| 怀远县| 磐石市| 苍梧县| 哈尔滨市| 奈曼旗| 江川县| 七台河市| 独山县| 根河市| 庐江县| 武定县| 棋牌| 朝阳县| 兖州市| 石河子市| 浦东新区| 高密市| 濮阳县| 上饶市| 天等县| 龙州县| 万宁市| 南城县| 西城区| 隆德县| 新蔡县| 本溪市| 德保县| 桐乡市|