关于两台服务器之间的数据相互同步问题。大家进来讨论讨论
- 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_DataASBEGIN --定义表变量用来存储从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' -------------------------------------------- 下面子表同步操作一样,另外事务提交回滚等就不写了。 end4、创建每小时执行的作业,调用存储过程。。
[解决办法]
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
[解决办法]
[解决办法]
接分~~~
向的玩
[解决办法]
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“,然后点确定。
8、发布服务器和订阅服务器互相注册
步骤如下:视图----单击以注册服务器----右键数据库引擎----新建服务器注册-----填写要注册的远程服务器名称------身份验证选“SQL Server验证“-----用户名(sa) 密码------创建组(也可不建)-----完成。对于只能用IP,不能用计算机名的,为其注册服务器别名
二、发布和订阅
如下工作都在发布服务器上配置,包括发布和订阅。
快照发布和订阅
1、 选择 复制 节点,右键本地发布 ----下一步---------系统弹出对话框看提示----直到“指定快照文件夹”----在“快照文件夹“中输入准备工作中创建的目录(指向步骤3所建的共享文件夹)------选择发布数据库-------选择发布类型
下一步———选择要发布的数据库autoweb中的表,将b(B)开头的表去掉,V开头的表去掉,c_开头的表去掉,t_开头的表去掉,剩下的表作为快照发布到订阅服务器上(单向传输)
根据情况决定执行发布的间隔时间,如图每天每20分钟执行一次。
下一步快照代理安全性,设置如图,连接到发布服务器用户jl,密码jl.
-------填写发布名称。
2、 选择 复制 节点,右键本地订阅,选择发布服务器-------选择订阅方式(选择推送订阅))-------填加订阅服务器--------选择代理计划(一般选择连续运行)---------其余选择默认项。
至此完成快照发布和订阅。
合并发布和订阅
1、选择如下三个表作为合并发布的对象,用于双向通讯
根据情况决定执行发布的间隔时间,如图每天每20分钟执行一次。
2、 选择 复制 节点,右键本地订阅,选择发布服务器-------选择订阅方式(选择推送订阅))-------填加订阅服务器--------选择代理计划(一般选择连续运行)---------其余选择默认项。
至此完成合并发布和订阅
-------------------------------
主要是要注意权限的问题,一般做发布/订阅,建议你做如下准备工作:
1.发布服务器,订阅服务器都创建一个同名的windows用户,并设置相同的密码,做为发布快照文件夹的有效访问用户
我的电脑
--控制面板
--管理工具
--计算机管理
--用户和组
--右键用户
--新建用户
--建立一个隶属于administrator组的登陆windows的用户
2.在发布服务器上,新建一个共享目录,做为发布的快照文件的存放目录,操作:
我的电脑--D: 新建一个目录,名为: PUB
--右键这个新建的目录
--属性--共享
--选择"共享该文件夹"
--通过"权限"按纽来设置具体的用户权限,保证第一步中创建的用户具有对该文件夹的所有权限
--确定
3.设置SQL代理(SQLSERVERAGENT)服务的启动用户(发布/订阅服务器均做此设置)
开始--程序--管理工具--服务
--右键SQLSERVERAGENT
--属性--登陆--选择"此账户"
--输入或者选择第一步中创建的windows登录用户名
--"密码"中输入该用户的密码
4.设置SQL Server身份验证模式,解决连接时的权限问题(发布/订阅服务器均做此设置)
企业管理器
--右键SQL实例--属性
--安全性--身份验证
--选择"SQL Server 和 Windows"
--确定
5.在发布服务器和订阅服务器上互相注册
企业管理器
--右键SQL Server组
--新建SQL Server注册...
--下一步--可用的服务器中,输入你要注册的远程服务器名--添加
--下一步--连接使用,选择第二个"SQL Server身份验证"
--下一步--输入用户名和密码
--下一步--选择SQL Server组,也可以创建一个新组
--下一步--完成
6.对于只能用IP,不能用计算机名的,为其注册服务器别名
(在连接端配置,比如,在订阅服务器上配置的话,服务器名称中输入的是发布服务器的IP)
开始--程序--Microsoft SQL Server--客户端网络实用工具
--别名--添加
--网络库选择"tcp/ip"--服务器别名输入SQL服务器名
--连接参数--服务器名称中输入SQL服务器ip地址
--如果你修改了SQL的端口,取消选择"动态决定端口",并输入对应的端口
[解决办法]
2005的复制弄过,但2000和2005这样不同环境的没弄过。。。
[解决办法]
[解决办法]
[解决办法]
low-key
[解决办法]
[解决办法]
[解决办法]
mark~
[解决办法]
我来个2005做个,没有死锁,也么死循环.
[解决办法]
上面的字错了
我做过2005互相复制,没有死锁,也么死循环
------解决方案--------------------
留下记号,好好学习
[解决办法]
留下记号,好好学习
[解决办法]
mark
[解决办法]
学习了
[解决办法]
[解决办法]
我有数据同步问题,但我的问题是:
要把其他局域网的几个数据库通过广域网综合到一个更大的数据库里面去.
所以我想在一边做成webservice一表调用webservice来实现同步.
只是不知道这样玩性能上能不能达到的要求,因为我的实时性要求比较高所有0.5秒就应该更新一次,数据量也就1w左右..
高手还要什么别的好方法指点下。
[解决办法]
study
[解决办法]
关注,以后可能能够用到.
[解决办法]
留下记号,好好学习
[解决办法]
先mark一下
[解决办法]
留下印记。。。。学习了
[解决办法]
学习中
[解决办法]
好像很难哦~记得解决了,把具体怎么实现的方法贴上哦~我也在做同步的事情哦~但是现在还没有头绪~
[解决办法]
留下记号,好好学习
[解决办法]
累死了没? 呵呵
[解决办法]
水了吧..
[解决办法]
我曾经做过两个服务器双向复制的,觉得自己写存储过程太恼火了!呵呵!利用数据库本身的订阅、复制功能很好啊!
[解决办法]
单向还好处理一些,一般写个存储过程能搞定
双向,还不同版本的,太搞了吧,应该主要是单向,在某些情况下双向吧
留个脚印
[解决办法]
Status!=0 --?
status <> 0 --!
[解决办法]
[解决办法]
好帖关注一下~
[解决办法]
我是来鄙视楼主的.....
[解决办法]
[解决办法]
关注一下,学习一下
[解决办法]
jf
[解决办法]
[解决办法]
你两台同步的SQL版本?
是否有这样的问题,2005 SP2修复了几个关于SQLNCLI链接服务器的几个bug.
------解决方案--------------------
Linked server是怎么配置的呢?
[解决办法]
2000里面好像也有关于远程分布式事务的hotfix,
只是没有找到哪个链接了,
你看看你的PATCH是否都是完整的.
下面这个是2005的,
FIX: 错误消息提交分布式事务包含检索数据从 SQL Server 2005 中链接服务器查询时 " 事务管理器已取消分布式事务 ":
http://support.microsoft.com/kb/937517/zh-cn
[解决办法]
我怀疑是MSDTC权限的问题哦...
两台db的登入者都设成一样,密码也设置成一致,试试。
[解决办法]
[解决办法]
那就是链接服务器有问题,
我一般都是使用图形化界面配置Linked Server,
貌似偶以前使用T-SQL配置,一次都没有成功过,
我还一直以为是我的RPWT.......
[解决办法]
关注一下.....
[解决办法]
学习.
[解决办法]
吗人口mark