全網(wǎng)首發(fā):原創(chuàng)SQL數(shù)據(jù)庫(kù)同步工具
程序設(shè)計(jì)
設(shè)計(jì)需求
數(shù)據(jù)同步是分布式系統(tǒng)常常需要考慮的問題,即把分散的數(shù)據(jù)收集在一起,進(jìn)行匯總統(tǒng)計(jì)。例如,耐克在全球均有分店,假如總店需要掌握分店的銷售信息,就需要把分店的銷售數(shù)據(jù)同步到總店。
目前主流數(shù)據(jù)庫(kù)主要有兩個(gè):SQL Server和Oracle。對(duì)于Oracle數(shù)據(jù)庫(kù),有著比較成熟的同步技術(shù),但SQL數(shù)據(jù)庫(kù)則沒有太好的解決方案,雖然已經(jīng)有公司研發(fā)了同步程序,但是價(jià)格過于昂貴。
同時(shí),數(shù)據(jù)庫(kù)同步技術(shù)是一種常用技術(shù),因此有必要開發(fā)出一套獨(dú)立的數(shù)據(jù)庫(kù)同步系統(tǒng),避免重復(fù)勞動(dòng)。
綜上需求,特提出“SQL Server數(shù)據(jù)庫(kù)同步系統(tǒng)”開發(fā)。
運(yùn)行環(huán)境
程序采用.NET 4.0開發(fā),因此只能運(yùn)行于Windows操作系統(tǒng),同時(shí)需要.NET Framwork 4.0的支持。
程序中使用了SQLite本地?cái)?shù)據(jù)庫(kù)系統(tǒng),但已經(jīng)自行支持,無(wú)需安裝其他組件。
程序針對(duì)SQL Server數(shù)據(jù)庫(kù)開發(fā),因此只支持SQL Server數(shù)據(jù)庫(kù),目前已知支持SQL Server 2003、SQL Server 2005、SQL Server 2008。
技術(shù)內(nèi)幕
回復(fù)超100公布 哈哈~~~
程序使用說(shuō)明
系統(tǒng)部署示意圖

客戶端使用說(shuō)明
概述
本系統(tǒng)分為客戶端和服務(wù)器兩個(gè)部分,其中客戶端承擔(dān)了系統(tǒng)絕大數(shù)事務(wù),服務(wù)器只是簡(jiǎn)單的執(zhí)行客戶端傳送的命令,屬于典型的C/S胖客戶端瘦服務(wù)器模式。這樣設(shè)計(jì)的目的是為了減輕服務(wù)器的壓力,讓系統(tǒng)更加流暢。
客戶端負(fù)責(zé)采集分布數(shù)據(jù)庫(kù)中的數(shù)據(jù),然后匯總到服務(wù)器。客戶端需要配置的數(shù)據(jù)庫(kù)連接字符串是指分布數(shù)據(jù)庫(kù)的連接字符串,連接成功后才可以向主數(shù)據(jù)庫(kù)同步數(shù)據(jù)。例如,有A、B、C三個(gè)分布數(shù)據(jù)庫(kù),需要把數(shù)據(jù)匯總到D數(shù)據(jù)庫(kù),那么需要三個(gè)客戶端,分別連接A、B、C數(shù)據(jù)庫(kù),客戶端運(yùn)行在哪無(wú)所謂,只要能連接數(shù)據(jù)庫(kù)即可。
主頁(yè)說(shuō)明

主頁(yè)顯示一些公共信息。
程序啟動(dòng)日期有助于您分析日志同步狀況;
掃描引擎、同步引擎是本系統(tǒng)兩大核心引擎,掃描引擎負(fù)責(zé)獲取分布數(shù)據(jù)庫(kù)的數(shù)據(jù)變動(dòng),同步引擎負(fù)責(zé)向服務(wù)器發(fā)送需要同步的數(shù)據(jù)。如果數(shù)據(jù)庫(kù)連接字符串未設(shè)置,引擎不會(huì)開啟,否則,引擎自動(dòng)開啟,無(wú)需人工干預(yù)。
數(shù)據(jù)庫(kù)占用空間是指程序本地的SQLite數(shù)據(jù)庫(kù)占用空間,由于長(zhǎng)期使用會(huì)有大量日志信息,占用過大空間會(huì)使程序效率降低,可以及時(shí)清理。清理界面如下:

