熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

如何通過觸發器實現數據庫的即時同步

2013-11-13 15:40:17  來源: Oracle 
問題如何通過觸發器實現數據庫的即時同步?

  解答具體的解決方法請參考下文

  即時同步兩個表的示例如下:

  

  測試環境如下:SQL Sever 數據庫遠程主機名:xz用戶名:sa密碼:無數據庫名:test

  

  創建測試表請注意不能用標識列做主鍵因為不能進行正常的更新

  然後在本機上創建測試表注意遠程主機上也要做同樣的建表操作只是不寫觸發器

  if exists (select * from dbosysobjects where id = object_id(N[test]) and OBJECTPROPERTY(id NIsUserTable) = )

  drop table [test]

  

  create table test(id int not null constraint PK_test primary key

  name varchar())

  go

  

  創建同步的觸發器

  create trigger t_test on test

  for insertupdatedelete

  as

  set XACT_ABORT on

  啟動遠程服務器的MSDTC服務

  exec masterxp_cmdshell isql /Sxz /Usa /P /qexec masterxp_cmdshell net start msdtcno_outputno_output

  

  啟動本機的MSDTC服務

  exec masterxp_cmdshell net start msdtcno_output

  

  進行分布事務處理假如表用標識列做主鍵你可以使用下面的這個方法

  BEGIN DISTRIBUTED TRANSACTION

  delete from openrowset(sqloledbxz;sa;testdbotest)

  where id in(select id from deleted)

  insert into openrowset(sqloledbxz;sa;testdbotest)

  select * from inserted

  commit tran

  go

  

  插入數據測試

  insert into test

  select aa

  union all select bb

  union all select c

  union all select dd

  union all select ab

  union all select bc

  union all select ddd

  

  刪除數據測試

  delete from test where id in()

  

  更新數據測試

  update test set name=name+_ where id in()

  

  最後顯示測試的結果

  select * from test a full join

  openrowset(sqloledbxz;sa;testdbotest) b on aid=bid


From:http://tw.wingwit.com/Article/program/Oracle/201311/17111.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.