本地数据库表的数据改变时服务器数据库对应的表也同时也改变
但是本地的联网状态不能确定时间,
联网时候 就把本地改变过的数据 添加到服务器数据库中。
请问 大虾们有什么好的方法啊!最好有代码··
我目前就 是用的 XML文件 读取数据 然后传到服务器,在进行读取但是发现这样做起来很麻烦

解决方案 »

  1.   

    建议步骤如下供参考,细节部分需根据实际情况补充及完善.
    1.初始化本地和服务器的数据库,使其同步.
      如backup --> restore
    2.本地写个存储过程,做成Job定时执行.
      2.1 判断本地的联网状态,如不通则退出. exec master..xp_cmdshell 'ping [服务器IP地址]'  2.2 如果是连网状态,将本地数据做差异备份. backup database xxx to disk='\\服务器名\共享文件夹\xxx.bak' with DIFFERENTIAL3.服务器写个存储过程,做成Job定时执行.
      定期判断共享文件夹里是否有未还原的bak文件,如有则进行restore. restore database xxx from disk='[共享文件夹]\xxx.bak' with norecovery
      

  2.   

    多个本地数据库的话,还是做复制(Replication)好了,也许只能用这个了.
    不熟的话建议楼主先了解一下复制的原理.
    例如本地表建复制(replication)到服务器上的表,
    初始化快照后,数据是同步的.后面每次同步数据,将本地表的变更日志(Log)传到服务器上的表去重做,
    以达到同步的目的.
      

  3.   

    补充一下,因为楼主的网络状态是不确定的,
    所以如果复制监视器有报错也是正常的,不影响实际数据的同步.
    但为了完善,可以在本地数据库的作业(Job)列表中找到同步对应的Job,
    在执行之前增加一个步骤判断当前网络状态,
    如果不通则直接退出,不执行同步以免报错.
      

  4.   

     XML是不错的,对于大数据量会很糟糕。
      

  5.   

    1 这个是标准的合并复制应用呀
    2 因为网络因素不确定,建议订阅用请求订阅(pull)方式
      

  6.   

    请教本楼,
     1.不能用合并复制吧?
       因为服务器端(S)也接收其他本地数据库(如C2)的Log,
       合并的话要将这些也同步回其他本地库(如C1)吗?楼主似乎没这个需求.
       我认为应该是各本地数据库对服务器做交易复制.
     2.请求订阅就能避免复制监视器不报错吗?
       请求订阅也跟网络有关系的呀,如果网络不通,总有一端会报错D.
      

  7.   

    1 之所以说用合并复制,是因为楼主没有交代清楚sqlserver环境,2005虽然多了可更新的事务订阅发布,但是2000只有三种发布方式 快照,事务,合并.如果楼主的本地机和服务器都是2000的环境,在不清楚楼主的库应用和更新需求的情况下,你不可能让楼主每台本地机都建事务发布吧
    2 之所以采用pull的方式,我不是说避免出错不出错的问题,而是楼主已经交代了网络环境不确定,也就是说可能随时是断网的情况下 另外也说了有不只一个本地服务器.我们来看看微软对请求订阅(pull)和推送订阅(push)的主要描述,我就不解释了
    推送订阅:   
    * 通常,数据将连续同步或按照经常重复执行的计划同步。
    * 发布要求数据近似实时地移动。
    * 分发服务器上较高的处理器开销不会影响性能。
    * 通常与快照和事务复制一起使用。
    请求订阅
    # 数据通常按需或按计划同步,而非连续同步。
    # 发布具有大量订阅服务器,并且/或在分发服务器上运行所有代理会消耗大量资源。
    # 订阅服务器是自主的、断开连接的和/或移动的。 订阅服务器将确定连接和同步更改的时间。
    # 通常与合并复制一起使用。
      

  8.   

    很谢谢各位的回答!
    大虾们给了我很多好的建议!我用的是 sqlserver 2008 
    由于 本地机器 很多,再说地方也不一样,如果要一个一个的去复制过来的话!估计是个问题。
    所以我才会想到 这个方法,由于小弟 技术有限,没能做出好的方法来,
    就想到 用xML 文件来传递数据,例子已经做出来了!
    但是遇到了 很多问题,
    就像 上面 你们提到的,网络终断,
    还有一个问题就是 如果他们同时或某些提交的话,
    数据就会 出现覆盖情况!
    所以现在很愁···
      

  9.   


    这 楼 有什么好的方法嘛!
    你的意思是 XML 可以还是不可以!
      

  10.   

    小数据量传说时无所谓.
    大数据量传送时,读取XML文件会很耗磁盘I/O的,所以不建议用.
      

  11.   

    如果 大家有什么其他方法 也可以说说,不一定要在我这个方法上去想办法,
    我在把主要功能 说一下, 我用的是 asp.net  和 sqlserver  2008.本地服务器 向 网络服务器 提交新的数据,
    1.要求每次提交的数据只需要 本地新的数据,
    2.本地服务器 联网 状态不确定,
    3,本地服务器 在100台左右,
    4,本地服务器 上传的数据量,目前不确定。因为 2 !
    目前就是这些··  
      

  12.   

    主键冲突的问题是帮不到你的,
    这是系统分析时的问题,不是SQL Server复制的问题了.
    建议先把系统规则确认清楚,确保不会冲突和重复数据了,再来配置复制.
    复制和XML,说到底只是数据库工具而已.前端程序设计也很重要.