A地为主数据库,数据量一般。B地需要访问A地的数据,主要是查询,同时会添加和修改,数据量小。B地数据要更新到A地。最好能实现同步。我想用sql的复制功能实现。复制好象分为三种:快照,事务,合并。不知道用那种好?望高手给点建议。先下100分,有好贴立马加分。

解决方案 »

  1.   

    不同服务器数据库之间的数据操作--创建链接服务器 
    exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' 
    exec sp_addlinkedsrvlogin  'ITSV ', 'false ',null, '用户名 ', '密码 ' --查询示例 
    select * from ITSV.数据库名.dbo.表名 --导入示例 
    select * into 表 from ITSV.数据库名.dbo.表名 --以后不再使用时删除链接服务器 
    exec sp_dropserver  'ITSV ', 'droplogins ' --连接远程/局域网数据(openrowset/openquery/opendatasource) 
    --1、openrowset --查询示例 
    select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) --生成本地表 
    select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) --把本地表导入远程表 
    insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) 
    select *from 本地表 --更新本地表 
    update b 
    set b.列A=a.列A 
     from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b 
    on a.column1=b.column1 --openquery用法需要创建一个连接 --首先创建一个连接创建链接服务器 
    exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' 
    --查询 
    select * 
    FROM openquery(ITSV,  'SELECT *  FROM 数据库.dbo.表名 ') 
    --把本地表导入远程表 
    insert openquery(ITSV,  'SELECT *  FROM 数据库.dbo.表名 ') 
    select * from 本地表 
    --更新本地表 
    update b 
    set b.列B=a.列B 
    FROM openquery(ITSV,  'SELECT * FROM 数据库.dbo.表名 ') as a  
    inner join 本地表 b on a.列A=b.列A --3、opendatasource/openrowset 
    SELECT   * 
    FROM   opendatasource( 'SQLOLEDB ',  'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta 
    --把本地表导入远程表 
    insert opendatasource( 'SQLOLEDB ',  'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名 
    select * from用强制订阅实现数据库同步操作 
    大量和批量的数据可以用数据库的同步机制处理:
    //
    说明:
    为方便操作,所有操作均在发布服务器(分发服务器)上操作,并使用推模式
    在客户机器使用强制订阅方式。有疑问联系作者:[email protected]测试通过
    少量数据库同步可以采用触发器实现,同步单表即可:---------------------------- 
      

  2.   

    --参考: 
    /* 
    作者:邹建 
    */ /*--同步两个数据库的示例 有数据 
    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 
    --然后创建一个作业定时调用上面的同步处理存储过程就行了 企业管理器 
    --管理 
    --SQL  Server代理 
    --右键作业 
    --新建作业 
    --"常规"项中输入作业名称 
    --"步骤"项 
    --新建 
    --"步骤名"中输入步骤名 
    --"类型"中选择"Transact-SQL  脚本(TSQL)" 
    --"数据库"选择执行命令的数据库 
    --"命令"中输入要执行的语句:  exec  p_process  
    --确定 
    --"调度"项 
    --新建调度 
    --"名称"中输入调度名称 
    --"调度类型"中选择你的作业执行安排 
    --如果选择"反复出现" 
    --点"更改"来设置你的时间安排 
    然后将SQL  Agent服务启动,并设置为自动启动,否则你的作业不会被执行 设置方法: 
    我的电脑--控制面板--管理工具--服务--右键  SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定. 
    --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 
      

  3.   

    SQL SERVER 2005 同步复制技术 以下实现复制步骤(以快照复制为例) 运行平台SQL SERVER 2005 一、准备工作: 1.建立一个 WINDOWS 用户,设置为管理员权限,并设置密码,作为发布快照文件的有效访问用户。 2.在SQL SERVER下实现发布服务器和订阅服务器的通信正常(即可以互访)。打开1433端口,在防火墙中设特例 3.在发布服务器上建立一个共享目录,作为发布快照文件的存放目录。例如:在D盘根目录下建文件夹名为SqlCopy 4.设置SQL 代理(发布服务器和订阅服务器均设置)本篇文章发表于www.xker.com(小新技术网) 打开服务(控制面板---管理工具---服务) ---右击SQLSERVER AGENT---属性---登录---选择“此帐户“ ---输入或选择第一步中创建的WINDOWS 用户 ---“密码“中输入该用户密码 5.设置SQL SERVER 身份验证,解决连接时的权限问题(发布、订阅服务器均设置) 步骤为:对象资源管理器----右击SQL实例-----属性----安全性----服务器身份验证------选“SQL Server和WINDOWS“,然后点确定 6.开启SQL Server 2005的网络协议TCP/IP和管道命名协议并重启网络服务。 7.在SQL Server中创建步骤1中对应的系统用户登陆名,作为发布数据库的拥有者(设置为dbo_owner和public)。 8.以系统超级用户sa登陆SQL Server建立数据库和表。 9.发布服务器和订阅服务器互相注册 步骤如下:视图----单击以注册服务器----右键数据库引擎----新建服务器注册-----填写要注册的远程服务器名称------身份验证选“SQL Server验证“-----用户名(sa) 密码------创建组(也可不建)-----完成。 10.对于只能用IP,不能用计算机名的,为其注册服务器别名 二、开始: 发布服务器配置(在发布服务器上配置发布和订阅) 1. 选择 复制 节点 2. 右键本地发布 ----下一步---------系统弹出对话框看提示----直到“指定快照文件夹“ ----在“快照文件夹“中输入准备工作中创建的目录(指向步骤3所建的共享文件夹)------选择发布数据库-------选择发布类型-------选择订阅服务器类型-------选择要发布的对象------设置快照代理-------填写发布名称。本篇文章发表于www.xker.com(小新技术网) 3. 右键本地订阅--------选择发布服务器-------选择订阅方式(如果是在服务器方订阅的话选择推送订阅反之 选择请求订阅)-------填加订阅服务器--------选择代理计划(一般选择连续运行)---------其余选择默认项。 至此, SQL SERVER 2005 同步复制就完成了。使用复制技术,用户可以将一份客户端的数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性,就无需编程实现客户端和服务器端数据同步了!大大提高了工作效率!
      

  4.   

    一、 准备工作
    1.在发布服务器上建立一个共享目录,作为发布快照文件的存放目录。例如:在D盘根目录下建文件夹名为Pub;
    2.设置SQL 代理(发布服务器和订阅服务器均设置)
    步骤:
    ――打开服务(控制面板---管理工具---服务)――右击SQLSERVER AGENT---属性---登录---选择“此帐户”――输入或选择第一步中创建的WINDOWS 用户“密码”中输入该用户密码;
     
    3.设置SQL SERVER 身份验证,解决连接时的权限问题(发布、订阅服务器均设置)〕步骤:
    对象资源管理器----右击SQL实例-----属性----安全性----服务器身份验证------选“SQL Server和WINDOWS”,然后点确定
    4. 开启SQL Server 2005的网络协议TCP/IP和管道命名协议并重启网络服务。
     5.在SQL Server中创建步骤1中对应的系统用户登陆名,作为发布数据库的拥有者(设置为dbo_owner和public)。 6.发布服务器和订阅服务器互相注册
     步骤:视图----单击以注册服务器----右键数据库引擎----新建服务器注册-----填写要注册的远程服务器名称------身份验证选“SQL Server验证“-----用户名(sa) 密码------创建组(也可不建)-----完成; 
    7.对于只能用IP,不能用计算机名的,为其注册服务器别名。
     二、开始
    发布服务器配置(在发布服务器上配置发布和订阅)
    1. 选择 复制 节点
    2. 右键本地发布 ----下一步-----系统弹出对话框看提示----直到“指定快照文件夹”----在“快照文件夹“中输入准备工作中创建的目录(指向步骤1所建的共享文件夹)------选择发布数据库-------选择发布类型-------选择合并发布类型(半钢条码物流系统采用的是合并复制)-------选择要发布的对象------设置快照代理-------填写发布名称。  3. 右键本地订阅--------选择发布服务器-------选择订阅方式(如果是在服务器方订阅的话选择推送订阅反之
    选择请求订阅)-------填加订阅服务器--------选择代理计划(一般选择连续运行)---------其余选择默认项。 
    至此, 半钢条码物流系统系统SQL SERVER 2005 同步复制就完成了。
    说明:使用复制技术,用户可以将一份客户端的数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性,就无需编程实现客户端和服务器端数据同步了!大大提高了工作效率!
    注意:
    启用网络 DTC 访问 
    在Windows Server 2003 SP2 上启用网络 DTC 访问和配置 Windows 防火墙的步骤:
    1. 依次单击“开始”、“运行”,键入 dcomcnfg,然后单击“确定”打开“组件服务”。
    2. 在控制台树中,依次单击展开“组件服务”、“计算机”、“我的电脑”、“分布式事务协调器”,然后单击“本地 DTC”。
    3. 右键单击“本地 DTC”,并单击“属性”以显示“本地 DTC 属性”对话框。
    4. 单击“安全”选项卡。
    5. 在“本地 DTC 属性”对话框的“安全”选项卡上设置以下选项,然后单击“确定”。
     
    配置选项 默认值          推荐值
    网络 DTC 访问 已禁用 已启用
    客户端和管理    
    允许远程客户端 已禁用 已禁用
    允许远程管理 已禁用 已禁用
    事务管理器通信     
    允许入站 已禁用 已启用
    允许出站 已禁用 已启用
    要求进行相互身份验证         已启用 在所有远程计算机运行 Win2K3 SP1、XP SP2 或更高版本时启用。
    要求对呼叫方进行身份验证         已禁用 在群集上运行 MSDTC 时启用。
    不要求任何身份验证 已禁用 在远程计算机为 Windows Server 2003 SP1 之前的版本或 Windows XP SP2 之前的版本时启用。
    启用 TIP 已禁用 在运行 BAM 门户时启用。
    启用 XA 事务 已禁用 在与基于 XA 的事务性系统进行通信时启用,例如与使用 MQSeries 适配器的 IBM WebSphere MQ 进行通信时。
    6. 依次打开“控制面板”、“Windows 防火墙”,然后单击“更改设置”以显示“Windows 防火墙设置”。
    7. 单击“例外”选项卡。
    8. 选中“分布式事务协调器”框,然后单击“确定”。
    其他注意事项
    • 请按照 http://go.microsoft.com/fwlink/?LinkId=79803 中的步骤在基于 Windows 2003 的计算机上启用网络 DTC 访问和配置 Windows 防火墙。
      

  5.   

    使用触发器实现/*  
      作者:邹建  
      */  
       
      /*--同步两个数据库的示例  
       
      有数据  
      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  
       
      

  6.   

    简单说一下3种复制的区别:
    1.快照复制:是单向复制的,就是只能从A到B同步。这种复制方式不是实时的。
    2.事务复制:是单向复制的,也是只能从A到B同步。这种复制方式是实时的。
    3.合并复制:是双向复制的,就是从A到B,从B到A都会同步。你可以根据自己的需求来选择一种复制方式。
      

  7.   

    http://blog.csdn.net/fredrickhu/archive/2009/09/20/4573837.aspxSQL 2000同步复制技术
      

  8.   

    http://blog.csdn.net/fredrickhu/archive/2009/09/20/4572176.aspx链接服务器
      

  9.   

    gip j 还是合并复制好一些吧。
      

  10.   

    http://topic.csdn.net/u/20091013/15/9f058df7-4d29-47bf-a338-b63fcab2abc0.html
    http://topic.csdn.net/u/20081231/10/624c68b9-e9b6-4c01-910f-c116bdd14c63.html?2546
      

  11.   

    可以选择合并复制、可即时更新的事务复制、可队列更新的事务复制、对等事务复制。合并复制适用于以下情况:多个订阅服务器会在不同的时间更新同一数据,并将其同步到所有的服务器上;订阅服务器需要离线更新发布数据,并在联机时将其同步到所有的服务器上;每个订阅服务器负责不同的数据分区;只需要访问到最终的数据更新结果,而不是中间状态。服务订阅的合并复制支持再发布。事务复制适用于以下情况:希望同步发布数据的更新;要求较小的同步时间延迟(要求服务器间有快速而可靠的网络连接);发布数据有频繁的更新,希望访问到数据更新过程中的每一个状态,而不是最终结果。可更新的事务复制,通过链接服务器或消息队列,允许在订阅服务器上更改发布数据-更改首先被传播回发布服务器,再传播到其他订阅服务器。与合并复制相比,可更新的事务复制只允许较少的订阅服务器,且可立即更新要求服务器间有可靠的网络连接,而可队列更新允许离线修改发布。可立即更新和可队列更新的事务复制能够进行相互切换。对等事务复制,复制拓扑中的服务器既为订阅也为发布,所有的服务器(节点)上都有相同的发布(架构和数据),可在所有的节点上更改发布;复制会考虑更改传播到节点的时间,防止更改事务在节点间循环复制。与对等事务复制相比,标准的事务复制是层级结构,更改会逐层传播。与合并复制相比,对等事务复制不支持数据过滤;同一行一次只允许在一个节点上进行更改(由用户和应用程序确保),因此不会出现复制冲突。通过应用程序的设计,可以利用对等事务复制平衡程序的查询操作,实现故障转移;对于修改操作,可以通过划分范围将修改操作应用到不同的节点上,也可以将修改操作应用到单独的节点上。对等事务复制只被 SQL SERVER 2K5 企业版支持。根据你的要求“最好能实现同步”,可使用可更新的事务复制。另外,可即时更新的事务复制和可队列更新的事务复制可以相互切换。
      

  12.   

    B访问A,查询后修改A还是B,是否相同的表?
      

  13.   

    以前回復我看了一下,具體對我的問題解決方法好象是三種吧
    1用複製
    2用存儲過程
    3用觸發器
    方法1 :好象我比較笨,配置起來會不會很麻煩?
    方法2: 存儲過程大概要設為多久執行一次? A地北京 500M的數據庫,每天新增記錄應該在1000條以內,沒有圖片之類的大字段.B地香港.
    方法3: 對我這種情況,應該要在兩邊的數據庫都要加觸發器.運行起來會不會慢?