有兩個服務器,分別裝有兩個SQL Server A ,B
A,B的表結構a,b 相同
A,B分別都會做一些INSERT,UPDATE,DELETE操作,要求AB的數據保持一致
(即A新增一條數據,要求B也新增,A更改一條數據,B也更改相應的)
是不是可以用觸發器來實現
例程
/*--同步兩個數據庫的示例
有數據
srv1.庫名..author有字段:id,name,phone,
srv2.庫名..author有字段:id,name,telphone,adress
要求:
srv1.庫名..author增加記錄則srv1.庫名..author記錄增加
srv1.庫名..author的phone字段更新,則srv1.庫名..author對應字段telphone更新
--*/
--大致的處理步驟
--1.在 srv1 上創建連接服務器,以便在 srv1 中操作 srv2,實現同步
exec sp_addlinkedserver 'srv2','','SQLOLEDB','srv2的sql實例名或ip'
exec sp_addlinkedsrvlogin 'srv2','false',null,'用戶名','密碼'
go
--2.在 srv1 和 srv2 這兩台電腦中,啟動 msdtc(分布式事務處理服務),並且設置為自動啟動
我的電腦--控制面板--管理工具--服務--右鍵 Distributed Transaction Coordinator--屬性--啟動--並將啟動類型設置為自動啟動
go
--3.實現同步處理
--a.在srv1..author中創建觸發器,實現數據即時同步
--新增同步
create trigger tr_insert_author on author
for insert
as
set xact_abort on
insert srv2.庫名.dbo.author(id,name,telphone)
select id,name,telphone from inserted
go
--修改同步
create trigger tr_update_author on author
for update
as
set xact_abort on
update b set name=i.name,telphone=i.telphone
from srv2.庫名.dbo.author b,inserted i
where b.id=i.id
go
--刪除同步
create trigger tr_delete_author on author
for delete
as
set xact_abort on
delete b
from srv2.庫名.dbo.author b,deleted d
where b.id=d.id
go
--3.實現同步處理的方法2,定時同步
--在srv1中創建如下的同步處理存儲過程
create proc p_process
as
--更新修改過的數據
update b set name=i.name,telphone=i.telphone
from srv2.庫名.dbo.author b,author i
where b.id=i.id and
(b.name<>i.name or b.telphone<>i.telphone)
--插入新增的數據
insert srv2.庫名.dbo.author(id,name,telphone)
select id,name,telphone from author i
where not exists(
select * from srv2.庫名.dbo.author where id=i.id)
--刪除已經刪除的數據(如果需要的話)
delete b
from srv2.庫名.dbo.author b
where not exists(
select * from author where id=b.id)
go