選擇好要清除的日志類型,然后選擇日期,提交后會(huì)清除該日期之前的所有記錄。
活動(dòng)日志說(shuō)明

該頁(yè)面可以查詢程序的活動(dòng)狀況,以日期查詢可以顯示某個(gè)日期的記錄。
程序活動(dòng)日志是掃描記錄,詳細(xì)記錄了掃描信息。
程序同步活動(dòng)日志是同步記錄,詳細(xì)記錄了同步信息。
同步說(shuō)明
同步界面用來(lái)配置需要同步的表和同步時(shí)間,如果已經(jīng)配置數(shù)據(jù)庫(kù)連接字符串,將會(huì)顯示數(shù)據(jù)庫(kù)中的所有表,用戶可根據(jù)需要選擇要同步的表。
在要同步的表列表中,如果表間有外鍵約束,一定要把主表靠前排列。
同步時(shí)間即何時(shí)同步數(shù)據(jù),用戶可根據(jù)實(shí)際需要選擇閑時(shí)同步,建議多個(gè)客戶端選擇不同的時(shí)間段同步,避免沖突。支持多個(gè)時(shí)間,以逗號(hào)分隔,24小時(shí)制表示,時(shí)間格式舉例:20:33,22:12。
成功提交設(shè)置后,會(huì)自動(dòng)開啟掃描引擎和同步引擎。
參數(shù)設(shè)定說(shuō)明
參數(shù)設(shè)定界面用來(lái)配置程序的基本參數(shù)。
數(shù)據(jù)庫(kù)連接字符串是指分布數(shù)據(jù)庫(kù)的連接字符串,不是主數(shù)據(jù)庫(kù)的連接字符串,一旦成功設(shè)置,不能更改,如需更改,要重新安裝程序!
掃描間隔時(shí)間是指掃描引擎獲取變動(dòng)數(shù)據(jù)的時(shí)間間隔,建議設(shè)置為30分鐘,用戶可根據(jù)需求自行更改。
主服務(wù)器IP地址是指服務(wù)器所在電腦的IP地址,客戶端將發(fā)送同步數(shù)據(jù)到服務(wù)器。
補(bǔ)充說(shuō)明
程序一旦進(jìn)步同步狀態(tài),將出現(xiàn)同步進(jìn)度界面,此界面自動(dòng)出現(xiàn),自動(dòng)關(guān)閉,無(wú)需干預(yù),請(qǐng)耐心等待,千萬(wàn)不要在同步時(shí)關(guān)閉程序!
服務(wù)器使用說(shuō)明
概述
服務(wù)器功能比較簡(jiǎn)單,負(fù)責(zé)收集客戶端發(fā)送過來(lái)的同步數(shù)據(jù),然后添加到主數(shù)據(jù)庫(kù)中,只需設(shè)置主數(shù)據(jù)庫(kù)的連接字符串即可,成功連接后服務(wù)器啟動(dòng)。
服務(wù)器會(huì)自動(dòng)保存成功連接的主數(shù)據(jù)庫(kù)連接字符串。
服務(wù)器對(duì)同步不做任何記錄。
使用說(shuō)明
設(shè)置好數(shù)據(jù)庫(kù)連接字符串后,點(diǎn)擊啟動(dòng)服務(wù),如果連接成功,服務(wù)自動(dòng)啟動(dòng)。
同時(shí),界面上顯示正在同步的客戶端數(shù)量,正在同步客戶端數(shù)量不為0時(shí),無(wú)法關(guān)閉服務(wù)器,如果強(qiáng)行關(guān)閉,造成的一切后果自行負(fù)責(zé)。
補(bǔ)充說(shuō)明
理論上應(yīng)該先啟動(dòng)服務(wù)器,再啟動(dòng)客戶端。
程序使用注意事項(xiàng)
1.必須確保您的數(shù)據(jù)庫(kù)沒有修改主鍵的操作。由于修改主鍵會(huì)引起很多問題,如果一定要修改主鍵,建議把修改拆分成刪除→添加。
2.必須確保您的數(shù)據(jù)庫(kù)沒有使用自增長(zhǎng)的字段,因?yàn)樽栽鲩L(zhǎng)字段本程序無(wú)法干涉。
3.支持所有SQL數(shù)據(jù)類型(除SQL2008新增的geography、geometry、hierarchyid)。
4.數(shù)據(jù)庫(kù)連接字符串一旦成功設(shè)置,不能更改!如需更改,需要重新安裝程序。
產(chǎn)品特點(diǎn)
l 設(shè)計(jì)新穎。
l 安全性高。
l 穩(wěn)定性強(qiáng)。
l 效率高。
l 占用資源低。
已經(jīng)修正BUG
l 同步時(shí)間正則判斷錯(cuò)誤,少寫了一個(gè)+。
l 表刪除按鈕無(wú)效。
l 主鍵檢索錯(cuò)誤,檢索反了。
l 點(diǎn)活動(dòng)日志應(yīng)該清空界面表格顯示,點(diǎn)查詢應(yīng)該清空界面表格顯示。
l SQL語(yǔ)句按照?qǐng)?zhí)行順序構(gòu)造,應(yīng)該在配置里放最小LSN。
l 同步時(shí)間判斷不合理,一個(gè)時(shí)間點(diǎn)可能會(huì)同步兩次,應(yīng)該縮小同步條件。
l SQL日志讀取異常,應(yīng)該跳過無(wú)日志的記錄。
l 掃描引擎和同步引擎沖突,有交叉現(xiàn)象,通過對(duì)線程運(yùn)行標(biāo)記添加線程鎖解決。
版權(quán)信息
作者:楊元。
聲明
本程序?qū)儆诿赓M(fèi)程序,嚴(yán)禁用于商業(yè)用途。
如果您喜歡此程序,可以向作者捐款。
程序升級(jí)——2013年3月27日——增加表前綴(V2.0)
由于產(chǎn)品開發(fā)初期設(shè)計(jì)不足,后期使用出現(xiàn)了一個(gè)問題:沒辦法區(qū)分?jǐn)?shù)據(jù)來(lái)自哪個(gè)客戶端,也就是沒有區(qū)分分布數(shù)據(jù)庫(kù),最終數(shù)據(jù)將混在一起。
經(jīng)過考慮,提出表前綴概念。原理如下圖:

