夜鹰教程网-程序员的加油站
 当前位置:文章中心 >> sql2016_sql2012_sql2015_sql2008
定时同步服务器上的数据
夜鹰教程网 来源:www.yyjcw.com 日期:2016-10-28 13:40:01
sql数据同步 --定时同步服务器上的数据(服务器上的数据修改同步到本地)   
sql数据同步
--定时同步服务器上的数据(服务器上的数据修改同步到本地)  
    
  --例子:  
  --测试环境,SQL   Server2000,远程服务器名:rserver,用户名为:ruser,密码:rpwd,  
  测试数据库:test  
    
  --服务器上的表(查询分析器连接到服务器上创建)  
  --state字段为辅助更新而设置的附加字段,字段值说明:null   表示新增记录,1   表示修改过的记录,0   表示无变化的记录  
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[luser]')   and   OBJECTPROPERTY(id,   N'IsUserTable')   =   1)  
  drop   table   [luser]  
  GO  
  create   table   [luser](id   int   identity(1,1)   primary   key,[user]   varchar(4),pwd   varchar(10),address   varchar(50),state   bit)  
  go  
    
  --创建触发器,维护state字段的值  
  create   trigger   t_state   on   [luser]  
  after   update  
  as  
  update   [luser]   set   state=1  
  from   [luser]   a   join   inserted   b   on   a.id=b.id  
  where   a.state   is   not   null  
  go  
    
  ----以下在局域网(本机操作)  
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[luser]')   and   OBJECTPROPERTY(id,   N'IsUserTable')   =   1)  
  drop   table   [luser]  
  create   table   [luser](id   int   primary   key,[user]   varchar(4),pwd   varchar(10),address   varchar(50))  
  go  
    
  --为了方便同步处理,创建链接服务器到要同步的服务器  
  --这里的远程服务器名:rserver,用户名为:ruser,密码:rpwd  
  if   exists(select   1   from   master..sysservers   where   srvname='srv_lnk')  
  exec   sp_dropserver   'srv_lnk','droplogins'  
  go  
  exec   sp_addlinkedserver     'srv_lnk','','SQLOLEDB','rserver'  
  exec   sp_addlinkedsrvlogin   'srv_lnk','false',null,'ruser','rpwd'  
  go  
    
  --创建同步处理的存储过程  
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_synchro]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
  drop   procedure   [dbo].[p_synchro]  
  GO  
  create   proc   p_synchro  
  as  
  /*--因为MSDTC服务(分布式事务处理需要)工作不稳定,所以下面部分为选用内容  
  --set     XACT_ABORT   on  
  --启动远程服务器的MSDTC服务  
  --exec   master..xp_cmdshell   'isql   /S"rserver"   /U"ruser"   /P"rpwd"   /q"exec   master..xp_cmdshell   ''net   start   msdtc'',no_output"',no_output  
    
  --启动本机的MSDTC服务  
  --exec   master..xp_cmdshell   'net   start   msdtc',no_output  
    
  --进行分布事务处理,如果表用标识列做主键,用下面的方法  
  --BEGIN   DISTRIBUTED   TRANSACTION  
  --*/  
  --同步删除的数据  
  delete   from   [luser]  
  where   id   not   in(select   id   from   srv_lnk.test.dbo.[luser])  
    
  --同步新增的数据  
  insert   into   [luser]  
  select   id,[user],pwd,address   from   srv_lnk.test.dbo.[luser]  
  where   state   is   null  
    
  --同步修改的数据  
  update   [luser]   set  
  [user]=b.[user],pwd=b.pwd,address=b.address  
  from   [luser]   a  
  join   srv_lnk.test.dbo.[user]   b   on   a.id=b.id  
  where   b.state=1  
    
  --同步后更新服务器上的标志  
  update   srv_lnk.test.dbo.[luser]   set   state=0   where   isnull(state,1)=1  
  --COMMIT   TRAN --如果启用分布式事务处理,加上此句  
  go  
    
  --创建作业,定时执行数据同步的存储过程  
  if   exists(SELECT   1   from   msdb..sysjobs   where   name='数据处理')  
  EXECUTE   msdb.dbo.sp_delete_job   @job_name='数据处理'  
  exec   msdb..sp_add_job   @job_name='数据处理'  
    
  --创建作业步骤  
  declare   @sql   varchar(800),@dbname   varchar(250)  
  select   @sql='exec   p_synchro'     --数据处理的命令  
  ,@dbname=db_name() --执行数据处理的数据库名  
    
  exec   msdb..sp_add_jobstep   @job_name='数据处理',  
  @step_name   =   '数据同步',  
  @subsystem   =   'TSQL',  
  @database_name=@dbname,  
        @command   =   @sql,  
  @retry_attempts   =   5,   --重试次数  
  @retry_interval   =   5     --重试间隔  
    
  --创建调度  
  EXEC   msdb..sp_add_jobschedule   @job_name   =   '数据处理',    
  @name   =   '时间安排',  
  @freq_type=4,   --4   每天,8   每周,16   每月  
  @freq_interval=1, --作业执行的天数  
  @freq_subday_type=0, --是否重复执行,0x1   在指定的时间,   0x4   分钟,   0x8   小时    
  @freq_subday_interval=1,   --重复周期  
  @freq_recurrence_factor=0, --重复执行,则设置为1,否则设置为0  
  @active_start_time   =   00000 --0点开始执行  
    
  --添加目标服务器  
  EXEC   msdb.dbo.sp_add_jobserver    
  @job_name   =   @jobname   ,  
  @server_name   =   N'(local)'    
  go
