用SQL实现分布式数据复制
复制的概念
复制作为一个重要并且强大的技术,为分布式数据的存储和处理提供了有力支持。微软公司的SQL Server可以生成数据的拷贝,并能把这些数据的拷贝分发到不同的地方,自动进行数据的同步,保持所有的数据拷贝具有相同的数据。SQL Server采用一种称为“松散一致”的复制模式在两个数据库之间进行复制。这两个数据库既可以在同一台计算机上,也可以在不同的计算机上,彼此通过局域网(LAN)、广域网(WAN)进行连接。
我们公司在开发“西安市国家税务局内部网络信息系统”中,正是利用了SQL Server的复制功能,实现全西安市分布的税收数据的复制同步。西安市国家税局包括市局机关和下属的18个基层征管分局,分布于西安市不同的地理位置,彼此通过DDN专线或X.25专线连接,构成了西安国税局广域网。市局信息中心用Windows NT Server4.0 构建一个Windows NT的单主域网络环境,下属每个分局有一台运行Windows NT Server 4.0或Windows NT Server 3.51的服务器,通过广域网加入到单主域的环境中作为一台独立的服务器运行。各分局建有本分局的局域网,网络环境为Novell和Windows NT的混合网络环境。
全西安市所有的纳税人,均到指定的征管分局进行纳税登记、纳税申报。国税局用FoxPro开发了基于Novell网络环境的税收征管软件,在各分局征收大厅由Novell的无盘工作站负责税收数据的录入,写入到Novell服务器上的数个DBF文件中。由于税收征管数据分布在全市不同的征管分局,为全市范围纳税信息的检索和分析带来困难。
新系统的开发,在原有基础上,编制专门的数据转换程序,把存储于Novell服务器上的DBF文件转换到本分局Windows NT上的SQL Server数据库中。每个分局的SQL Server数据库与市局信息中心的SQL Server数据库进行复制,及时把最新的税收数据传递到市局信息中心。这样在市局信息中心,就有了全市所有税收征管数据。信息中心建立Intranet Web站点,用户的计算机只要连上各分局的局域网,或者通过Modem拨号到信息中心的RAS服务器,就可以用IE浏览器访问IIS服务器,由IIS服务器向SQL Server服务器发出数据请求并把结果按HTML格式返回给用户浏览器。
系统的设计采用客户浏览/服务器的多层结构方式,客户端采用标准的浏览器访问方式。用户在自己的计算机上安装IE浏览器(WIN98、WINNT4.0中已内置IE4浏览器),输入Web 站点地址,就可以进入该系统。
在中间层,由Internet Information Server完成大多数的用户业务规则的实现,例如对用户权限的限制、数据请求的生成等。IIS会根据不同的用户所拥有的不同的权限,生成不同的页面。将来当业务规则发生变化时,只需要在Internet Information Server上进行相应的更改,这种更改就会在系统的每一个用户下次访问系统时得到体现。
在系统的最低层,由SQL Server大型关系数据库作为支撑。西安全市的税务数据是一个以GB为单位的大型数据库,纳税数据表中的数据记录超过数百万条,在如此大量的数据中进行快速的数据检索和数据分析,一般的数据库软件是难以完成的。SQL Server关系型数据库,较好地完成了用户提出的各种数据的检索要求,同时也正是利用了SQL Server的数据复制技术,把近二十个分局的数据通过广域网复制到信息中心来,使用户能快速获取全市的纳税信息。
该系统实现的一个重要部分就是各分局税收征管数据的复制。SQL Server的复制有以下几个特点:
1.基于事务
有复制标志的事务从源数据库的事务日志读出,并送到目的数据库。例如执行了一条Insert语句使源数据库的数据发生变化,这条Insert语句会被写入到一个数据库中,我们称之为发布数据库(Distrbution)。在适当的时候,这条Insert语句会送到复制的目的数据库并执行该Insert语句,以此保证两端的数据保持同步。
2.以三种不同的方式使用服务器
(1)出版(Publication):作为源数据服务器(在本系统中是各分局的SQL Server服务器),当标志复制的表(Table)的数据发生变化时,产生该变化的事务被刻上复制标志,由日志阅读器(LogReader)把该事务送入分发数据库(Distribution Database)。这些事务寄存在分发数据库中直到被传送到目的服务器。
(2)分发(Distribution):包含有分发数据库。分发服务器接受出版服务器的更改事务,并保存到分发数据库中。在适当的时候,把这些事务送入订阅服务器。缺省情况下,分发服务器与出版服务器为同一台计算机,当然也可以是不同的计算机。
(3)订阅(Subscription):接受出版服务器的出版数据。
3.使用专用的SQL Server数据库作为复制数据的可靠队列
SQL Server的复制采用“松散一致”复制模式,其特征是源数据与拷贝数据之间并不是在任何时刻都保持完全一致,它们之间有一个延时。源数据库的变化,不是立刻反应到订阅数据库中,而是把产生变化的事务写入一个专门的分发数据库中(Distribution)。当这些事务累计到设定值时,由事务分发器(Distribution task)把事务送到订阅服务器中。订阅服务器再执行这些事务来保持源数据与拷贝数据的一致。分发数据库完成了一种缓冲的作用,当因网络或其他问题使复制不能完成时,源数据的变化会一直保存在分发数据库中直到问题解决再自动把所有保存的事务送出,并且复制两端的数据仍保持一致。这种方式使SQL Server数据的复制有极大的自适应性和可靠性,最大限度减少用户的干预。
SQL Server的复制主要组成部分有:日志阅读(Log Reader)、初始同步(Synchornization)、数据分发(Distribution)和分发数据库。
初始同步是复制真正开始执行的第一步。类似于开始传送事务前,先给源数据库照一个快照,把传送事务前的那一时刻的数据拷贝到订阅数据库。其实质就是把那时刻的数据生成BCP文件,通过网络传到订阅数据库。完成初始同步后,再开始由日志阅读初始同步以后的事务,并由数据分发过程传送分发数据库中的事务到订阅服务器中去。
复制的实现
下面我们结合在西安市国家税务局内部网络信息系统的实例,介绍SQL Server6.5的配置以及其中需要注意的事项。
复制前的准备
(1)使用一种字符集:市局和分局的SQL Server的配置使用一种字符集。
(2)允许分局服务器有足够的事务日志空间。
(3)最好设置MSSQL Service 和SQLExecutive Service Auto Start at Boot time。
复制的安装
(1)运行Microsoft SQL Enterprise Manage,在Server Manager窗口中选择源数据服务器。
(2)从Server选单选择Replication Configuration, 然后从所出现的子选单选择Install Publishing。出现Install Replication Publishing 对话框。
(3)选择Local-Install New Local Distribution Database选项(配置该服务器充当自身的分发服务器)。
在为分发数据库建立分发数据库设备时,要根据源数据的更新率估计分发数据设备的大小,尽量把分发数据库建大些。
设置出版和订阅服务器和数据库
在前面的安装分发数据库中,如果在询问是否在本次配置服务器选项对话框中,选择YES,则出现Replication-Publishing对话框。在Enable Publishin to These Servers(左边列表)目录中选择订阅的服务器,在本实例中为信息中心的SQL Server。在Publishing Database下(右边列表),选择被允许出版数据的数据库。
回到Server Manager,选择订阅服务器,从Server选单选择Replication Configuration;然后从出现的下拉选单选择Subscribing,出现Replication-Subscribing对话框。在左侧的Publishing Server框中选择源数据SQL服务器,在右侧的框内选择拷贝的数据库。
复制数据的设置
安装SQL Server复制并设置复制的服务器和数据库后,要进行出版物的设置,就是指定复制数据库中那些表要进行复制,一个出版物可以包括很多表。
从Server Manager窗口,选择源数据服务器。
从Manage选单,选择Replication,然后选择Publication对话框。
选择“NEW”,出现Edit Publications对话框。为该复制数据设置一个名字,选择要复制的表到右边的列表。
这里要注意到这样一个情况,因为我们要从多个源数据库向一个中心服务器数据库复制数据,一定要保证源数据之间不会互相影响。复制的表中要有字段定义数据的来源。
在Edit Publications对话框,选择右边列表中要复制的表,按“Edit”按钮,进入Manage Article对话框,在最下面的Restriction Clause中输入标识唯一源数据的条件。
在Manage Article对话框中,选择Scripts标签。按“Generate”按钮,出现模式源设置画面。这里需要设置初始同步的模式。在多个源数据库向一个中心数据库复制数据时,这里一定要选择“DELETE DATA Using Restriction Clause”,即是用前面的唯一标识条件对数据操作。否则会造成不同数据源的复制数据互相影响。
开发体会
SQL Server的复制被设计成最小用户干预的实现。一旦设置完成后,基本不需要用户再去进行处理。虽然初始同步时SQL Server自动进行的,但在实际应用中,广域网的连接(DDN、X.25)常常不能完成这种同步,所以需要我们手工完成初始同步,例如自己把源数据库BCP数据导出,再导入到订阅数据库中,选择初始同步的模式为No Data Synchronization。
SQL Server的复制是基于事务的。在广域网的连接速度比较慢的情况下,不要做一次更新很多记录的操作,例如一条无条件限制的UPDATE语句,在源数据库中可能影响1000条记录,但在事务传送中,会发出1000条UPDATE语句并作为一个事务传出,很容易造成复制失败。这时最好把更新的操作分解得很小,每一条更新语句都作为单独的事务传送。
适当增大分发数据库的大小,保证在网络不同的情况下,分发数据库有足够的空间保存更新操作的事务。
及时清除分发数据库。设置复制后,SQL Server会生成一个清除分发数据库的任务,负责把分发数据库中分发到订阅服务器的事务删除。但缺省情况下,清除任务是每天夜里105执行,如果你的SQL Server服务器不是24小时开机,注意把该任务调整到开机的时间范围内内执行。
对于大数据库的数据查询检索SQL语句的编写,特别是对带有GROUP一类合计的查询的使用以及多表连接,一定要注意。尽量避免GROUP后有多余两个字段的查询,把需要按多个字段分组GROUP的查询分成多次,利用中间表完成查询。适当增加temdb数据库的大小,使用一台单独的服务器作为SQL Server服务器,尽量为SQL Server分配更多的内存。例如在128M内存的配置下,为SQL Server分配100M的内存。
在微软新近推出的SQL Server 7中,数据查询的功能得到很大的加强,在多表连接、合计分组等方面都有很大的提高。SQL Server6.5中的数据复制是单向的,仅有源数据库的数据被更新到订阅数据库中。在新版本的SQL Server7中,复制已经实现了双向的复制,任何一端数据的更改,都会在另一端得到体现。SQL Server7中的复制,出版和订阅服务器可以使用不一样的代码页,这一点也较SQL Server6.5限制少了。
分享到:
相关推荐
基于SQL SERVER的分布式数据库设计与实现
详解SQL Server分布式查询
sql server2008 cdc 数据实时同步到kafka,Debezium是捕获数据实时动态变化的开源的分布式同步平台。能实时捕获到数据源(Mysql、Mongo、PostgreSql)的:新增(inserts)、更新(updates)、删除(deletes)操作,实时...
sql server中分布式查询随笔(链接服务器(sp_addlinkedserver)和远程登录映射(sp_addlinkedsrvlogin)使用
XXL-JOB是一个轻量级分布式任务...但该项目官方版的数据库使用的是mysql,里面的sql都是基于mysql写的,本人花了半天时间修改为SqlServer版的,目前测试可用没抛异常。 xxl-job-admin 版本为2.0.2 SqlServer版本为2012
SQL SERVER 分布式查询配置,包含配置工具
分布式分区视图可以将来自一个或多个SQL Server数据库中的数据连接起来。当开发一个水平分区数据库环境时,你可以使用分布式分区视图将来自不同服务器的分区表连接起来,使得这些数据看起来像来自同一个服务器。 你...
做项目用到数据库分布式查询,整理了一下上传上来,给大家分享一下数据库不在同一个服务器上查询数据,添加数据,删除数据
(1)SQL SERVER 2000 (2)配置和使用链接服务器 (3)在本地实现分布式查询
利用SQL Server和VB实现分布式历史数据的存储与查询.pdf
SQLServer分布式事务服务器的配置.doc
在SQL SERVER中使用分布式事务全攻略(图解) [原创文章] 作者:cyw 操作系统:Win2003 Enterprise Edition。 版本:5.2.3790 Service Pack 2 内部版本号 3790。 数据库:SQL Server 2000 企业版 + SP4 + SP4后的...
可扩展标记语言XML已成为当今互联网数据描述和交换的标准,也是存储网络数据的主要形式,SQLServer是微软公司领先的数据库产品,SQL Server 2005提供了非常强大的支持XML的功能。该文讨论了XML技术和SQL Server 2005...
Microsoft SQL Server 2005 Backward Compatibility Components (Microsoft SQL Server 2005 向后兼容组件) SQL Server Backward Compatibility 包中包含 最新版本的 Data Transformation Services 2000 运行时 ...
分布式系统中事务处理一直是很麻烦的事情,2019年1月阿里开源了分布式事务处理框架——seata,目前0.6.1版本开始支持集群部署,并支持多种注册中心,该资源就是分布式事务服务端所使用的数据库。
2.1.3 使用SQL Server 2008的多维数据库和数据挖掘 2.1.4 使用SQL Server 2008管理报表 2.2 规划SQL Server 2008的部署 2.2.1 建立服务器的性能系统 2.2.2 配置I/O子系统 2.2.3 确保可用性和可伸缩性 2.2.4 确保连接...
#资源达人分享计划#
【MSSQL 】SQLServer分布式集群Python自动故障转移脚本 #安装依赖 pip install pymssql #windows打包 pyinstaller -w -F mssqlScript.py ######or pyinstaller -F mssqlScript.py #windows运行 ./mssqlScript.exe ...