ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:24.46KB ,
资源ID:9768655      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9768655.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(两台SQL Server数据同步解决方案.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

两台SQL Server数据同步解决方案.docx

1、两台SQL Server数据同步解决方案两台SQL Server数据同步解决方案 复制的概念复 制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式。使用复制技术,用户可以将一份数据发布到多台服务器 上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性。SQL复制的基本元素包括出版服务器、订阅服务器、分发服务器、出版物、文章SQL复制的工作原理 SQL SERVER 主要采用出版物、订阅的方式来处理复制。源数据所在的服务器是出版服务器,负责发表数据。出版服务器把要发表的数

2、据的所有改变情况的拷贝复制到分发服务 器,分发服务器包含有一个分发数据库,可接收数据的所有改变,并保存这些改变,再把这些改变分发给订阅服务器SQL SERVER复制技术类型SQL SERVER提供了三种复制技术,分别是:1、快照复制(呆会我们就使用这个)2、事务复制3、合并复制只要把上面这些概念弄清楚了那么对复制也就有了一定的理解。接下来我们就一步一步来实现复制的步骤。第一先来配置出版服务器(1)选中指定服务器节点(2)从工具下拉菜单的复制子菜单中选择发布、订阅服务器和分发命令(3)系统弹出一个对话框点下一步然后看着提示一直操作到完成。(4)当完成了出版服务器的设置以后系统会为该服务器的树形结

3、构中添加一个复制监视器。同时也生成一个分发数据库(distribution)第二创建出版物(1)选中指定的服务器(2)从工具菜单的复制子菜单中选择创建和管理发布命令。此时系统会弹出一个对话框(3)选择要创建出版物的数据库,然后单击创建发布(4)在创建发布向导的提示对话框中单击下一步系统就会弹出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助)(5)单击下一步系统要求指定可以订阅该发布的数据库服务器类型,SQLSERVER允许在不同的数据库如 ORACLE或ACCESS之间进行数据复制。但是在这里我们选择运行SQL SERVER 200

4、0的数据库服务器(6)单击下一步系统就弹出一个定义文章的对话框也就是选择要出版的表(7)然后下一步直到操作完成。当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库。第三设计订阅(1)选中指定的订阅服务器(2)从工具下拉菜单中选择复制子菜单的请求订阅(3)按照单击下一步操作直到系统会提示检查SQL SERVER代理服务的运行状态,执行复制操作的前提条件是SQL SERVER代理服务必须已经启动。(4)单击完成。完成订阅操作。 完成上面的步骤其实复制也就是成功了。但是如何来知道复制是否成功了呢?这里可以通过这种方法来快速看是否成功。展开出版服务器下面的复制发布内容 右键发布内容属性击活

5、状态然后点立即运行代理程序接着点代理程序属性击活调度把调度设置为每一天发生,每一分钟,在0:00:00和 23:59:59之间。接下来就是判断复制是否成功了打开C:Program FilesMicrosoft SQL ServerMSSQLREPLDATAuncXIAOWANGZI_database_database下面看是不是有一些以时间做为文件名的 文件夹差不多一分中就产生一个。要是你还不信的话就打开你的数据库看在订阅的服务器的指定订阅数据库下看是不是看到了你刚才所发布的表一个手工同步的方案-定时同步服务器上的数据-例子:-测试环境,SQL Server2000,远程服务器名:xz,用户名

