MSSQL数据同步利用数据库复制技术实现数据同步更新1

上传人:ni****g 文档编号:489979641 上传时间:2022-08-08 格式:DOCX 页数:3 大小:12.62KB
返回 下载 相关 举报
MSSQL数据同步利用数据库复制技术实现数据同步更新1_第1页
第1页 / 共3页
MSSQL数据同步利用数据库复制技术实现数据同步更新1_第2页
第2页 / 共3页
MSSQL数据同步利用数据库复制技术实现数据同步更新1_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《MSSQL数据同步利用数据库复制技术实现数据同步更新1》由会员分享,可在线阅读,更多相关《MSSQL数据同步利用数据库复制技术实现数据同步更新1(3页珍藏版)》请在金锄头文库上搜索。

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

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

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

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

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

6、服务器名:xz,用户名为:sa,无密码,测试数据库:test-服务器上的表(查询分析器连接到服务器上创建)createtableuser(idintprimarykey,numbervarchar(4),namevarchar(10) go-以下在局域网(本机操作)-本机的表,state说明:null表示新增记录,1表示修改过的记录,0表示无变化的记录ifexists(select*fromdbo.sysobjectswhereid=object_id(Nuser)andOBJECTPROPERTY(id,NIsUserTable)=1) droptableuserGOcreatetableu

7、ser(idintidentity(1,1),numbervarchar(4),namevarchar(10),statebit)go-创建触发器,维护state字段的值createtriggert_stateonuserafterupdateasupdateusersetstate=1fromuserajoininsertedbona.id=b.idwherea.stateisnotnullgo-为了方便同步处理,创建链接服务器到要同步的服务器-这里的远程服务器名为:xz,用户名为:sa,无密码ifexists(select1frommaster.sysserverswheresrvname

8、=srv_lnk)execsp_dropserversrv_lnk,droploginsgoexecsp_addlinkedserversrv_lnk,SQLOLEDB,xzexecsp_addlinkedsrvloginsrv_lnk,false,null,sago-创建同步处理的存储过程ifexists(select*fromdbo.sysobjectswhereid=object_id(Ndbo.p_synchro)andOBJECTPROPERTY(id,NIsProcedure)=1)dropproceduredbo.p_synchroGOcreateprocp_synchroas-

9、setXACT_ABORTon-启动远程服务器的MSDTC服务-execmaster.xp_cmdshellisql/Sxz/Usa/P/qexecmaster.xp_cmdshellnetstartmsdtc”,no_output,no_output-启动本机的MSDTC服务-execmaster.xp_cmdshellnetstartmsdtc,no_output-进行分布事务处理,如果表用标识列做主键,用下面的方法-BEGINDISTRIBUTEDTRANSACTION-同步删除的数据deletefromsrv_lnk.test.dbo.userwhereidnotin(selectid

10、fromuser)-同步新增的数据insertintosrv_lnk.test.dbo.userselectid,number,namefromuserwherestateisnull-同步修改的数据updatesrv_lnk.test.dbo.userset number=b.number,name=b.name fromsrv_lnk.test.dbo.usera joinuserbona.id=b.idwhereb.state=1-同步后更新本机的标志updateusersetstate=0whereisnull(state,1)=1 -COMMITTRANgo-创建作业,定时执行数据同

11、步的存储过程ifexists(SELECT1frommsdb.sysjobswherename=数据处理) EXECUTEmsdb.dbo.sp_delete_jobjob_name=数据处理 execmsdb.sp_add_jobjob_name=数据处理-创建作业步骤declaresqlvarchar(800),dbnamevarchar(250) selectsql=execp_synchro-数据处理的命令 ,dbname=db_name()-执行数据处理的数据库名 execmsdb.sp_add_jobstepjob_name=数据处理, step_name=数据同步,subsystem=TSQL,database_name=dbname,command=sql, retry_attempts=5,-重试次数 retry_interval=5-重试间隔 -创建调度EXECmsdb.sp_add_jobschedulejob_name=数据处理, name=时间安排,freq_type=4,-每天freq_interval=1,-每天执行一次 active_start_time=00000-0 点执行go

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号