1、两台SQL Server数据同步解决方案 本帖隐藏的内容需要回复才可以浏览 两台SQL Server数据同步解决方案 " T( T! V8 \- a% l+ E神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA复制的概念 复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式。使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数
2、据的一致性。 3 ^5 f7 }& E" w0 g5 B, j神州数码企业管理系统用户俱乐部SQL复制的基本元素包括 $ f$ C. H# m% V7 x& @: z" S神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA出版服务器、订阅服务器、分发服务器、出版物、文章神州数码企业管理系统用户俱乐部, \: D( N" N6 g& L+ P SQL复制的工作原理 : C4 j1 g5 V) @& J! J神州数码企业管理系统用户俱乐部SQL SERVER 主要采用出版物、订阅的方式来处
3、理复制。源数据所在的服务器是出版服务器,负责发表数据。出版服务器把要发表的数据的所有改变情况的拷贝复制到分发服务器,分发服务器包含有一个分发数据库,可接收数据的所有改变,并保存这些改变,再把这些改变分发给订阅服务器 7 R$ y. G4 ]! P+ \SQL SERVER复制技术类型; f9 Z1 u( U3 L, n$ C SQL SERVER提供了三种复制技术,分别是: 4 H9 u$ y( Q3 }) c& 1、快照复制(呆会我们就使用这个)神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,B
4、PM,BI,OA, B0 F) L0 `# o 2、事务复制 . p+ ^: }6 y- c8 O9 W+ I" E 3、合并复制 7 N% M: ?" u9 F- t- l神州数码管理系统用户俱乐部,DCMS,ERP,易飞ERP,易拓ERP,易助ERP,易飞普及,OA高端,SAP高端咨询,工作流,电子商务,SCM,PDM,DCEAI,BI,OA只要把上面这些概念弄清楚了那么对复制也就有了一定的理解。接下来我们就一步一步来实现复制的步骤。 $ D4 O4 t" [/ a% `神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow
5、),PDM,CRM,SCM,BPM,BI,OA 第一先来配置出版服务器 . N. ?, K. ?8 b& L5 q4 e神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA (1)选中指定[服务器]节点 0 o' r: m0 U, f; D J+ W/ z神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA (2)从[工具]下拉菜单的[复制]子菜单中选择[发布、订阅服务器和分发]命令
6、 % {& a6 }1 `5 U7 U5 X, }2 e( N神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA (3)系统弹出一个对话框点[下一步]然后看着提示一直操作到完成。神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA. [( C- h0 ~+ @$ ~ (4)当完成了出版服务器的设置以后系统会为该服务器的树形结构中添加一个复制监视  
7、 器。同时也生成一个分发数据库(distribution) ! R; X* `- t! c, v$ u; i |神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA 第二创建出版物 - a: L9 d4 R5 E (1)选中指定的服务器神州数码管理系统用户俱乐部,DCMS,ERP,易飞ERP,易拓ERP,易助ERP,易飞普及,OA高端,SAP高端咨询,工作流,电子商务,SCM,PDM,DCEAI,BI,OA# c" g0 Y9 f M& f (2)从[工具]菜单的[复制]子
8、菜单中选择[创建和管理发布]命令。此时系统会弹出一个对话框 ) d q8 d# P( Q; x: {: b神州数码企业管理系统用户俱乐部 (3)选择要创建出版物的数据库,然后单击[创建发布]神州数码企业管理系统用户俱乐部* @. s0 Z; [1 C3 J7 A9 ^" @1 O (4)在[创建发布向导]的提示对话框中单击[下一步]系统就会弹出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助) # j8 K4 V# C5 @5 Y7 b3 H神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星
9、工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA (5)单击[下一步]系统要求指定可以订阅该发布的数据库服务器类型,SQLSERVER允许在不同的数据库如 ORACLE或ACCESS之间进行数据复制。但是在这里我们选择运行"SQL SERVER 2000"的数据库服务器 * r7 B$ t( Q$ e1 b$ s神州数码企业管理系统用户俱乐部 (6)单击[下一步]系统就弹出一个定义文章的对话框也就是选择要出版的表 * r3 b0 B$ r* s1 (7)然后[下一步]直到操作完成。当完成出版物的创建后创建出版物的数据库也就变成了一个共享数
10、据库。神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA& v7 {% l, e2 x [9 i 第三设计订阅神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA. E, m. M* j' q$ _ (1)选中指定的订阅服务器神州数码管理系统用户俱乐部,DCMS,ERP,易飞ERP,易拓ERP,易助ERP,易飞普及,OA高端,SAP高端咨询,工作流,电子商务,SCM,PDM,DCE
11、AI,BI,OA* S9 L1 s+ {0 {! p( J# A (2)从[工具]下拉菜单中选择[复制]子菜单的[请求订阅]9 p1 K( M, u: U: c2 S |3 ` (3)按照单击[下一步]操作直到系统会提示检查SQL SERVER代理服务的运行状态,执行复制操作的前提条件是SQL SERVER代理服务必须已经启动。/ c5 ?9 \) p+ m( G$ B (4)单击[完成]。完成订阅操作。神州数码企业管理系统用户俱乐部% `' n& s, [1 a7 l& k0 O/ G4 _- D/ A 完成上面的步骤其实复制也就是成功了。但是如何来知道复制是否成功了呢
12、这里可以通过这种方法来快速看是否成功。展开出版服务器下面的复制——发布内容——右键发布内容——属性——击活——状态然后点立即运行代理程序接着点代理程序属性击活调度把调度设置为每一天发生,每一分钟,在0:00:00和23:59:59之间。接下来就是判断复制是否成功了打开C:\Program Files\Microsoft SQL Server\MSSQL\REPLDATA\unc\XIAOWANGZI_database_database下面看是不是有一些以时间做为文件名的文件夹差不多一分中就产生一个。要是你还不信的话就打开你的数据库看在订阅的服务器的指定订阅数据库下看是不是看到了你刚才所发布的
13、表— }. e. J. m4 q& r, i8 @$ C% a 一个手工同步的方案神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA% D* d! {1 b7 o) J) J& ` --定时同步服务器上的数据神州数码企业管理系统用户俱乐部" e0 u2 R& J" P/ K6 M. U --例子:神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA* `* [ {$ _.
14、Y' C9 U, p# ?+ E --测试环境,SQL Server2000,远程服务器名:xz,用户名为:sa,无密码,测试数据库:test y; {- Z. l4 ] --服务器上的表(查询分析器连接到服务器上创建)- o1 R& i- Z8 Z& U! } create table [user](id int primary key,number varchar(4),name varchar(10))神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA/ f1 w:
15、c2 D5 m' E# f go神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA+ M; h. R: n/ I9 L1 ~$ ~ --以下在局域网(本机操作) 9 N" H, p' c- i: |6 --本机的表,state说明:null 表示新增记录,1 表示修改过的记录,0 表示无变化的记录 % _8 h& k2 d* S6 N if exists (select * from dbo.sysobjects where id = object_id(N'[u
16、ser]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) 7 i$ W. G$ e$ V+ N% G' drop table [user]神州数码管理系统用户俱乐部,DCMS,ERP,易飞ERP,易拓ERP,易助ERP,易飞普及,OA高端,SAP高端咨询,工作流,电子商务,SCM,PDM,DCEAI,BI,OA2 A: i# E% G& ]8 l2 O9 a2 B GO神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,
17、OA- }; O* D0 z# s1 Z$ m create table [user](id int identity(1,1),number varchar(4),name varchar(10),state bit) 9 h- A) T/ E) }% o神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA go神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA9 L! i U$
18、q0 p3 x) p: s --创建触发器,维护state字段的值神州数码企业管理系统用户俱乐部- J' U1 z0 s, \& F create trigger t_state on [user] + j x$ y" W+ }; h' h- l# P3 q6 S神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA after update# P+ o3 ~- z7 m8 g; V2 g as神州数码企业管理系统用户俱乐部% N7 \) c# S% J1 k upd
19、ate [user] set state=$ J. f r9 l ~: h# P `1 c from [user] a join inserted b on a.id=b.id ( h+ b2 c, c" y- S% U9 `神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA where a.state is not null神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA4
20、 _, a: F1 ~; X- K4 E go U; X/ K7 d5 q9 e% N神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA --为了方便同步处理,创建链接服务器到要同步的服务器( Z, S# \4 d' a: [3 }& l5 w --这里的远程服务器名为:xz,用户名为:sa,无密码 ) [* l& I! i) G7 u( q C, [3 T! ^ if exists(select 1 from master..sysservers where srv
21、name='srv_lnk')神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA* B, J4 g- ^% W f# b/ L, z exec sp_dropserver 'srv_lnk','droplogins'% \$ C. ^7 w! U' O/ k go神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA i7 T" C.
22、 h2 n" Q$ J exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','xz'神州数码管理系统用户俱乐部,DCMS,ERP,易飞ERP,易拓ERP,易助ERP,易飞普及,OA高端,SAP高端咨询,工作流,电子商务,SCM,PDM,DCEAI,BI,OA* @- e6 D9 [. c5 L( ?+ W, ` exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa' ) j'
23、 p$ }' i# R6 S/ H神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA go神州数码企业管理系统用户俱乐部/ S- q, G( f; Y+ T& p8 Y --创建同步处理的存储过程神州数码管理系统用户俱乐部,DCMS,ERP,易飞ERP,易拓ERP,易助ERP,易飞普及,OA高端,SAP高端咨询,工作流,电子商务,SCM,PDM,DCEAI,BI,OA4 {0 A/ c/ F5 l9 R5 F6 u: f' Q if exists (select * from d
24、bo.sysobjects where id = object_id(N'[dbo].[p_synchro]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)神州数码管理系统用户俱乐部,DCMS,ERP,易飞ERP,易拓ERP,易助ERP,易飞普及,OA高端,SAP高端咨询,工作流,电子商务,SCM,PDM,DCEAI,BI,OA1 H+ N. M, K( m1 C3 a drop procedure [dbo].[p_synchro] " `! r& w- X% r9 ?; X( V神州数码企业管理系统用户俱乐
25、部 GO 4 i1 w+ E7 t+ x% w1 V& S6 {% P神州数码企业管理系统用户俱乐部 create proc p_synchro " C1 V; C1 G' Q& P5 f3 as神州数码企业管理系统用户俱乐部. _. R# O+ }! [6 c3 p- l/ V: W --set XACT_ABORT on神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA: i2 l/ q6 z. W --启动远程服务器的MSDTC服务 4 X2 y4 G# I-
26、I% W! Y神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA --exec master..xp_cmdshell 'isql /S"xz" /U"sa" /P"" /q"exec master..xp_cmdshell ''net start msdtc'',no_output"',no_output神州数码管理系统用户俱乐部,DCMS,ERP,易飞ERP,易
27、拓ERP,易助ERP,易飞普及,OA高端,SAP高端咨询,工作流,电子商务,SCM,PDM,DCEAI,BI,OA* F' G, z) j( l' j; {$ @, R" e --启动本机的MSDTC服务! p. o) h8 t3 ?3 S/ C( i+ C6 _* ^6 y --exec master..xp_cmdshell 'net start msdtc',no_output 6 n' F# x( W8 T3 m3 U: Y神州数码企业管理系统用户俱乐部 --进行分布事务处理,如果表用标识列做主键,用下面的方法 ' z9 |: ^0 j* u- c6
28、@3 ~' z神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA --BEGIN DISTRIBUTED TRANSACTION + z6 @. J! g& i; f神州数码企业管理系统用户俱乐部 --同步删除的数据 8 B, u5 n, ~' Y% Z+ V神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA delete from srv_lnk.test.dbo.[user]
29、4 C- s1 R. r/ s( i( S6 d3 p神州数码企业管理系统用户俱乐部 where id not in(select id from [user]) ' e/ B0 p1 J) Y3 T2 b8 N6 l神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA --同步新增的数据神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA$ m4 V( l7 i7 t, s/ H i
30、nsert into srv_lnk.test.dbo.[user]神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA3 l; V# s. Z/ @# S4 Y select id,number,name from [user] where state is null神州数码企业管理系统用户俱乐部; T! n$ \7 x Q5 D; e% S --同步修改的数据 ' K) b8 v! ?# m. y神州数码管理系统用户俱乐部,DCMS,ERP,易飞ERP,易拓ERP,易助ERP
31、易飞普及,OA高端,SAP高端咨询,工作流,电子商务,SCM,PDM,DCEAI,BI,OA update srv_lnk.test.dbo.[user] set % e( s" G. O$ }神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA number=b.number,name=b.name ' v" V* `8 t9 x w9 P4 I8 d+ G神州数码管理系统用户俱乐部,DCMS,ERP,易飞ERP,易拓ERP,易助ERP,易飞普及,OA高端,SAP高端咨询,工作流,
32、电子商务,SCM,PDM,DCEAI,BI,OA from srv_lnk.test.dbo.[user] a - l" s3 ]" y" x1 p. s- U神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA join [user] b on a.id=b.id神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA* }# i4 [$ [8 [5 D/ `# C where b.st
33、ate=1神州数码管理系统用户俱乐部,DCMS,ERP,易飞ERP,易拓ERP,易助ERP,易飞普及,OA高端,SAP高端咨询,工作流,电子商务,SCM,PDM,DCEAI,BI,OA( J0 z+ I! n% X% h( W- O. M: V) t --同步后更新本机的标志神州数码管理系统用户俱乐部,DCMS,ERP,易飞ERP,易拓ERP,易助ERP,易飞普及,OA高端,SAP高端咨询,工作流,电子商务,SCM,PDM,DCEAI,BI,OA: Q) A5 Q' r6 ^! @4 G1 i' c update [user] set state=0 where isnull(st
34、ate,1)=1神州数码企业管理系统用户俱乐部% k& h* l+ B4 y( b5 ?- c --COMMIT TRAN神州数码企业管理系统用户俱乐部+ k; b, |$ ?, k- Q8 e. k go T m! v7 G: r; V4 D. u. n神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA --创建作业,定时执行数据同步的存储过程神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,S
35、CM,BPM,BI,OA; |. u7 _/ } u if exists(SELECT 1 from msdb..sysjobs where name='数据处理')神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA! S) X2 K" Q" H" m K% F EXECUTE msdb.dbo.sp_delete_job @job_name='数据处理' 0 E3 N- P6 F/ I1 Y7 h8 Z; x2 D exec msdb..s
36、p_add_job @job_name='数据处理' 5 T/ E7 ^6 e {6 ]4 A8 ] --创建作业步骤神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA" n$ r$ k$ X; r declare @sql varchar(800),@dbname varchar(250) . h5 O5 d9 I8 v, T0 h. ] select @sql='exec p_synchro' --数据处理的命令神州数码企业管理系统用户俱乐部
37、 _0 i& ?2 ?/ ^. J- F: i6 G9 a$ B ,@dbname=db_name() --执行数据处理的数据库名 ; t, W4 [- }! g0 A: O4 p$ exec msdb..sp_add_jobstep @job_name='数据处理', : d2 R' \8 {* z8 u1 U/ @step_name = '数据同步',神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA' K" v1 T% V" m( A0
38、 { @subsystem = 'TSQL',神州数码管理系统用户俱乐部,DCMS,ERP,易飞ERP,易拓ERP,易助ERP,易飞普及,OA高端,SAP高端咨询,工作流,电子商务,SCM,PDM,DCEAI,BI,OA; K# r8 D5 t0 ^! A6 c% _8 ` @database_name=@dbname, : ?. q3 S3 Z+ V; |, K8 F @command = @sql,神州数码企业管理系统用户俱乐部- k! V3 i) O, p# |6 {& e1 F5 K/ u+ ~ @retry_attempts = 5, --重试次
39、数. l/ ]1 k& y" C% e5 w& u1 s @retry_interval = 5 --重试间隔4 V* w8 n# g0 {! N; ?: L( B, [6 @, n --创建调度神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA; e8 D7 `& R% M5 G- }9 c6 Q( C1 ] EXEC msdb..sp_add_jobschedule @job_name = '数据处理'," J& T* g( A0 R# H @nam
40、e = '时间安排', @* D4 r; s0 _. c @freq_type = 4, --每天神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA6 c( x7 \4 m" E" i0 L. B @freq_interval = 1, --每天执行一次( w; _2 }$ s: e5 Q @active_start_time = 00000 --0点执行神州数码(DCMS)易拓(TIPTOP),易飞(WorkFlow),易助,企明星,工作流(EasyFlow),PDM,CRM,SCM,BPM,BI,OA" } O1 k) L# f0 q1 s go






