分布式数据库的应用(一)

注释:本文主要介绍如何同步更新数据库中表的内容,例如将客户端的表的增加、删除、修改、查询都及时更新到服务器中去,主要用到触发器、创建数据库链接等技术;
一、触发器同步
介绍:两个数据库分别为April_Customer和April_Server
--创建服务器链接;查询服务器表数据:select * from LINK_TO_CUSTOMER.April_Server.dbo.April_User;
--注意启动服务:Distributed   Transaction   Coordinator分布式数据库服务
exec   sp_addlinkedserver     'link_to_customer','','SQLOLEDB','192.168.0.88'   
exec   sp_addlinkedsrvlogin   'link_to_customer','false',null,'sa','wsm' 
--新增同步不能执行原因:SQL2005不允许循环分布式应用,即服务器和客户端在同一机器上
alter  trigger  Add_customer_user  on  dbo.Aprl_Customer_User
for insert   
as   
set   xact_abort   on   
insert   LINK_TO_CUSTOMER.April_Server.dbo.April_User(id,name,tel)   
select   id,name,tel   from   inserted   
go   
--修改同步参数:a指客户端已经更新的表;b指待更新的表;LINK_TO_CUSTOMER指链接服务器;
create   trigger   Edit_customer_user   on   dbo.Aprl_Customer_User   
for   update   
as   
set   xact_abort   on   
update  b set   name=a.name,tel=a.tel
from LINK_TO_CUSTOMER.April_Server.dbo.April_User  b,inserted  a  
where  b.id=a.id   
go      
--删除同步参数:a指客户端已经删除的表;b指待删除的表;LINK_TO_CUSTOMER指链接服务器;
create   trigger   Delete_customer_user   on   dbo.Aprl_Customer_User   
for   delete   
as   
set   xact_abort   on   
delete   b     
from   LINK_TO_CUSTOMER.April_Server.dbo.April_User  b,deleted  a   
where   b.id=a.id   

*–同步两个数据库的示例  
   
有数据  
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  
   
   
   
–然后创建一个作业定时调用上面的同步处理存储过程就行了  
   
企业管理器  
–管理  
–SQL   Server代理  
–右键作业  
–新建作业  
–"常规"项中输入作业名称  
–"步骤"项  
–新建  
–"步骤名"中输入步骤名  
–"类型"中选择"Transact-SQL   脚本(TSQL)"  
–"数据库"选择执行命令的数据库  
–"命令"中输入要执行的语句:   exec   p_process    
–确定  
–"调度"项  
–新建调度  
–"名称"中输入调度名称  
–"调度类型"中选择你的作业执行安排  
–如果选择"反复出现"  
–点"更改"来设置你的时间安排  
   
   
然后将SQL   Agent服务启动,并设置为自动启动,否则你的作业不会被执行  
   
设置方法:  
我的电脑–控制面板–管理工具–服务–右键   SQLSERVERAGENT–属性–启动类型–选择"自动启动"–确定.

转载于:https://www.cnblogs.com/wsmltyl/archive/2010/06/10/1755695.html

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注