[局域网内服务器之间数据的同步.docx

[局域网内服务器之间数据的同步.docx

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[局域网内服务器之间数据的同步

局域网内两个数据库表之间数据联动:当两个数据库不在同一台服务器(在局域网内),怎样使一个数据库中表的数据发生变化另一个库中的数据跟着一起变化,用存储过程或者触发器SQL code--定时同步服务器上的数据--例子:--测试环境,SQL Server2000,远程服务器名:xz,用户名为:sa,无密码,测试数据库:test--服务器上的表(查询分析器连接到服务器上创建)createtable[user](id intprimarykey,numbervarchar(4),name varchar(10))go--以下在局域网(本机操作)--本机的表,state说明:null 表示新增记录,1 表示修改过的记录,0 表示无变化的记录ifexists (select*from dbo.sysobjects where id =object_id(N[user]) andOBJECTPROPERTY(id, NIsUserTable) =1)droptable[user]GOcreatetable[user](id intidentity(1,1),numbervarchar(4),name varchar(10),state bit)go--创建触发器,维护state字段的值createtrigger t_state on[user]after updateasupdate[user]set state=1from[user] a join inserted b on a.id=b.idwhere a.state isnotnullgo--为了方便同步处理,创建链接服务器到要同步的服务器--这里的远程服务器名为:xz,用户名为:sa,无密码ifexists(select1from master..sysservers where srvname=srv_lnk)exec sp_dropserver srv_lnk,droploginsgoexec sp_addlinkedserver srv_lnk,,SQLOLEDB,xzexec sp_addlinkedsrvlogin srv_lnk,false,null,sago--创建同步处理的存储过程ifexists (select*from dbo.sysobjects where id =object_id(N[dbo].[p_synchro]) andOBJECTPROPERTY(id, NIsProcedure) =1)dropprocedure[dbo].[p_synchro]GOcreateproc p_synchroas--set XACT_ABORT on--启动远程服务器的MSDTC服务--exec master..xp_cmdshell isql /Sxz /Usa /P /qexec master..xp_cmdshell net start msdtc,no_output,no_output--启动本机的MSDTC服务--exec master..xp_cmdshell net start msdtc,no_output--进行分布事务处理,如果表用标识列做主键,用下面的方法--BEGIN DISTRIBUTED TRANSACTION--同步删除的数据deletefrom srv_lnk.test.dbo.[user]where id notin(select id from[user])--同步新增的数据insertinto srv_lnk.test.dbo.[user]select id,number,name from[user]where state isnull--同步修改的数据update srv_lnk.test.dbo.[user]setnumber=b.number,name=from srv_lnk.test.dbo.[user] ajoin[user] b on a.id=b.idwhere b.state=1--同步后更新本机的标志update[user]set state=0whereisnull(state,1)=1--COMMIT TRANgo--创建作业,定时执行数据同步的存储过程ifexists(SELECT1from msdb..sysjobs where name=数据处理)EXECUTE msdb.dbo.sp_delete_job @job_name=数据处理exec msdb..sp_add_job @job_name=数据处理--创建作业步骤declare@sqlvarchar(800),@dbnamevarchar(250)select@sql=exec p_synchro--数据处理的命令 ,@dbna

您可能关注的文档

文档评论(0)

caiyl9924 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档