6、为:sa,无密码,测试数据库:test-服务器上的表(查询分析器连接到服务器上创建)create table user(id int primary key,number varchar(4),name varchar(10)go-以下在局域网(本机操作)-本机的表,state说明:null 表示新增记录,1 表示修改过的记录,0 表示无变化的记录if exists (select * from dbo.sysobjects where id = object_id(Nuser) and OBJECTPROPERTY(id, NIsUserTable) = 1)drop table userG

7、Ocreate table user(id int identity(1,1),number varchar(4),name varchar(10),state bit)go-创建触发器,维护state字段的值create trigger t_state on userafter updateasupdate user set state=1from user a join inserted b on a.id=b.idwhere a.state is not nullgo-为了方便同步处理,创建链接服务器到要同步的服务器-这里的远程服务器名为:xz,用户名为:sa,无密码if exists(

8、select 1 from master.sysservers where srvname=srv_lnk)exec sp_dropserver srv_lnk,droploginsgoexec sp_addlinkedserver srv_lnk,SQLOLEDB,xzexec sp_addlinkedsrvlogin srv_lnk,false,null,sago-创建同步处理的存储过程if exists (select * from dbo.sysobjects where id = object_id(Ndbo.p_synchro) and OBJECTPROPERTY(id, NIs

9、Procedure) = 1)drop procedure dbo.p_synchroGOcreate proc p_synchroas-set XACT_ABORT on-启动远程服务器的MSDTC服务-exec master.xp_cmdshell isql /Sxz /Usa /P /qexec master.xp_cmdshell net start msdtc,no_output,no_output-启动本机的MSDTC服务-exec master.xp_cmdshell net start msdtc,no_output-进行分布事务处理,如果表用标识列做主键,用下面的方法-BEG

10、IN DISTRIBUTED TRANSACTION-同步删除的数据delete from srv_lnk.test.dbo.userwhere id not in(select id from user)-同步新增的数据insert into srv_lnk.test.dbo.userselect id,number,name from user where state is null-同步修改的数据update srv_lnk.test.dbo.user setnumber=b.number,name=b.namefrom srv_lnk.test.dbo.user ajoin user

11、b on a.id=b.idwhere b.state=1-同步后更新本机的标志update user set state=0 where isnull(state,1)=1-COMMIT TRANgo-创建作业,定时执行数据同步的存储过程if exists(SELECT 1 from msdb.sysjobs where name=数据处理)EXECUTE msdb.dbo.sp_delete_job job_name=数据处理exec msdb.sp_add_job job_name=数据处理-创建作业步骤declare sql varchar(800),dbname varchar(25

12、0)select sql=exec p_synchro -数据处理的命令,dbname=db_name() -执行数据处理的数据库名exec msdb.sp_add_jobstep job_name=数据处理,step_name = 数据同步,subsystem = TSQL,database_name=dbname,command = sql,retry_attempts = 5, -重试次数retry_interval = 5 -重试间隔-创建调度EXEC msdb.sp_add_jobschedule job_name = 数据处理,name = 时间安排,freq_type = 4,

13、-每天freq_interval = 1, -每天执行一次active_start_time = 00000 -0点执行go 两台SQL Server数据同步解决方案 复制的概念复 制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式。使用复制技术,用户可以将一份数据发布到多台服务器 上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性。SQL复制的基本元素包括出版服务器、订阅服务器、分发服务器、出版物、文章SQL复制的工作原理 SQL SERVER 主要采用出版物、订阅

14、的方式来处理复制。源数据所在的服务器是出版服务器,负责发表数据。出版服务器把要发表的数据的所有改变情况的拷贝复制到分发服务 器,分发服务器包含有一个分发数据库,可接收数据的所有改变,并保存这些改变,再把这些改变分发给订阅服务器SQL SERVER复制技术类型SQL SERVER提供了三种复制技术,分别是:1、快照复制(呆会我们就使用这个)2、事务复制3、合并复制只要把上面这些概念弄清楚了那么对复制也就有了一定的理解。接下来我们就一步一步来实现复制的步骤。第一先来配置出版服务器(1)选中指定服务器节点(2)从工具下拉菜单的复制子菜单中选择发布、订阅服务器和分发命令(3)系统弹出一个对话框点下一步

15、然后看着提示一直操作到完成。(4)当完成了出版服务器的设置以后系统会为该服务器的树形结构中添加一个复制监视器。同时也生成一个分发数据库(distribution)第二创建出版物(1)选中指定的服务器(2)从工具菜单的复制子菜单中选择创建和管理发布命令。此时系统会弹出一个对话框(3)选择要创建出版物的数据库,然后单击创建发布(4)在创建发布向导的提示对话框中单击下一步系统就会弹出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助)(5)单击下一步系统要求指定可以订阅该发布的数据库服务器类型,SQLSERVER允许在不同的数据库如 ORAC

