zoukankan      html  css  js  c++  java
  • sql2000和sql2005数据同步代码

    前提:有两个服务器,分别是sql2000和sql2005,两个中都含有一个叫test的数据库,且里面的数据表和结构都是完全相同

    1,首先添加我的做法是在server1上建立一个链接服务器,直接指向到server2,

    我是在sql2000上建立一个链接服务器,指向sql2005,方便在sql2000服务器上直接操作sql2005

    exec   sp_addlinkedserver     'srv2','','SQLOLEDB','srv2的sql实例名或ip'  
    exec   sp_addlinkedsrvlogin   'srv2','false',null,'用户名','密码'  
    go 

    这样我们就可以用 srv2.库名.dbo.表名  来操作sql2005服务器了

    2,启动   msdtc(分布式事务处理服务)

    我的电脑--控制面板--管理工具--服务--右键   Distributed   Transaction   Coordinator--属性--启动--并将启动类型设置为自动启动 

    3,实现数据同步,有2中方法

        1,触发器

        2,存储过程加事务

       触发器

    --新增同步
    --id为主键,自增
    create   trigger   tr_insert_A   on   A  
      for   insert  
      as  
      set   xact_abort   on  
      insert   srv2.库名.dbo.A(a,b,c,)  
      select   a,b,c   from   inserted  
      go  
    
      
        
      --修改同步  
      create   trigger   tr_update_A   on   A 
      for   update  
      as  
      set   xact_abort   on  
      update   b   set   a=i.a,b=i.b,c=i.c
      from   srv2.库名.dbo.A   b,inserted   i  
      where   b.id=i.id  
      go  
        
      --删除同步  
      create   trigger   tr_delete_A   on   A
      for   delete  
      as  
      set   xact_abort   on  
      delete   b    
      from   srv2.库名.dbo.A   b,deleted   d  
      where   b.id=d.id  
      go  

     存储过程加事务

    --存储过程
    create   proc   p_process    
      as  
      --更新修改过的数据  
      update   b   set   bill_num=i.bill_num,receipt_num=i.receipt_num,sheet_id=i.sheet_id,discount,meals,All_money,income,zhushi,notes,addtime  
      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--属性--启动类型--选择"自动启动"--确定. 

    ps.

      触发器同步数据比较快速,但是会使网站变慢,

     而存储过程加事务的方式同步数据不是很及时,但是可以把执行时间设定在网站流量少的时候,不会影响网站的反应速度

  • 相关阅读:
    Android学习笔记_10_ContentProvider内容提供者的使用
    Android学习笔记_9_SQLiteOpenHelper对象之数据库增删改查以及事务回滚操作
    Android学习笔记_8_使用SharedPreferences存储数据
    Android学习笔记_7_使用 sax 或者 dom 或者 pull 解析XML文件
    Android学习笔记_6_保存文件到SDCard
    java GZIP 压缩数据
    struts2 实现文件下载方法汇总
    javascript ActiveXObject FileSystemObject 对象,创建、复制、删除、读取文件等
    css块元素的 display 属性 inline-block 的应用
    javascript操作Date对象
  • 原文地址:https://www.cnblogs.com/be-down-to-earth/p/3171943.html
Copyright © 2011-2022 走看看