Java Fly

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

          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庫中是不是也相應的增加了

          方法二:

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

          評論

          # re: Oracle數據庫同步探討[未登錄]  回復  更多評論   

          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數據庫同步探討[未登錄]  回復  更多評論   

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

          # re: Oracle數據庫同步探討  回復  更多評論   

          當B庫出現斷網的情況時,你A庫在插入數據到B時,會出現問題。此方法同步數據,不可取
          2013-10-14 14:22 | oracle_db
          主站蜘蛛池模板: 安庆市| 尼勒克县| 高雄市| 平泉县| 阆中市| 石屏县| 正蓝旗| 鄂托克前旗| 南部县| 河南省| 江门市| 进贤县| 梁山县| 奈曼旗| 出国| 临沧市| 瑞金市| 丰台区| 治县。| 莫力| 洛扎县| 永川市| 阜平县| 宜阳县| 酉阳| 鞍山市| 黄梅县| 安化县| 独山县| 河间市| 房产| 乌拉特后旗| 上杭县| 苍山县| 北碚区| 桂东县| 浦东新区| 东辽县| 保德县| 叙永县| 修武县|