触发器实现同步两个数据库

来源:互联网 发布:电子书包软件下载 编辑:程序博客网 时间:2024/05/16 03:30
有两个服务器,分别装有两个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