复制链接 网友评论 收藏本文 关闭此页
上一条: 在XP下安装SQL Server2000 清除安…  下一条: SQL触发器实例
夜鹰教程网成立于2008年,目前已经运营了将近 13 年,发布了大量关于 html5/css3/C#/asp.net/java/python/nodejs/mongodb/sql server/android/javascript/mysql/mvc/easyui/vue/echarts原创教程。 我们一直都在坚持的是:认证负责、一丝不苟、以工匠的精神来打磨每一套教程,让读者感受到作者的用心。我们默默投入的时间,确保每一套教程都是一件作品,而不是呆板的文字和视频! 目前我们推出在线辅导班试运营,模式为一对一辅导,教学工具为QQ。我们的辅导学科包括 java 、android原生开发、webapp开发、商城开发、C#和asp.net开发,winform和物联网开发、web前端开发,但不仅限于此。 普通班针对的是国内学员,例如想打好基础的大学生、想转行的有志青年、想深入学习的程序员、想开发软件的初学者或者业余爱好者等。 就业办针对即将毕业上岗的大四学生,或者打算转行的初级开发工程师。 留学生班针对的是在欧美、加拿大、澳洲、日本、韩国、新加坡等地留学的中国学子,目的是让大家熟练地掌握编程技能,按时完成老师布置的作业,并能顺利地通过考试。 详细咨询QQ:1416759661   夜鹰教程网  基于角色的权限管理系统(c-s/b-s)。
  夜鹰教程网  基于nodejs的聊天室开发视频教程
  夜鹰教程网  Git分布式版本管理视频教程
  夜鹰教程网  MVC+EasyUI视频教程
  夜鹰教程网  在线考试系统视频教程
  夜鹰教程网  MongoDB视频教程。
  夜鹰教程网 Canvas视频教程
  夜鹰教程网 报表开发视频教程
  热点推荐
牛人是怎样处理海量数据的
MYSQL与MSSQL UPDATE两表更新语法…
SQL SERVER常用日期函数的详解
随机查询ORDER BY NEWID()
批量插入数据 延时 SQL
用sql转换汉字为拼音
定时同步服务器上的数据
SQL Server 2008与SQL Server 200…
在XP下安装SQL Server2000 清除安…
SQL触发器实例
Mssql触发器学习例子之UPDATE触发…
两表连接的SQL语句
写一个HTML代码或C++代码分析器是…
分页存储过程!
普通行列转换 SQL(1)
  最近更新
SQL命令:增加字段、修改字段、修…
sql 中的 indexOf 与 lastIndexOf…
SQL中使用正则表达式提取或者过滤…
什么是BI?
Mongodb是一种比较常见的NOSQL数据…
SQL2008 提示评估期已过的解决方法…
存在属性(Directory, Compressed)…
属性不匹配directory,archive
sql2012安装图解教程
一条sql语句批量插入多条记录
sql2016下载
sql server2008 r2 密钥
sql2016安装密钥
sql2016安装图解教程
sql server 2012提示评估期已过的…

关于我们 | 网站建设 | 技术辅导 | 常见问题 | 联系我们 | 友情链接

夜鹰教程网 版权所有 www.yyjcw.com All rights reserved 备案号:蜀ICP备08011740号3