如果沒有表前綴,那么所有分布數(shù)據(jù)庫(kù)中的表名字都一樣,在本例中都是t_Syn1或t_Syn2,如果不加區(qū)分,A、B、C三個(gè)分布數(shù)據(jù)庫(kù)中的信息都會(huì)同步到主數(shù)據(jù)庫(kù)的t_Syn1、t_Syn2表中,造成數(shù)據(jù)混亂。
為了區(qū)分不同的分布數(shù)據(jù)庫(kù),采用表前綴的解決方案。
根據(jù)圖中的原理,假如分布數(shù)據(jù)庫(kù)中有一個(gè)表是“t_Syn1”,如果想同步這個(gè)表的數(shù)據(jù),那么主數(shù)據(jù)庫(kù)中需要有一個(gè)名字叫“前綴_t_Syn1”的表,結(jié)構(gòu)和分布數(shù)據(jù)庫(kù)中的“t_Syn1”一樣。
這樣一來(lái),分布數(shù)據(jù)庫(kù)“t_Syn1”表中的數(shù)據(jù)會(huì)同步到主數(shù)據(jù)庫(kù)“前綴_t_Syn1”表中。
前綴可以在客戶端“參數(shù)設(shè)定”選項(xiàng)卡中設(shè)置,每個(gè)分布數(shù)據(jù)庫(kù)具體用什么前綴由用戶自己商定。
注意:程序不會(huì)創(chuàng)建表,也就是說(shuō),用戶必須手動(dòng)創(chuàng)建主數(shù)據(jù)庫(kù)中的表,主數(shù)據(jù)庫(kù)表名=前綴+分布數(shù)據(jù)庫(kù)表名,主數(shù)據(jù)庫(kù)表結(jié)構(gòu)必須和分布數(shù)據(jù)庫(kù)表結(jié)構(gòu)相同,只是名字不同而已。
程序下載地址:

浙公網(wǎng)安備 33010602011771號(hào)