灾后异地重建数字化校园SQL数据库同步研究
2012-04-29李焕玲
李焕玲
摘要:针对存在的业务逻辑不同,数据库建设没有统一标准的众多业务子系统,以SQL Server数据库为主,从两层混合同步和N层混合同步体系出发,通过设置节点、描述作用域和表、设置服务器、设置客户端、设置同步选项等方法进行SQL数据库同步研究,通过数据库同步,建立统一的数据中心,搭建了信息资源共享平台,形成了比较完整的数据链,优化了业务流程,并实现了可定制的综合查询。
关键词:数字化校园;数据库;同步体系;SQL
中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)02-0252-03
Post-disaster Reconstruction of Digital Campus off-site Synchronization of SQL Database
LI Huan-ling
(Sichuan Information Technology College, Guangyuan 628017, China)
Abstract: Different for the existing business logic, database development is no uniform standard of the many business subsystem to the SQL Server database, and from two composite sync and N-tier system sync of the starting mixture, by setting the node, and tables describe the? scope, set up the server, set the client, set the synchronization options and other methodsto study SQL database synchronization, database synchronization through the establishment of a unified data center, set up an information sharing platform, forming arelatively complete da? ta chain, optimize business processes, and achieve a customizableintegrated query.
Key words: digital campus; database; synchronization system; SQL
5.12汶川大地震给四川信息职业技术学院造成了重大损失,学院《灾后恢复重建规划》已经国家发改委等11部委(局)以《汶川地震灾后恢复重建公共服务设施建设专项规划》(发改厅(2008)2667号)文正式批准下达。学院灾后重建项目在广元教育发展规划园区征地403亩,概算总投资3.2亿元,其中中央重建基金投入26681万元,规划建筑面积106150平方米。
学院老校区经过长时间的信息化建设,内部己形成多个业务子系统,但各系统的业务逻辑不同,在数据库的建设上没有遵循统一的标准,而且这些系统之间又常常需要进行数据交换和同步。
1数据库同步的体系结构
同步会话的所有组件都驻留在本地计算机上,并且没有从本地计算机到远程计算机上的数据库的直接连接。在同步会话过程中,本地计算机是发起同步的计算机[1]。如果要从多台计算机发起同步,每台计算机必须包含图中显示的所有组件。两层混合同步拓扑图如图1示。
图1两层混合同步拓扑图
N层体系结构:需要附加的组件,包括远程计算机上的组件;并且与远程数据库的连接现在由本地计算机上的代理和远程计算机上的服务处理。该代理和服务必须由应用程序开发人员实现。N层混合同步拓扑图如图2示。
2 SQL数据库同步
2.1设置节点和执行同步
图2 N层混合同步拓扑图
在拓扑中同步节点可划分为两个阶段:设置要同步的节点,以及在一对节点之间实际执行同步。对于SqlSyncProvider和SqlCe? SyncProvider,设置节点由两个任务构成:
2.1.1定义要同步的内容
通过描述一个或多个“作用域”来定义要同步的内容。作用域是表的集合,其中某些表或全部表可以筛选[2]。表可以已存在于数据库中,也可以通过使用Sync Framework对象描述表,然后在同步基础存储区时在运行时生成它们。在首次同步某一作用域时,如果需要变更某一作用域,则与现有作用域相关联的元数据应删除后重新创建。
2.1.2为Sync Framework变更跟踪设置数据库
在描述了表和作用域后,使用Sync Framework对象将设置脚本应用于各节点。这些脚本创建变更跟踪和变更应用基础结构,该基础结构由元数据表、触发器和存储过程构成。
在设置节点后,可以同步这些节点。在后台,Sync Framework使用指定的作用域和表说明信息为每个作用域和每个同步适配器(每个表一个)生成配置对象[3-4]。这使得Sync Framework可以利用在各个数据库中持久保留的信息并为一对节点之间的每个同步会话生成它所需的信息。SqlSyncProvider和SqlCeSyncProvider都知道在设置过程中创建的变更跟踪表和其他对象,并且它们自动生成所需的DbSyncAdapter对象。这将大为减少使用这些提供程序同步数据所需的代码。
2.2描述作用域和表
描述名为filtered_customer的一个作用域,并且将两个表添加到该作用域:Customer和CustomerContact。这两个表已存在于服务器数据库中,因此,使用GetDescriptionForTable方法从服务器数据库中检索架构,将包括来自Customer表的所有列,但只包括来自CustomerContact表的两列。代码如下:
Dim scopeDesc As New DbSyncScopeDescription("filtered_customer")
Definition for Customer.
Dim customerDescription As DbSyncTableDescription = _
SqlSyncDescriptionBuilder.GetDescriptionForTable("Sales.Customer", serverConn)
scopeDesc.Tables.Add(customerDescription)
Definition for CustomerContact, including the list of columns to include.
Dim columnsToInclude As New Collection(Of String)()
columnsToInclude.Add("CustomerId")
columnsToInclude.Add("PhoneType")
Dim customerContactDescription As DbSyncTableDescription = _
SqlSyncDescriptionBuilder.GetDescriptionForTable("Sales.CustomerContact", columnsToInclude, serverConn)
scopeDesc.Tables.Add(customerContactDescription)
2.3设置服务器
为filtered_customer作用域创建一个设置对象,并且指定与同步相关的所有对象都应在名为"Sync"的数据库架构中创建。作为作用域设置的一部分,将对Customer表定义一个筛选器。将只同步与该筛选器匹配的行[5]。用于定义筛选器的代码要求两个部分。对AddFilterColumn的调用指定CustomerType列用于筛选并且它必须添加到用于跟踪对Customer表的变更的跟踪表中。对Fil? terClause的调用指定该筛选器本身。筛选子句是不带WHERE关键字的WHERE子句。[side]别名是该跟踪表的别名。没有对Cus? tomerContact表定义任何筛选器;因此,将同步来自该表的所有行。在定义设置选项后,调用Apply方法以便在服务器数据库中创建变更跟踪基础结构;并且设置脚本将写入某一文件。代码如下:
Dim serverConfig As New SqlSyncScopeProvisioning(serverConn, scopeDesc)
serverConfig.ObjectSchema = "Sync"
Specify which column(s) in the Customer table to use for filtering data,
and the filtering clause to use against the tracking table.
"[side]" is an alias for the tracking table.
serverConfig.Tables("Sales.Customer").AddFilterColumn("CustomerType")
serverConfig.Tables("Sales.Customer").FilterClause = "[side].[CustomerType] = Retail"
Configure the scope and change-tracking infrastructure.
serverConfig.Apply()
Write the configuration script to a file. You can modify
this script if necessary and run it against the server
to customize behavior.
File.WriteAllText("SampleConfigScript.txt", serverConfig.Script())
2.4设置客户端
可以用两种不同的方法设置客户端:
基于从服务器或其他客户端数据库检索的作用域信息的SQL Server或SQL Server Compact客户端数据库的完全初始化[6]。
基于SqlSyncDescriptionBuilder和SqlCeSyncDescriptionBuilder对象提供的架构信息在客户端数据库中创建用户对象和同步对象。作为第一个同步会话的一部分,为同步准备客户端数据库,并且所有行都作为增量插入下载到该客户端数据库。
通过使用预先存在的客户端数据库对SQL Server Compact客户端数据库执行快照初始化。快照初始化旨在减少初始化客户端数据库所需的时间[7]。在通过使用完全初始化来初始化一个客户端数据库后,可以通过使用这个第一个客户端数据库的“快照”初始化后续数据库。快照是专门准备的SQL Server Compact数据库,包含表架构、数据(可选)和变更跟踪基础结构[8-9]。将此快照复制到要求它的每个客户端。在客户端的第一个同步会话期间,将更新特定于客户端的元数据,并且自创建快照后发生的任何变更都将下载到客户端数据库。
先从服务器检索作用域信息,并且使用检索的基表和变更跟踪架构设置一个SQL Server Compact客户端数据库。然后基于来自SQL Server Compact客户端数据库的作用域信息设置一个SQL Server客户端数据库。代码如下:
Create a SQL Server Compact database and provision it based on scope
information that is retrieved from the server. Compact databases
do not support separate schemas, so we prefix the name of all
synchronization-related objects with "Sync" so that they are easy to
identify.
Utility.DeleteAndRecreateCompactDatabase(Utility.ConnStr_SqlCeSync1, True)
Utility.DeleteAndRecreateCompactDatabase(Utility.ConnStr_SqlCeSync2, False)
Dim clientSqlCe1Desc As DbSyncScopeDescription = _
SqlSyncDescriptionBuilder.GetDescriptionForScope("filtered_customer", Nothing, "Sync", serverConn)
Dim clientSqlCe1Config As New SqlCeSyncScopeProvisioning(clientSqlCe1Conn, clientSqlCe1Desc)
clientSqlCe1Config.ObjectPrefix = "Sync"
clientSqlCe1Config.Apply()
Provision the existing database SyncSamplesDb_SqlPeer2 based on scope
information that is retrieved from the SQL Server Compact database. We could
have also retrieved this information from the server.
Dim clientSqlDesc As DbSyncScopeDescription = _
SqlCeSyncDescriptionBuilder.GetDescriptionForScope("filtered_customer", "Sync", clientSqlCe1Conn)
Dim clientSqlConfig As New SqlSyncScopeProvisioning(clientSqlConn, clientSqlDesc)
clientSqlConfig.ObjectSchema = "Sync"
clientSqlConfig.Apply()
也可以从SyncSampleClient1.sdf数据库生成一个名为SyncSampleClient2.sdf的快照。然后将SyncSampleClient2.sdf与服务器数据库同步。
2.5设置同步选项
应用程序中的SampleSyncOrchestrator类的构造函数,采用两个RelationalSyncProvider对象[10]。SqlSyncProvider和SqlCeSyncPro? vider都是从RelationalSyncProvider派生的。先指定那一提供程序是本地提供程序以及那一提供程序是远程提供程序。然后,指定变更首先从远程数据库上载到本地数据库,然后按反向下载。代码如下:
Public Sub New(ByVal localProvider As RelationalSyncProvider, ByVal remoteProvider As RelationalSyncProvider)
Me.LocalProvider = localProvider
Me.RemoteProvid
3结论
SQL数据库要求实时同步,就有可能影响系统的性能;如果要求定时同步,机器配置完全相同,最好的方法就是卷复制,如果配置不同,则只能采用备份-复制-恢复的方式来实现同步。数据库整合前,各系统数据库只能服务于单独的信息系统,通过数据库同步,建立统一的数据中心,搭建了信息资源共享平台。通过系统整合,形成了比较完整的数据链,优化了业务流程。实现了可定制的综合查询。
参考文献:
[1]李亚宁.基于SQL Server的数据库同步原理研究[J].科技广场,2009(7).
[2]谢辉.嵌入式数据库同步系统的研究与实现[D].北京:北京交通大学,2011.
[3]沈敏,许华虎,季永华,等.基于XML的分布式异构数据库数据同步系统的研究[J].计算机工程与应用, 2005(5).
[4]杜经纬,杨光年.SQL数据库同步技术的应用[J].文教资料,2006(2).
[5]蒋春曦.MS SQL Server复制技术及实现[J]电脑知识与技术,2004(20).
[6]赵彩云,周兰江,胡草华,等.嵌入式数据库JDBC接口技术研究[J].贵州大学学报:自然科学版,2010(4).
[7]曹科,钟锡昌,张倪.多版本中央数据库的移动数据库系统并发控制方案[J].计算机应用研究,2006(2).
[8]蒋敏.基于网络隔离的异构数据库同步技术的研究与实现[D].杭州:浙江大学,2005.
[9]杜娟.移动数据库系统同步复制技术的研究与实现[D].武汉:武汉理工大学,2009.
[10]黎娜,张庆吉.移动数据库同步技术及其应用[J].现代计算机:专业版,2011(10).