热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

想要两台SQL2005服务器间某个表的数据每日自动同步,哪种方法比较好?

假如有两台服务器A和B,都装有Sql2005,同样有数据库DB1,同样含有表T1,只不过T1里边的数据不同。现在我想以A为准,每天凌晨一点让B里边表T1里边的数据跟A相同(可能流水号除外吧),两方
假如有两台服务器A和B,都装有Sql2005,同样有数据库DB1,同样含有表T1,只不过T1里边的数据不同。
现在我想以A为准,每天凌晨一点让B里边表T1里边的数据跟A相同(可能流水号除外吧),两方应该执行什么样的操作?
注,只是让某个表同步,而不是整个库同步,因为库里边其他表的数据是有用的。
我搜索了一下,结果有什么日志、镜像、订阅等方法,请问哪种方法比较好?
请配以详细的步骤和说明,本人新手,还不是很熟。谢谢。

13 个解决方案

#1


job 调用dts

#2


觸發器.

#3


http://topic.csdn.net/u/20081221/23/a3c0a8ed-5fe2-43b2-b403-df1420fb7959.html

#4


日志传送。

#5


创建一个作业完成更新任务,用维护计划定期执行.

#6


用JOB
企业管理器
--管理
--SQL Server代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"选择执行命令的数据库
--"命令"中输入要执行的语句:
                      update base set flag=0 where datediff(dd,date,getdate())=0

--确定
--"调度"项
--新建调度
--"名称"中输入调度名称
--"调度类型"中选择你的作业执行安排
--如果选择"反复出现"
--点"更改"来设置你的时间安排为一天一次


然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行

设置方法:
我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.

#7



--====================================================
--发布/订阅的效果最好.   
--自己写触发器同步的实时性和可控制性最好.
--====================================================


如果只是简单的数据同步,可以用触发器来实现.下面是例子:   
    
  --测试环境:SQL2000,远程主机名:xz,用户名:sa,密码:无,数据库名:test   
    
  --创建测试表,不能用标识列做主键,因为不能进行正常更新   
  --在本机上创建测试表,远程主机上也要做同样的建表操作,只是不写触发器   
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[test]')   and   OBJECTPROPERTY(id,   N'IsUserTable')   =   1)   
  drop   table   [test]   
    
  create   table   test(id   int   not   null   constraint   PK_test   primary   key   
  ,name   varchar(10))   
  go   
    
  --创建同步的触发器   
  create   trigger   t_test   on   test   
  for   insert,update,delete   
  as   
  set     XACT_ABORT   on   
  --启动远程服务器的MSDTC服务   
  exec   master..xp_cmdshell   'isql   /S"xz"   /U"sa"   /P""   /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   openrowset('sqloledb','xz';'sa';'',test.dbo.test)   
  where   id   in(select   id   from   deleted)   
  insert   into   openrowset('sqloledb','xz';'sa';'',test.dbo.test)   
  select   *   from   inserted   
  commit   tran   
  go   
    
  --插入数据测试   
  insert   into   test   
  select   1,'aa'   
  union   all   select   2,'bb'   
  union   all   select   3,'c'   
  union   all   select   4,'dd'   
  union   all   select   5,'ab'   
  union   all   select   6,'bc'   
  union   all   select   7,'ddd'   
    
  --删除数据测试   
  delete   from   test   where   id   in(1,4,6)   
    
  --更新数据测试   
  update   test   set   name=name+'_123'   where   id   in(3,5)   
    
  --显示测试的结果   
  select   *   from   test   a   full   join   
  openrowset('sqloledb','xz';'sa';'',test.dbo.test)   b   on   a.id=b.id   
    
  

#8


--另一个手工同步的,定时同步   
    
  --定时同步服务器上的数据   
    
  --例子:   
  --测试环境,SQL   Server2000,远程服务器名:xz,用户名为:sa,无密码,测试数据库:test   
  --服务器上的表(查询分析器连接到服务器上创建)   
  create   table   [user](id   int   primary   key,number   varchar(4),name   varchar(10))   
  go   
  --以下在局域网(本机操作)   
  --本机的表,state说明:null   表示新增记录,1   表示修改过的记录,0   表示无变化的记录   
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[user]')   and   OBJECTPROPERTY(id,   N'IsUserTable')   =   1)   
  drop   table   [user]   
  GO   
  create   table   [user](id   int   identity(1,1),number   varchar(4),name   varchar(10),state   bit)   
  go   
  --创建触发器,维护state字段的值   
  create   trigger   t_state   on   [user]   
  after   update   
  as   
  update   [user]   set   state=1   
  from   [user]   a   join   inserted   b   on   a.id=b.id   
  where   a.state   is   not   null   
  go   
    
  --为了方便同步处理,创建链接服务器到要同步的服务器   
  --这里的远程服务器名为:xz,用户名为:sa,无密码   
  if   exists(select   1   from   master..sysservers   where   srvname='srv_lnk')   
  exec   sp_dropserver   'srv_lnk','droplogins'   
  go   
  exec   sp_addlinkedserver     'srv_lnk','','SQLOLEDB','xz'   
  exec   sp_addlinkedsrvlogin   'srv_lnk','false',null,'sa'   
  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   
  --set     XACT_ABORT   on   
  --启动远程服务器的MSDTC服务   
  --exec   master..xp_cmdshell   'isql   /S"xz"   /U"sa"   /P""   /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   srv_lnk.test.dbo.[user]   
  where   id   not   in(select   id   from   [user])   
    
  --同步新增的数据   
  insert   into   srv_lnk.test.dbo.[user]   
  select   id,number,name   from   [user]   where   state   is   null   
    
  --同步修改的数据   
  update   srv_lnk.test.dbo.[user]   set   
  number=b.number,name=b.name   
  from   srv_lnk.test.dbo.[user]   a   
  join   [user]   b   on   a.id=b.id   
  where   b.state=1   
    
  --同步后更新本机的标志   
  update   [user]   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,   --每天   
  @freq_interval   =   1, --每天执行一次   
  @active_start_time   =   00000 --0点执行   
  go   
    

#9


job可以,也是最简单的方式了。

其他的就是麻烦一点了。

#10


领导让我少用触发器。
楼上各位,请你们说说具体步骤行吗?谢谢。

#11


引用 5 楼 qianjin036a 的回复:
创建一个作业完成更新任务,用维护计划定期执行.

支持这个。
打开SQL AGENT。
设置数据库维护计划。写插入的语句,定时。然后执行。

#12


此问题已解决,只要定时执行T-sql脚本即可。谢谢。

#13


引用 12 楼 singit5 的回复:
此问题已解决,只要定时执行T-sql脚本即可。谢谢。

lz,具体执行什么T-sql脚本,可以贴出来吗?

推荐阅读
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • vue使用
    关键词: ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
author-avatar
手机用户2502926207
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有