王站立,修 瑋
(朝陽師范高等??茖W校,遼寧朝陽122000)
【學術研究】
數(shù)據(jù)庫同步編程解決方案
王站立,修 瑋
(朝陽師范高等??茖W校,遼寧朝陽122000)
在實現(xiàn)信息系統(tǒng)過程中,多個異地的數(shù)據(jù)庫需要實現(xiàn)相互同步.不同的數(shù)據(jù)庫系統(tǒng)根據(jù)本身規(guī)則提出的數(shù)據(jù)庫同步方案五花八門,而且約束繁雜.所以數(shù)據(jù)庫管理員可根據(jù)系統(tǒng)環(huán)境不同編程來實現(xiàn)數(shù)據(jù)庫同步.
數(shù)據(jù)庫同步;編程;解決方案
在信息化社會中,信息是進行決策管理和科學研究的前提條件.數(shù)據(jù)庫是管理信息系統(tǒng)、決策支持系統(tǒng)、辦公自動系統(tǒng)等各類信息系統(tǒng)的核心部分[1].在信息系統(tǒng)中,多個異地數(shù)據(jù)庫服務器可能形成樹型的邏輯結構,即一個服務器只能有一個上級服務器,但可以有多個下級服務器,所以將需要同步的數(shù)據(jù)分為向上同步和向下同步.向上同步是指將本級服務器數(shù)據(jù)同步至上級(根節(jié)點方向)服務器中,而向下同步指將本級服務器數(shù)據(jù)同步至下級(葉子節(jié)點方向)服務器中.異地數(shù)據(jù)庫同步已經(jīng)成為一個重要研究方向,下面以Oracle數(shù)據(jù)庫系統(tǒng)為例,說明如何通過編程實現(xiàn)數(shù)據(jù)同步.
在實現(xiàn)過程中需要注意幾個事項:首先,當本級服務器同步數(shù)據(jù)到遠程服務器后,遠程服務器應該避免再把同一數(shù)據(jù)同步回本級服務器,否則會造成死循環(huán);其次,本級服務器向遠程同步過程中,對于當前數(shù)據(jù)庫同一個表的數(shù)據(jù),可能需要同步至不同的遠程服務器,而不是將表的全部數(shù)據(jù)同步至所有下級服務器[2].例如:將“人員信息表”中工作單位為遼寧地區(qū)的人員同步至沈陽服務器,將工作單位為吉林地區(qū)的人員同步至長春服務器,這樣在向遠程服務器同步時,查詢需要同步的數(shù)據(jù)需要附加條件,并且需要指定將數(shù)據(jù)同步到哪個服務器.
考慮實現(xiàn)過程的復雜度,本文在同步過程中不考慮表結構的不同,默認為各個服務器中表結構相同,而且僅同步表數(shù)據(jù),并不同步表結構.主要流程及步驟如下:
2.1 讀取同步控制信息表
表1為同步控制信息表,用來存儲控制實現(xiàn)同步線程(任務)的啟動、頻率等信息.同步線程中每間隔10 s(甚至更短時間)讀取本表信息,然后決定是否開啟一次同步過程.其中字段SynchInterval為同步線程的執(zhí)行頻率,數(shù)據(jù)庫管理員可根據(jù)網(wǎng)絡帶寬、數(shù)據(jù)庫性能等綜合因素酌情設置或修改.如果本表信息同時滿足以下條件那么啟動同步過程,否則沒必要啟動同步:(1)Enabled標志為1(啟用);(2)LastSynchTime + SynchInterval <系統(tǒng)當前時間,說明超過同步周期.
表1 同步控制信息表
字段名類型及寬度說明SynchIntervalint同步時間間隔,單位:s.LastSynchTimeTIMESTAMP最后同步時間.Enabledint啟用1,停用0.
2.2 遍歷遠程服務器信息
遠程服務器信息存儲于數(shù)據(jù)庫表(SYNCHSERVER)中,該表用來存儲各服務器基本配置信息,這些信息主要包括服務器的類型(向上同步還是向下同步)、服務器IP、服務器端口、同步數(shù)據(jù)庫的名稱、數(shù)據(jù)庫用戶名、數(shù)據(jù)庫密碼等.同步線程開啟后,根據(jù)服務器類型查詢服務器信息列表,對于列表中的每個服務器進行連接,同步數(shù)據(jù)、斷開連接.
2.3 查詢當前的遠程服務器需要同步的表名及附加條件
確定當前同步的遠程服務器后,根據(jù)服務器ID查詢同步索引表(表2).表2存儲需要同步到對應服務器的表名及附加條件.獲取表名即可查詢對應表需要同步的數(shù)據(jù).而在查詢對應表格數(shù)據(jù)時候附加查詢條件則很好解決了同一表格數(shù)據(jù)同步到不同遠程服務器的問題.
表2 同步索引列表
字段名類型及寬度說明TableNameVarchar(50)同步表名稱(主鍵).ServerIDint同步服務器ID(主鍵).AppendWhereVarchar(200)同步時附加條件.默認為"".
2.4 同步表數(shù)據(jù)
為了記錄同步狀態(tài),對于每一張需要同步數(shù)據(jù)的表,除了原有需求字段外,加如下三個字段(見表3).
其中,OPUP標志向上同步時間,初始化可為NULL.向上同步本條數(shù)據(jù)后修改為系統(tǒng)當前時間.OPDOWN為向下同步時間,使用方法同OPUP.OPCURR為本地操作記錄時間,更新記錄時需更新該字段為當前系統(tǒng)時間.每次向上同步時可根據(jù)查詢條件(OPUP IS NULL OR OPUP< OPCURR) 檢索出滿足條件的記錄上傳.向下同步同理.如果需要同步的記錄過多而同步的頻率又過高則會增加服務器負擔,建議每次同步部分數(shù)據(jù)(例如,限制每次最多同步100條記錄).每張需要同步的表需要建立主索引,根據(jù)主索引來決定插入或更新限制到同步數(shù)據(jù)庫中.主索引字段不能使用自動遞增方式.
表3 功能表
字段名類型說明……根據(jù)需要表結構字段OPUPTIMESTAMP向上同步時間OPDOWNTIMESTAMP向下同步時間OPCURRTIMESTAMP本地操作時間
具體實現(xiàn)流程如圖1:
利用編程的方法解決數(shù)據(jù)庫同步的方案優(yōu)點明顯.首先,同步過程更加方便和靈活,可隨意指定目標服務器及同步的表,而且還可以將表中不同的記錄同步到不同的服務器;其次,擴展性和維護性更強.當某個節(jié)點發(fā)生故障時,不會影響整體應用,保證數(shù)據(jù)庫的持續(xù)工作;另外安全性和易用性也得到保障.編程實現(xiàn)的工具不會影響數(shù)據(jù)庫的內(nèi)部工作,只是根據(jù)用戶需求實現(xiàn)具體操作,大大方便了用戶.
[1]譚懷遠. 讓Oracle跑得更快:Orace 10g性能分析與優(yōu)化思路[M].北京:電子工業(yè)出版社,2010.
[2]格里沃爾德. Oracle高級編程[M].北京:清華大學出版社,2007.
(審稿人 李樹東 鄧景茹,責任編輯 王 巍)
The solution to database synchronization programming
WANG Zhan-li, XIU Wei
(Chaoyang Teachers College, Chaoyang Liaoning 122000)
During the process of realizing information system, many databases in different areas need synchronization. Different database systems not only propose different synchronization schemes according to their own rules but also interweave complicatedly. So the database administrator can realize the database synchronization by programming according to different systematic environment.
database synchronization; programming; solution
2015—10—10
王站立(1981-),男,遼寧朝陽市人,講師,主要從事計算機教學研究.
TP311.13
A
1008-5688(2017)01-0032-02