DBSync是一款數據比較與同步工具,能比較出數據庫之間的差異,能實時同步差異數據,從而使雙方始終保持一致。用于系統間數據對接、數據分發、數據對比等。 DBSync提供了大量功能功能,例如交互式(GUI)模式/命令行模式,可切換會話,插入,更新和刪除包含的同步類型,任務計劃程序調度,數據過濾,可能的轉換錯誤的預驗證等。用戶可以通過配置幾個選項,并通過向導界面或命令行模式進行一些同步自定義來轉換和同步MySQL與MySQL或MySQL。添加到調度功能的命令行參數使您能夠定期自動同步或轉換數據,而無需用戶輸入和輔助設置。
1.支持各種數據源
既支持常規數據庫,如Access、SQL Server、Oracle、MySQL、DB2等,又支持Excel、txt、csv等文件中的數據,任何可用OLE DB連接的數據,均可參與同步。
2.異型數據庫同步
既支持相同類型數據庫之間的同步,如Access到Access、SQL Server到SQL Server,又支持異型數據庫之間的同步,如Excel到Access、Access到SQL Server、SQL Server到Oracle等。
3.無人值守同步
軟件具有定期自動同步的功能,只需預先設置好時間間隔,就可長期自動同步,從而實現無人值守同步。
4.支持增量同步
既支持簡單的全部復制式同步(Insert),又支持增量同步。軟件能快速掃描數據庫,找出相互間的差異(即增量),只對增量進行同步。
5.秒級實時同步
重復同步的時間間隔最短可設置為1秒,源數據庫發生增、刪、改后,1秒后就立即同步過去,幾乎等同于實時同步。
6.支持同步后處理
可設置同步后的SQL執行語句,實現同步之外的數據轉換、公式計算等額外任務。
打開軟件后進入主界面,顯示同步任務列表,如下圖所示:
說明:任務是執行同步的基本單位,一個任務負責一對數據表之間的同步,多個任務可并發執行。
數據比較:Click任務列表中的“○”按鈕,進入掃描并比較界面。
數據同步:Click任務列表中的“?”按鈕,立即開始同步。
執行狀態:實時顯示同步進度信息,包括:已掃描的記錄數、已同步(增刪改)的記錄數等。
開始時間、結束時間、下次開始時間:顯示每個任務的執行時間信息。
日志:Click任務列表中的“日志”按鈕,可查看該任務的操作日志。
設置:Click任務列表中的“修改”按鈕,可修改任務設置。
*同步前做好數據備份:數據同步將直接更改目標數據庫,請做好目標數據庫的備份工作,以防數據丟失。
*同步方式選擇增量同步時,要注意雙方在數據范圍上的對等性。同步程序工作時,需要先掃描、比較雙方數據,找到相互間的差異,再做同步。如果雙方在數據范圍上不對等,比較就失去意義,結果自然也是錯誤的。
*增量同步時,主鍵字段用于唯一地標識一條記錄,其值應該非空且唯一,同步時如遇到空值或者重復的,將直接跳過,不作處理。
*如何實現雙向同步:每個任務的同步方向是單向的,即將源庫數據同步至目標庫,使得目標庫與源庫保持一致。如果需要雙向同步,可另建一個任務用于反方向的同步。
*同步至文件時的限制:除了常規數據庫間的同步外,有些用戶需要將數據同步到單一文件中,由于文件機制本身的限制,有些增量同步不支持,具體情況是:
同步至txt、csv等文本文件:支持新增(Insert)同步,不支持刪(Delete)、修改(Update)同步。
同步至Excel文件:支持新增(Insert)、修改(Update)同步,不支持刪(Delete)同步。
要比較與同步數據,必須先設置一個任務,在任務里指定源數據表、目標數據表,以及同步方式、同步頻度等。Click主界面上的“新增”按鈕,即可新增一個同步任務,進入Step1。
Step1:選擇源數據庫、目標數據庫
要設置同步任務,首先要選定源數據庫、目標數據庫,如下圖所示:
說明:本界面的用途是設置源數據庫及目標數據庫的連接字符串,使得能連接雙方數據庫。其中,界面上打星號(*)的欄位是必填的。
*關于OLE DB連接字符串:
本軟件采用 OleDbConnection (.NET) 連接數據庫,因此,連接字符串一欄需填寫 OLE DB 形式的連接字符串。如何拼寫OLE DB連接字符串,詳見本文7.1章節。
填寫完成后,請Click標簽2,進入Step2。
Step2:選擇源數據表、目標數據表
說明:本界面的用途是選擇源數據表及目標數據表。
選擇完成后,請Click標簽3,進入Step3。
Step3:選擇字段對應關系
說明:本界面的用途是選擇字段對應關系,為需要同步的源字段指定對應的目標字段。其中的數據類型是指OleDbType類型,不同的數據庫有不同的數據類型定義,但這里統一體現為OleDbType,詳細資料請參見本文7.2章節
*關于主鍵字段:
如果您需要做增量同步,這里必須選擇主鍵字段。主鍵字段是記錄的唯一標志,它用于判別同步雙方是否存在對應記錄。
選擇完成后,請Click標簽4,進入Step4。
Step4:選擇同步方式及頻度
說明:本界面的用途是選擇同步方式及頻度。
(1)同步方式:
*全部新增(Insert)至目標表:是指將源數據表中的數據全部Insert到目標數據表。
*僅同步增量數據:是指以主鍵字段為記錄標識,只同步差異部分(即增量部分),而相同的部分不作同步。增量分3種:一是新增,是指對于源數據表存在而目標表不存在的記錄,視作源庫新增的,因此應新增(Insert)到目標庫;二是刪除,是指對于目標數據表存在而源數據表不存在的記錄,視作已從源庫刪除,因此應從目標庫中刪除(Delete);三是修改,是指源數據表與目標數據表均存在的記錄,但雙方數據有差異,視作源庫已做修改,因此需用源庫數據修改(Update)目標庫。
(2)執行頻度:
*手動點擊“開始”執行:是指每次同步都由用戶Click任務列表中的“?”來執行
*手動,然后自動重復執行:是指由用戶Click“?”開始第一次執行,同步結束后,程序會按照預定的時間間隔自動重復執行。只要程序不關閉,同步操作就會一直持續下去,從而實現無人值守同步。
(3)同步范圍:
屬于高級選項,可填寫Select * From...Where... 形式的 SQL 語句,進一步限定參與同步的數據范圍。主要用于3種場合:
*一是總庫與分庫之間的同步,需要限定總庫的數據范圍。很多單位的數據庫是分布式的,有總庫、分庫之分,總庫數據多,分庫數據少,它們之間在數據范圍上是不對等的。總庫與分庫進行同步時就應限制總庫的范圍,使得雙方在數據范圍上是對等的,在對等的基礎上進行同步。舉例:
某集團公司有多個分公司,集團公司的數據庫是總庫,包含所有客戶信息,分公司的數據庫是分庫,只包含當地客戶信息。假如總庫與天津分庫做同步,就可以填寫這樣的SQL語句限定總庫范圍:SELECT * FROM Customer where Area=”TianJin”,使總庫的同步范圍僅限于天津數據,雙方就是對等的,防止其它數據混串。
*二是挑選有用數據進行同步,其它數據不同步。舉例:
某公司有一套銷售管理系統,其中的訂單信息有3種狀態:草擬、已簽約、已付款。這些訂單需要同步至財務系統,對于財務來說只需已付款的訂單信息,此時就可以填寫這樣的SQL語句限定數據范圍:SELECT * FROM Order where Status=3。其中,Status=3代表已付款的訂單。
*三是為了提高同步速度,將同步范圍限定于增量部分。同步程序的工作機制是,先掃描、比較雙方數據,找出相互間的差異(即增量),再將增量同步過去,從而使雙方保持一致。雙方的數據量如果很大,比較所需的時間就越長,同步速度就越慢。提速思路就是,限制每次同步所涉及的源數據量,分別處理新增、修改、刪除3種增量:
A、對于新增、修改增量,每次同步完成時,記住完成時間;下次同步時,將同步范圍限定于該時間后的增量。SQL實例:
SELECT a.* FROM Customer AS a,(SELECT syncDate FROM dbsync WHERE tablename='Customer') AS b where b.SyncDate is null or a.CreateTime>=b.SyncDate or a.UpdateTime >=b.SyncDate
其中,dbsync 表的syncDate 字段記有上次同步的完成時間。由于同步是定期執行的,兩次同步間的增量非常有限,所需的比較量就很少,速度自然就很快。
B、對于刪除增量,另安排一個同步任務單獨執行。由于該任務只比較雙方的主鍵,不比較其它數據,即使不限定數據范圍,速度也很快。
(4)同步后處理:
可填寫 Update SQL 語句,每次同步后會執行,可實現同步之外的數據轉換、公式計算等額外任務。
*SQL實例1:UPDATE dbsync set syncDate=date() where tablename=' Customer'。該SQL語句將同步完成時間記入數據庫,可用于下次同步時限定同步范圍,減少數據掃描及比較量,提高同步速度。
*SQL實例2:UPDATE Customer set [性別]=’男’ where Sex=1;UPDATE Customer set [性別]=’女’ where Sex=0。該SQL語句根據同步過來的“Sex” 字段,進一步計算“性別”字段。