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

注释:本文主要介绍如何同步更新数据库中表的内容,例如将客户端的表的增加、删除、修改、查询都及时更新到服务器中去,主要用到触发器、创建数据库链接等技术;
一、触发器同步
介绍:两个数据库分别为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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值