日期:2014-05-18  浏览次数:20590 次

关于两台服务器之间的数据相互同步问题。大家进来讨论讨论
SQL code

两台数据库服务器之间的数据进行相互同步,初步设想是这样的,大家都不妨拿出自己的意见。一起讨论讨论。。
前提:服务器:A  , B
         表:t_p,t_p
       主键:id ,  id
另外t_p都有7、8个子表。所以在同步主表数据的同时,还要同步子表数据
两表结构完全一样。两表数据都是百万级,每天以4W的速度递增。。。      

方案:
1、建立一个同步表S_p(id,statu),statu说明:1表示需要同步,0表示不需要同步,也就是已经同步过了。
2、在t_p表上建立触发器,当t_p表发生insert、update操作时,将发生变更的数据的id存入同步表中,并设置其statu为1,
3、创建同步存储过程,
CREATE PROCEDURE Up_Syn_Data
AS
BEGIN
    --定义表变量用来存储从S_p中取出来的id,这里定义表变量的目的主要是为了保持子表数据的同步,因为子表也有触发器,也有对应的同步表,为了防止同步时子表数据比主表多,所以将主表id存入表变量中。
    declare @idS table(Id uniqueidentifier)
    --将同步表中需要同步的id存入表变量中,
    insert into @idS select id from S_P where Status!=0
    begin tran

        --更改同步表中对应id的状态
        update S_P set Statu=0 from S_P a,@idS b
        where a.Id=b.Id

        ------------更新T_P表数据-------------
        --更改T_P_Order表状态,使触发器对下面所同步数据不处理
        exec Up_UpdateStatus 'T_P','1'
        --通过链接服务器往对应的T_P表中插入数据
        insert into HJZX_SYN.HJZX2.dbo.T_P    
        select b.* from @idS a left join T_P b
        on a.Id=b.Id
        --该表同步完成
        exec Up_UpdateStatus 'T_P','0'
        --------------------------------------------

                ------------更新子表T_P_Insure表数据-------------
        exec Up_UpdateStatus 'T_P_Insure','1'  --这个存储过程是为了标志该表插入数据,不需要触发。
        --通过链接服务器往对应的T_P_Insure表中插入数据
        insert into HJZX_SYN.HJZX2.dbo.T_P_Insure    
        select b.* from @idS a left join T_P_Insure b
        on a.Id=b.Id
        --该表同步完成
        exec Up_UpdateStatus 'T_P_Insure','0'
        --------------------------------------------
    下面子表同步操作一样,另外事务提交回滚等就不写了。    
end
4、创建每小时执行的作业,调用存储过程。。



------解决方案--------------------
sf,jf

------解决方案--------------------
费那劲干嘛,整成事务复制不就完了?

------解决方案--------------------
你是使用存储过程同步?
2000?
为啥不用自带的同步复制功能啦?
------解决方案--------------------
关注!
------解决方案--------------------
好像坛子里面很多吧,
帖几个给你~
如何实现两个数据库的同步?
http://topic.csdn.net/u/20080523/11/08e4624a-13d1-4a6c-a9bc-7cfdd721a351.html
如何实现两个数据库中某个表同步(两台服务器) 
http://topic.csdn.net/u/20080618/10/4c893d16-47fa-468c-9c39-0f316546d0ac.html
SQL SERVER 2005 同步复制技术 
http://topic.csdn.net/u/20080520/22/f2fc0428-6461-482e-8619-0af97bf83029.html
不同服务器数据库表同步
http://topic.csdn.net/u/20080327/10/0d810f44-55d7-47fa-ba21-eed954e1c950.html
数据库同步更新的问题(急)
http://topic.csdn.net/u/20080428/17/e91b5931-04a8-4435-94bb-380c7f819a3e.html
两数据库同步--------急!!!!!!!! 
http://topic.csdn.net/u/20080416/14/19546216-cb3e-4963-ac4f-ae5ed8a32434.html
------解决方案--------------------
探讨
哦忘说了,服务器一台是2000,一台是2005的。

------解决方案--------------------
接分~~~
雙向的沒玩過
------解决方案--------------------
SQL Server 2000订阅与发布的具体操作
同步过程
  一、准备工作,如果完成则可跳过。
  1、内网DB服务器作为发布服务器,外网DB服务器作为订阅服务器。
  发布服务器和订阅服务器上分别创建Windows用户jl,密码jl,隶属于administrators,注意要保持一致。
  2、发布服务器上创建一个共享目录,作为发布快照文件的存放目录。例如:在D盘根目录下建文件夹名为SqlCopy,设置用户jl,权限为完全控制。
  3、确定发布服务器和订阅服务器的数据库autoweb保持一致。
  4、在发布服务器和订阅服务器的SQL Server中创建用户登陆名jl,作为发布数据库autoweb的拥有者(设置为dbo_owner和public)。用户名和密码都一致。
  5、打开服务(控制面板---管理工具---服务)
  ---右击SQLSERVER AGENT---属性---登录---选择“此帐户”
  ---输入或选择第一步中创建的WINDOWS 用户jl,
  ---“密码“中输入该用户密码jl
  6、开启SQL Server 2005的网络协议TCP/IP和管道命名协议并重启网络服务。
  7、设置SQL SERVER 身份验证,解决连接时的权限问题(发布、订阅服务器均设置)
  步骤为:对象资源管理器----右击SQL实例-----属性----安全性----服务器身份验证------选“SQL Server和WINDOWS“,然后点确定。