16、LE或ACCESS之间进行数据复制。但是在这里我们选择运行SQL SERVER 2000的数据库服务器(6)单击下一步系统就弹出一个定义文章的对话框也就是选择要出版的表(7)然后下一步直到操作完成。当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库。第三设计订阅(1)选中指定的订阅服务器(2)从工具下拉菜单中选择复制子菜单的请求订阅(3)按照单击下一步操作直到系统会提示检查SQL SERVER代理服务的运行状态,执行复制操作的前提条件是SQL SERVER代理服务必须已经启动。(4)单击完成。完成订阅操作。 完成上面的步骤其实复制也就是成功了。但是如何来知道复制是否成功了呢?这里可

17、以通过这种方法来快速看是否成功。展开出版服务器下面的复制发布内容 右键发布内容属性击活状态然后点立即运行代理程序接着点代理程序属性击活调度把调度设置为每一天发生,每一分钟,在0:00:00和 23:59:59之间。接下来就是判断复制是否成功了打开C:Program FilesMicrosoft SQL ServerMSSQLREPLDATAuncXIAOWANGZI_database_database下面看是不是有一些以时间做为文件名的 文件夹差不多一分中就产生一个。要是你还不信的话就打开你的数据库看在订阅的服务器的指定订阅数据库下看是不是看到了你刚才所发布的表一个手工同步的方案-定时同步服务

18、器上的数据-例子:-测试环境,SQL Server2000,远程服务器名:xz,用户名为:sa,无密码,测试数据库:test-服务器上的表(查询分析器连接到服务器上创建)create table user(id int primary key,number varchar(4),name varchar(10)go-以下在局域网(本机操作)-本机的表,state说明:null 表示新增记录,1 表示修改过的记录,0 表示无变化的记录if exists (select * from dbo.sysobjects where id = object_id(Nuser) and OBJECTPROP

19、ERTY(id, NIsUserTable) = 1)drop table userGOcreate table user(id int identity(1,1),number varchar(4),name varchar(10),state bit)go-创建触发器,维护state字段的值create trigger t_state on userafter updateasupdate user set state=1from user a join inserted b on a.id=b.idwhere a.state is not nullgo-为了方便同步处理,创建链接服务器到

20、要同步的服务器-这里的远程服务器名为:xz,用户名为:sa,无密码if exists(select 1 from master.sysservers where srvname=srv_lnk)exec sp_dropserver srv_lnk,droploginsgoexec sp_addlinkedserver srv_lnk,SQLOLEDB,xzexec sp_addlinkedsrvlogin srv_lnk,false,null,sago-创建同步处理的存储过程if exists (select * from dbo.sysobjects where id = object_id

21、(Ndbo.p_synchro) and OBJECTPROPERTY(id, NIsProcedure) = 1)drop procedure dbo.p_synchroGOcreate proc p_synchroas-set XACT_ABORT on-启动远程服务器的MSDTC服务-exec master.xp_cmdshell isql /Sxz /Usa /P /qexec master.xp_cmdshell net start msdtc,no_output,no_output-启动本机的MSDTC服务-exec master.xp_cmdshell net start msd

22、tc,no_output-进行分布事务处理,如果表用标识列做主键,用下面的方法-BEGIN DISTRIBUTED TRANSACTION-同步删除的数据delete from srv_lnk.test.dbo.userwhere id not in(select id from user)-同步新增的数据insert into srv_lnk.test.dbo.userselect id,number,name from user where state is null-同步修改的数据update srv_lnk.test.dbo.user setnumber=b.number,name=b

23、.namefrom srv_lnk.test.dbo.user ajoin user b on a.id=b.idwhere b.state=1-同步后更新本机的标志update user set state=0 where isnull(state,1)=1-COMMIT TRANgo-创建作业,定时执行数据同步的存储过程if exists(SELECT 1 from msdb.sysjobs where name=数据处理)EXECUTE msdb.dbo.sp_delete_job job_name=数据处理exec msdb.sp_add_job job_name=数据处理-创建作业步

24、骤declare sql varchar(800),dbname varchar(250)select sql=exec p_synchro -数据处理的命令,dbname=db_name() -执行数据处理的数据库名exec msdb.sp_add_jobstep job_name=数据处理,step_name = 数据同步,subsystem = TSQL,database_name=dbname,command = sql,retry_attempts = 5, -重试次数retry_interval = 5 -重试间隔-创建调度EXEC msdb.sp_add_jobschedule job_name = 数据处理,name = 时间安排,freq_type = 4, -每天freq_interval = 1, -每天执行一次active_start_time = 00000 -0点执行go

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1