李煥玲
摘要:針對存在的業(yè)務邏輯不同,數據庫建設沒有統(tǒng)一標準的眾多業(yè)務子系統(tǒng),以SQL Server數據庫為主,從兩層混合同步和N層混合同步體系出發(fā),通過設置節(jié)點、描述作用域和表、設置服務器、設置客戶端、設置同步選項等方法進行SQL數據庫同步研究,通過數據庫同步,建立統(tǒng)一的數據中心,搭建了信息資源共享平臺,形成了比較完整的數據鏈,優(yōu)化了業(yè)務流程,并實現了可定制的綜合查詢。
關鍵詞:數字化校園;數據庫;同步體系;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汶川大地震給四川信息職業(yè)技術學院造成了重大損失,學院《災后恢復重建規(guī)劃》已經國家發(fā)改委等11部委(局)以《汶川地震災后恢復重建公共服務設施建設專項規(guī)劃》(發(fā)改廳(2008)2667號)文正式批準下達。學院災后重建項目在廣元教育發(fā)展規(guī)劃園區(qū)征地403畝,概算總投資3.2億元,其中中央重建基金投入26681萬元,規(guī)劃建筑面積106150平方米。
學院老校區(qū)經過長時間的信息化建設,內部己形成多個業(yè)務子系統(tǒng),但各系統(tǒng)的業(yè)務邏輯不同,在數據庫的建設上沒有遵循統(tǒng)一的標準,而且這些系統(tǒng)之間又常常需要進行數據交換和同步。
1數據庫同步的體系結構
同步會話的所有組件都駐留在本地計算機上,并且沒有從本地計算機到遠程計算機上的數據庫的直接連接。在同步會話過程中,本地計算機是發(fā)起同步的計算機[1]。如果要從多臺計算機發(fā)起同步,每臺計算機必須包含圖中顯示的所有組件。兩層混合同步拓撲圖如圖1示。
圖1兩層混合同步拓撲圖
N層體系結構:需要附加的組件,包括遠程計算機上的組件;并且與遠程數據庫的連接現在由本地計算機上的代理和遠程計算機上的服務處理。該代理和服務必須由應用程序開發(fā)人員實現。N層混合同步拓撲圖如圖2示。
2 SQL數據庫同步
2.1設置節(jié)點和執(zhí)行同步
圖2 N層混合同步拓撲圖
在拓撲中同步節(jié)點可劃分為兩個階段:設置要同步的節(jié)點,以及在一對節(jié)點之間實際執(zhí)行同步。對于SqlSyncProvider和SqlCe? SyncProvider,設置節(jié)點由兩個任務構成:
2.1.1定義要同步的內容
通過描述一個或多個“作用域”來定義要同步的內容。作用域是表的集合,其中某些表或全部表可以篩選[2]。表可以已存在于數據庫中,也可以通過使用Sync Framework對象描述表,然后在同步基礎存儲區(qū)時在運行時生成它們。在首次同步某一作用域時,如果需要變更某一作用域,則與現有作用域相關聯的元數據應刪除后重新創(chuàng)建。
2.1.2為Sync Framework變更跟蹤設置數據庫
在描述了表和作用域后,使用Sync Framework對象將設置腳本應用于各節(jié)點。這些腳本創(chuàng)建變更跟蹤和變更應用基礎結構,該基礎結構由元數據表、觸發(fā)器和存儲過程構成。
在設置節(jié)點后,可以同步這些節(jié)點。在后臺,Sync Framework使用指定的作用域和表說明信息為每個作用域和每個同步適配器(每個表一個)生成配置對象[3-4]。這使得Sync Framework可以利用在各個數據庫中持久保留的信息并為一對節(jié)點之間的每個同步會話生成它所需的信息。SqlSyncProvider和SqlCeSyncProvider都知道在設置過程中創(chuàng)建的變更跟蹤表和其他對象,并且它們自動生成所需的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作用域創(chuàng)建一個設置對象,并且指定與同步相關的所有對象都應在名為"Sync"的數據庫架構中創(chuàng)建。作為作用域設置的一部分,將對Customer表定義一個篩選器。將只同步與該篩選器匹配的行[5]。用于定義篩選器的代碼要求兩個部分。對AddFilterColumn的調用指定CustomerType列用于篩選并且它必須添加到用于跟蹤對Customer表的變更的跟蹤表中。對Fil? terClause的調用指定該篩選器本身。篩選子句是不帶WHERE關鍵字的WHERE子句。[side]別名是該跟蹤表的別名。沒有對Cus? tomerContact表定義任何篩選器;因此,將同步來自該表的所有行。在定義設置選項后,調用Apply方法以便在服務器數據庫中創(chuàng)建變更跟蹤基礎結構;并且設置腳本將寫入某一文件。代碼如下:
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對象提供的架構信息在客戶端數據庫中創(chuàng)建用戶對象和同步對象。作為第一個同步會話的一部分,為同步準備客戶端數據庫,并且所有行都作為增量插入下載到該客戶端數據庫。
通過使用預先存在的客戶端數據庫對SQL Server Compact客戶端數據庫執(zhí)行快照初始化。快照初始化旨在減少初始化客戶端數據庫所需的時間[7]。在通過使用完全初始化來初始化一個客戶端數據庫后,可以通過使用這個第一個客戶端數據庫的“快照”初始化后續(xù)數據庫??煺帐菍iT準備的SQL Server Compact數據庫,包含表架構、數據(可選)和變更跟蹤基礎結構[8-9]。將此快照復制到要求它的每個客戶端。在客戶端的第一個同步會話期間,將更新特定于客戶端的元數據,并且自創(chuàng)建快照后發(fā)生的任何變更都將下載到客戶端數據庫。
先從服務器檢索作用域信息,并且使用檢索的基表和變更跟蹤架構設置一個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數據庫要求實時同步,就有可能影響系統(tǒng)的性能;如果要求定時同步,機器配置完全相同,最好的方法就是卷復制,如果配置不同,則只能采用備份-復制-恢復的方式來實現同步。數據庫整合前,各系統(tǒng)數據庫只能服務于單獨的信息系統(tǒng),通過數據庫同步,建立統(tǒng)一的數據中心,搭建了信息資源共享平臺。通過系統(tǒng)整合,形成了比較完整的數據鏈,優(yōu)化了業(yè)務流程。實現了可定制的綜合查詢。
參考文獻:
[1]李亞寧.基于SQL Server的數據庫同步原理研究[J].科技廣場,2009(7).
[2]謝輝.嵌入式數據庫同步系統(tǒng)的研究與實現[D].北京:北京交通大學,2011.
[3]沈敏,許華虎,季永華,等.基于XML的分布式異構數據庫數據同步系統(tǒng)的研究[J].計算機工程與應用, 2005(5).
[4]杜經緯,楊光年.SQL數據庫同步技術的應用[J].文教資料,2006(2).
[5]蔣春曦.MS SQL Server復制技術及實現[J]電腦知識與技術,2004(20).
[6]趙彩云,周蘭江,胡草華,等.嵌入式數據庫JDBC接口技術研究[J].貴州大學學報:自然科學版,2010(4).
[7]曹科,鐘錫昌,張倪.多版本中央數據庫的移動數據庫系統(tǒng)并發(fā)控制方案[J].計算機應用研究,2006(2).
[8]蔣敏.基于網絡隔離的異構數據庫同步技術的研究與實現[D].杭州:浙江大學,2005.
[9]杜娟.移動數據庫系統(tǒng)同步復制技術的研究與實現[D].武漢:武漢理工大學,2009.
[10]黎娜,張慶吉.移動數據庫同步技術及其應用[J].現代計算機:專業(yè)版,2011(10).