一種實(shí)現(xiàn)多源異構(gòu)數(shù)據(jù)資源自動(dòng)同步的方法
【專利摘要】本發(fā)明涉及一種實(shí)現(xiàn)多源異構(gòu)數(shù)據(jù)資源自動(dòng)同步的方法。本發(fā)明涉及元數(shù)據(jù)服務(wù)節(jié)點(diǎn)、服務(wù)節(jié)點(diǎn)及生產(chǎn)節(jié)點(diǎn);元數(shù)據(jù)服務(wù)節(jié)點(diǎn)負(fù)責(zé)存儲(chǔ)分布式異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)中的數(shù)據(jù)字典;服務(wù)節(jié)點(diǎn)負(fù)責(zé)解析異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)中用戶的請(qǐng)求,定期與生產(chǎn)節(jié)點(diǎn)上的數(shù)據(jù)庫(kù)進(jìn)行同步;生產(chǎn)節(jié)點(diǎn)負(fù)責(zé)相應(yīng)生產(chǎn)應(yīng)用系統(tǒng)中的查詢、更新等請(qǐng)求;其中,服務(wù)節(jié)點(diǎn)由配置識(shí)別器、日志解析器和數(shù)據(jù)同步器構(gòu)成;配置識(shí)別器用于分析生產(chǎn)節(jié)點(diǎn)上源數(shù)據(jù)庫(kù)配置,選擇可行的同步方式;日志解析器用于解析不同數(shù)據(jù)庫(kù)系統(tǒng)的日志,是增量同步方式的前期準(zhǔn)備工作部件;數(shù)據(jù)同步器根據(jù)配置識(shí)別器的同步方式,進(jìn)行數(shù)據(jù)同步。本發(fā)明實(shí)現(xiàn)了多源異構(gòu)數(shù)據(jù)資源的自動(dòng)同步;可用于數(shù)據(jù)資源處理中。
【專利說明】一種實(shí)現(xiàn)多源異構(gòu)數(shù)據(jù)資源自動(dòng)同步的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)應(yīng)用【技術(shù)領(lǐng)域】,特別涉及一種實(shí)現(xiàn)多源異構(gòu)數(shù)據(jù)資源自動(dòng)同步的方法。
【背景技術(shù)】
[0002]在大數(shù)據(jù)時(shí)代,存儲(chǔ)、組織數(shù)據(jù)是上層應(yīng)用服務(wù)的基礎(chǔ)。通過分布式異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng),不同的數(shù)據(jù)源可以整合為邏輯上統(tǒng)一的數(shù)據(jù)源,為上層應(yīng)用服務(wù)提供數(shù)據(jù)訪問接口。而分布式異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)不能對(duì)生產(chǎn)節(jié)點(diǎn)產(chǎn)生影響,所以只能將生產(chǎn)系統(tǒng)作為異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)的數(shù)據(jù)源,即將生產(chǎn)節(jié)點(diǎn)上的數(shù)據(jù)同步到前置機(jī)上,作為異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)中的數(shù)據(jù)操作對(duì)象。前置機(jī)節(jié)點(diǎn)與生產(chǎn)節(jié)點(diǎn)上的數(shù)據(jù)需要定期更新,為上層應(yīng)用服務(wù)提供有效的數(shù)據(jù)源。
[0003]不同的數(shù)據(jù)庫(kù)系統(tǒng)之間采用的數(shù)據(jù)同步與備份技術(shù)有較大差異,且需要用戶具備一定的背景知識(shí),正確配置相關(guān)參數(shù),才可以實(shí)施數(shù)據(jù)同步技術(shù)。這種實(shí)施方式受到用戶水平、數(shù)據(jù)庫(kù)系統(tǒng)差異的限制,使數(shù)據(jù)同步過程難以實(shí)現(xiàn)自動(dòng)化。因此,針對(duì)生產(chǎn)節(jié)點(diǎn)與前置機(jī)節(jié)點(diǎn)之間的數(shù)據(jù)同步問題,設(shè)計(jì)一種自動(dòng)化的數(shù)據(jù)同步機(jī)制,是解決此類問題的關(guān)鍵之一。
[0004]從技術(shù)方法層面,主要有兩種思路實(shí)現(xiàn)數(shù)據(jù)同步,實(shí)現(xiàn)生產(chǎn)節(jié)點(diǎn)與前置機(jī)節(jié)點(diǎn)之間的數(shù)據(jù)同步。
[0005]思路一是針對(duì)生產(chǎn)節(jié)點(diǎn)上的數(shù)據(jù)庫(kù),分析其日志文件,從中提取出DDL與DML語句,并將這些語句傳送到前置機(jī)節(jié)點(diǎn)上。前置機(jī)節(jié)點(diǎn)根據(jù)DDL與DML語句,進(jìn)行增量同步。這種機(jī)制可以實(shí)現(xiàn)生產(chǎn)節(jié)點(diǎn)與前置機(jī)節(jié)點(diǎn)之間的快速的數(shù)據(jù)同步。但是,該機(jī)制存在一些問題:(1)需要生產(chǎn)節(jié)點(diǎn)開啟數(shù)據(jù)庫(kù)的日志功能,并正確配置相關(guān)參數(shù),否則不能進(jìn)行增量同步;(2)數(shù)據(jù)庫(kù)系統(tǒng)一般只提供了日志文件的解析接口,而沒有提供完整的增量同步功能;(3)不同數(shù)據(jù)庫(kù)系統(tǒng)之間的日志記錄方式不同,解析日志需要用戶具備一定的相關(guān)知識(shí),這些因素都限制了增量同步的使用范圍。
[0006]思路二是在生產(chǎn)節(jié)點(diǎn)與前置機(jī)節(jié)點(diǎn)之間進(jìn)行全量同步。每次同步,生產(chǎn)節(jié)點(diǎn)上的數(shù)據(jù)庫(kù)都會(huì)將所有數(shù)據(jù)同步到前置機(jī)節(jié)點(diǎn)中。這種同步方式對(duì)系統(tǒng)的資源消耗較大,而且部分?jǐn)?shù)據(jù)庫(kù)沒有提供完整的數(shù)據(jù)遷移工具,無法實(shí)現(xiàn)同步自動(dòng)化。
【發(fā)明內(nèi)容】
[0007]本發(fā)明解決的技術(shù)問題在于提供一種實(shí)現(xiàn)多源異構(gòu)數(shù)據(jù)資源自動(dòng)同步的方法;構(gòu)建在生產(chǎn)節(jié)點(diǎn)與前置機(jī)節(jié)點(diǎn)之間,實(shí)現(xiàn)數(shù)據(jù)的同步。
[0008]本發(fā)明解決上述技術(shù)問題的技術(shù)方案是:
[0009]首先,元數(shù)據(jù)服務(wù)節(jié)點(diǎn)向前置機(jī)節(jié)點(diǎn)發(fā)出同步更新請(qǐng)求,前置機(jī)節(jié)點(diǎn)接受請(qǐng)求,并從中解析出相關(guān)參數(shù):數(shù)據(jù)庫(kù)地址、數(shù)據(jù)庫(kù)名、用戶名、密碼等;
[0010]解析出的參數(shù)傳遞給配置分析器,配置分析器連接源數(shù)據(jù)庫(kù),讀取源數(shù)據(jù)庫(kù)的日志配置信息,根據(jù)數(shù)據(jù)庫(kù)的類型及配置信息,判斷是否可以采用增量同步方式;[0011]如果增量同步方式可行,日志解析器將首先根據(jù)數(shù)據(jù)庫(kù)類型,初始化解析環(huán)境,然后啟用一個(gè)線程,從數(shù)據(jù)庫(kù)中讀取日志文件中記錄的DDL和DML語句,并保存在本地的緩存中;接著,同步更新器再啟用另外一個(gè)線程,從緩存中依次取出DML或DDL語句,更新前置機(jī)節(jié)點(diǎn)上的數(shù)據(jù)庫(kù);
[0012]如果源數(shù)據(jù)庫(kù)需要采用全量同步更新方式,同步更新器根據(jù)數(shù)據(jù)庫(kù)類型,使用現(xiàn)有的數(shù)據(jù)同步或備份工具,構(gòu)造出一個(gè)自動(dòng)化的數(shù)據(jù)同步腳本文件;然后,同步更新器將創(chuàng)建一個(gè)新的進(jìn)程運(yùn)行腳本,進(jìn)行數(shù)據(jù)同步;
[0013]同步完成后,同步更新器將更新元數(shù)據(jù)節(jié)點(diǎn)中的同步狀態(tài)信息,報(bào)告同步過程已完成。
[0014]生產(chǎn)節(jié)點(diǎn)與前置機(jī)節(jié)點(diǎn)是分布式異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)中的組件;其中,生產(chǎn)節(jié)點(diǎn)是指已部署的生產(chǎn)系統(tǒng)中的提供數(shù)據(jù)源的節(jié)點(diǎn);前置機(jī)節(jié)點(diǎn)是指在分布式異構(gòu)數(shù)據(jù)庫(kù)中提供數(shù)據(jù)源的節(jié)點(diǎn)。
[0015]所述的配置分析器、日志解析器、同步更新器設(shè)置在前置機(jī)節(jié)點(diǎn)上。
[0016]所述的配置分析器需要對(duì)每種數(shù)據(jù)庫(kù)的配置信息進(jìn)行識(shí)別,具體如下:
[0017]對(duì)于MySQL數(shù)據(jù)庫(kù),查看數(shù)據(jù)庫(kù)是否開啟二進(jìn)制日志功能,如果數(shù)據(jù)庫(kù)系統(tǒng)沒有開啟二進(jìn)制日志功能,則使用全量同步模式;如果二進(jìn)制日志功能開啟,則判定需要采用增量同步模式;
[0018]對(duì)于Oracle、DB2數(shù)據(jù)庫(kù),查看數(shù)據(jù)庫(kù)系統(tǒng)是否開啟歸檔日志模式,如果開啟,則判定可采用增量同步模式,否則判定需要采用全量同步模式;
[0019]對(duì)于SQL Server數(shù)據(jù)庫(kù),查看日志模式是否為完全日志工作模式,如果是,則可采用增量同步模式,否則判定需要采用全量同步模式。
[0020]當(dāng)源數(shù)據(jù)庫(kù)可以進(jìn)行增量同步更新時(shí),日志解析器首先獲取指定時(shí)間段內(nèi)的所有日志文件,并根據(jù)數(shù)據(jù)庫(kù)類型,解析日志文件內(nèi)容,獲取DDL與DML語句;同時(shí),針對(duì)每種數(shù)據(jù)庫(kù),日志解析器將采用不同的方式解析日志文件內(nèi)容,具體如下:
[0021]對(duì)于MySQL數(shù)據(jù)庫(kù),通過調(diào)用內(nèi)置的mysqlbinlog工具,查詢?nèi)罩緝?nèi)容,獲取相應(yīng)的DDL與DML語句;
[0022]對(duì)于Oracle數(shù)據(jù)庫(kù),通過使用LogMiner工具,解析歸檔日志的內(nèi)容;首先調(diào)用內(nèi)置的存儲(chǔ)過程sys.DBMS._L0GMNR_D.BUILD從redo日志中獲取LogMiner所需的數(shù)據(jù)字典;然后,添加需要解析的日志文件,并進(jìn)行解析;最后,查看解析結(jié)果視圖,獲取DDL與DML操作語句;
[0023]對(duì)于DB2數(shù)據(jù)庫(kù),首先通過調(diào)用數(shù)據(jù)庫(kù)系統(tǒng)內(nèi)置的API接口 --db2ReadL0gN0C0nn,初始化解析環(huán)境;然后,調(diào)用db2ReadLog接口,逐條解析日志記錄,獲取DDL與DML語句;
[0024]對(duì)于SQL Server數(shù)據(jù)庫(kù),利用fn_dblog,讀取SQL Server日志,并根據(jù)SQLServer 二進(jìn)制日志文件格式,逐條進(jìn)行解析,獲取DDL與DML語句。
[0025]當(dāng)確定同步方式后,同步更新器根據(jù)選擇的同步方式,更新前置機(jī)節(jié)點(diǎn)上的數(shù)據(jù)庫(kù);如果采用增量同步更新方式,同步更新器將啟用一個(gè)線程獲取DDL與DML語句,并保存在本地的緩存中;同時(shí),它將啟動(dòng)另外一個(gè)線程,依次執(zhí)行DDL與DML語句,更新本地服務(wù)器內(nèi)容;如果是全量更新方式,同步更新器將開啟一個(gè)新線程,并創(chuàng)建一個(gè)新的數(shù)據(jù)同步腳本,調(diào)用系統(tǒng)的進(jìn)程創(chuàng)建對(duì)象ProcessBuilder執(zhí)行同步腳本,并重定向錯(cuò)誤輸出流到輸入流中,獲取同步進(jìn)度信息,具體如下:
[0026]對(duì)于Oracle、MySQL數(shù)據(jù)庫(kù),同步更新器使用數(shù)據(jù)庫(kù)系統(tǒng)提供的dump及l(fā)oad工具,將源數(shù)據(jù)庫(kù)的內(nèi)容復(fù)制到目標(biāo)數(shù)據(jù)庫(kù)的服務(wù)器上,再利用load工具,載入數(shù)據(jù);
[0027]對(duì)于DB2數(shù)據(jù)庫(kù),首先利用DB2內(nèi)置的命令,編目源數(shù)據(jù);然后,利用db21ook工具,獲取源數(shù)據(jù)庫(kù)所有表的名稱;接著,查看源數(shù)據(jù)庫(kù)的編碼方式,利用export工具,以ixf格式逐表將源數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)出;最后,利用load工具,將數(shù)據(jù)載入到本地?cái)?shù)據(jù)庫(kù)中。
[0028]本發(fā)明的有益效果有:
[0029](I)能自動(dòng)識(shí)別數(shù)據(jù)庫(kù)類型并判斷配置,實(shí)現(xiàn)自動(dòng)數(shù)據(jù)庫(kù)同步:系統(tǒng)通過分析需要同步的源數(shù)據(jù)庫(kù)的配置參數(shù),選擇合理的同步方案,封裝多種數(shù)據(jù)庫(kù)在實(shí)施數(shù)據(jù)同步過程中的細(xì)節(jié),為上層應(yīng)用系統(tǒng)提供了統(tǒng)一接口,降低了用戶的配置難度。同時(shí),系統(tǒng)集成現(xiàn)有數(shù)據(jù)庫(kù)同步工具,構(gòu)造自動(dòng)化的數(shù)據(jù)同步方案,從而實(shí)現(xiàn)自動(dòng)數(shù)據(jù)庫(kù)同步。
[0030](2)降低數(shù)據(jù)庫(kù)同步的復(fù)雜度,改善用戶體驗(yàn),本發(fā)明提出的數(shù)據(jù)同步機(jī)制是針對(duì)多種數(shù)據(jù)庫(kù)實(shí)施的,通過封裝同步過程中的細(xì)節(jié),降低數(shù)據(jù)同步的復(fù)雜度,改善用戶體驗(yàn),滿足自動(dòng)化同步的需求。
[0031](3)提供了集成數(shù)據(jù)同步接口,能對(duì)多類型數(shù)據(jù)庫(kù)進(jìn)行同步:本方案通過集成的方式,可以做到支持多種數(shù)據(jù)庫(kù)系統(tǒng)的數(shù)據(jù)同步功能,提高了數(shù)據(jù)同步方案的使用范圍。同時(shí),本發(fā)明提供的自動(dòng)化數(shù)據(jù)同步方案,通過集成日志分析、數(shù)據(jù)遷移等工具,提供了一套自動(dòng)化的數(shù)據(jù)同步方案。通過封裝數(shù)據(jù)同步過程中具體細(xì)節(jié),為上層應(yīng)用接口提供統(tǒng)一的數(shù)據(jù)同步設(shè)置工具,屏蔽底層數(shù)據(jù)同步技術(shù)之間的差異。
【專利附圖】
【附圖說明】
[0032]下面結(jié)合附圖對(duì)本發(fā)明進(jìn)一步說明:
[0033]圖1是本發(fā)明系統(tǒng)構(gòu)件組成圖。
[0034]圖2是本發(fā)明執(zhí)行流程圖。
【具體實(shí)施方式】
[0035]由于歷史因素等原因,信息系統(tǒng)在構(gòu)建過程中,往往會(huì)采用多種數(shù)據(jù)庫(kù)。不同的數(shù)據(jù)庫(kù)之間數(shù)據(jù)不能直接被上層應(yīng)用系統(tǒng)共享,造成了“信息孤島”現(xiàn)象。分布式異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)通過中間數(shù)據(jù)引擎,緩沖不同數(shù)據(jù)庫(kù)的查詢結(jié)果,為上層系統(tǒng)提供統(tǒng)一的數(shù)據(jù)訪問接口,屏蔽了底層的數(shù)據(jù)查詢細(xì)節(jié)。本發(fā)明所述的生產(chǎn)節(jié)點(diǎn)與前置機(jī)節(jié)點(diǎn)是分布式異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)中的組件。其中,生產(chǎn)節(jié)點(diǎn)是指已部署的生產(chǎn)系統(tǒng)中的提供數(shù)據(jù)源的節(jié)點(diǎn);前置機(jī)節(jié)點(diǎn)是指在分布式異構(gòu)數(shù)據(jù)庫(kù)中提供數(shù)據(jù)源的節(jié)點(diǎn),定期與生產(chǎn)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步,使前置機(jī)節(jié)點(diǎn)與生產(chǎn)節(jié)點(diǎn)的數(shù)據(jù)保持一致。
[0036]本發(fā)明是一種構(gòu)建在生產(chǎn)節(jié)點(diǎn)與前置機(jī)節(jié)點(diǎn)之間的數(shù)據(jù)同步方法。當(dāng)用戶設(shè)定同步參數(shù)后,元數(shù)據(jù)服務(wù)節(jié)點(diǎn)向生產(chǎn)節(jié)點(diǎn)發(fā)起數(shù)據(jù)同步請(qǐng)求。前置機(jī)節(jié)點(diǎn)從請(qǐng)求中取出相關(guān)參數(shù),并對(duì)生產(chǎn)節(jié)點(diǎn)上的數(shù)據(jù)庫(kù)配置進(jìn)行分析。根據(jù)分析的結(jié)果,前置機(jī)節(jié)點(diǎn)選擇增量同步或全量同步的方式,將生產(chǎn)節(jié)點(diǎn)中的數(shù)據(jù)同步到前置機(jī)節(jié)點(diǎn)上。在整個(gè)數(shù)據(jù)同步的過程中,用戶只需要提供數(shù)據(jù)庫(kù)名字、數(shù)據(jù)庫(kù)地址、用戶及密碼等基本信息,即可在生產(chǎn)節(jié)點(diǎn)與前置機(jī)節(jié)點(diǎn)之間定期進(jìn)行數(shù)據(jù)同步。相對(duì)現(xiàn)有的數(shù)據(jù)同步技術(shù),本發(fā)明封裝了多種數(shù)據(jù)庫(kù)系統(tǒng)的數(shù)據(jù)同步過程中的細(xì)節(jié)問題,并且可以自動(dòng)選擇適宜的同步方式進(jìn)行數(shù)據(jù)同步。
[0037]為實(shí)現(xiàn)上述目的,一種自動(dòng)化的數(shù)據(jù)同步機(jī)制,由三個(gè)關(guān)鍵部件構(gòu)成:配置分析器、日志解析器、同步更新器。
[0038]配置分析器:連接生產(chǎn)節(jié)點(diǎn)上的數(shù)據(jù)庫(kù),讀取相關(guān)配置,分析數(shù)據(jù)庫(kù)能否采用增量同步的模式。
[0039]日志解析器:日志解析器讀取生產(chǎn)節(jié)點(diǎn)上的數(shù)據(jù)庫(kù)日志文件,并進(jìn)行解析,獲得DML與DDL操作語句。前置機(jī)節(jié)點(diǎn)通過網(wǎng)絡(luò)將解析結(jié)果從生產(chǎn)節(jié)點(diǎn)上拉過來,保存在本地的緩存中。
[0040]同步更新器:當(dāng)配置分析器完成數(shù)據(jù)庫(kù)配置分析后,同步更新器根據(jù)分析結(jié)果進(jìn)行數(shù)據(jù)同步。當(dāng)配置分析器確定生產(chǎn)節(jié)點(diǎn)上的數(shù)據(jù)庫(kù)可采用增量同步時(shí),同步更新器調(diào)用日志解析器,獲取緩存中的DDL和DML語句,更新前置機(jī)節(jié)點(diǎn)上的數(shù)據(jù)庫(kù)內(nèi)容;如果配置分析器確定生產(chǎn)數(shù)據(jù)庫(kù)需要采用全量同步,同步更新器通過調(diào)用數(shù)據(jù)庫(kù)內(nèi)置的數(shù)據(jù)遷移或備份工具,將數(shù)據(jù)從生產(chǎn)節(jié)點(diǎn)拉至前置機(jī)節(jié)點(diǎn),更新前置機(jī)節(jié)點(diǎn)上的數(shù)據(jù)庫(kù)內(nèi)容。
[0041]具體如附圖所示,首先,元數(shù)據(jù)服務(wù)節(jié)點(diǎn)向前置機(jī)節(jié)點(diǎn)發(fā)出同步更新請(qǐng)求,前置機(jī)節(jié)點(diǎn)接受請(qǐng)求,并從中解析出相關(guān)參數(shù):數(shù)據(jù)庫(kù)地址、數(shù)據(jù)庫(kù)名、用戶名、密碼等。解析出的參數(shù)傳遞給配置分析器,配置分析器連接源數(shù)據(jù)庫(kù),讀取源數(shù)據(jù)庫(kù)的日志配置信息,根據(jù)數(shù)據(jù)庫(kù)的類型及配置信息,判斷是否可以采用增量同步方式。如果增量同步方式可行,日志解析器將首先根據(jù)數(shù)據(jù)庫(kù)類型,初始化解析環(huán)境,然后啟用一個(gè)線程,從數(shù)據(jù)庫(kù)中讀取日志文件中記錄的DDL和DML語句,并保存在本地的緩存中。接著,同步更新器再啟用另外一個(gè)線程,從緩存中依次取出DML或DDL語句,更新前置機(jī)節(jié)點(diǎn)上的數(shù)據(jù)庫(kù)。如果源數(shù)據(jù)庫(kù)需要采用全量同步更新方式,同步更新器根據(jù)數(shù)據(jù)庫(kù)類型,使用現(xiàn)有的數(shù)據(jù)同步或備份工具,構(gòu)造出一個(gè)自動(dòng)化的數(shù)據(jù)同步腳本文件;然后,同步更新器將創(chuàng)建一個(gè)新的進(jìn)程運(yùn)行腳本,進(jìn)行數(shù)據(jù)同步。同步完成后,同步更新器將更新元數(shù)據(jù)節(jié)點(diǎn)中的同步狀態(tài)信息,報(bào)告同步過程已完成。
[0042]由于本發(fā)明需要實(shí)現(xiàn)多種數(shù)據(jù)庫(kù)的數(shù)據(jù)同步過程。因此,配置識(shí)別器需要對(duì)每種的數(shù)據(jù)庫(kù)的配置信息進(jìn)行識(shí)別,具體方案如下:
[0043]對(duì)于MySQL數(shù)據(jù)庫(kù),查看數(shù)據(jù)庫(kù)是否開啟二進(jìn)制日志功能,如果數(shù)據(jù)庫(kù)系統(tǒng)沒有開啟二進(jìn)制日志功能,則使用全量同步模式;如果二進(jìn)制日志功能開啟,則判定需要采用增量同步模式。
[0044]對(duì)于Oracle、DB2數(shù)據(jù)庫(kù),查看數(shù)據(jù)庫(kù)系統(tǒng)是否開啟歸檔日志模式,如果開啟,則判定可采用增量同步模式,否則判定需要采用全量同步模式
[0045]對(duì)于SQL Server數(shù)據(jù)庫(kù),查看日志模式是否為完全日志工作模式,如果是,則可采用增量同步模式,否則判定需要采用全量同步模式
[0046]日志解析器:當(dāng)源數(shù)據(jù)庫(kù)可以進(jìn)行增量同步更新時(shí),日志解析器首先獲取指定時(shí)間段內(nèi)的所有日志文件,并根據(jù)數(shù)據(jù)庫(kù)類型,解析日志文件內(nèi)容,獲取DDL與DML語句。由于分布式異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)的是建立在虛擬表的概念上,因此日志解析器將只獲取針對(duì)表操作的DDL和DML語句。同時(shí),針對(duì)每種數(shù)據(jù)庫(kù),日志解析器將采用不同的方式解析日志文件內(nèi)容,具體方案如下:
[0047]對(duì)于MySQL數(shù)據(jù)庫(kù),通過調(diào)用內(nèi)置的mysqlbinlog工具,查詢?nèi)罩緝?nèi)容,獲取相應(yīng)的DDL與DML語句
[0048]對(duì)于Oracle數(shù)據(jù)庫(kù),通過使用LogMiner工具,解析歸檔日志的內(nèi)容。首先調(diào)用內(nèi)置的存儲(chǔ)過程sys.DBMS._LOGMNR_D.BUILD從redo日志中獲取LogMiner所需的數(shù)據(jù)字典。然后,日志解析器添加需要解析的日志文件,并進(jìn)行解析。最后,查看解析結(jié)果視圖,獲取DDL與DML操作語句。
[0049]對(duì)于DB2數(shù)據(jù)庫(kù),首先通過調(diào)用數(shù)據(jù)庫(kù)系統(tǒng)內(nèi)置的API接口 一db2ReadLogNoConn,初始化解析環(huán)境。然后,調(diào)用db2ReadLog接口,逐條解析日志記錄,獲取DDL與DML語句
[0050]對(duì)于SQL Server數(shù)據(jù)庫(kù),利用fn_dblog,讀取SQL Server日志,并根據(jù)SQLServer 二進(jìn)制日志文件格式,逐條進(jìn)行解析,獲取DDL與DML語句。
[0051]同步更新器:當(dāng)確定同步方式后,同步更新器根據(jù)選擇的同步方式,更新前置機(jī)節(jié)點(diǎn)上的數(shù)據(jù)庫(kù)。如果采用增量同步更新方式,同步更新器將啟用一個(gè)線程獲取DDL與DML語句,并保存在本地的緩存中;同時(shí),它將啟動(dòng)另外一個(gè)線程,依次執(zhí)行DDL與DML語句,更新本地服務(wù)器內(nèi)容。如果是全量更新方式,同步更新器將開啟一個(gè)新線程,并創(chuàng)建一個(gè)新的數(shù)據(jù)同步腳本,調(diào)用系統(tǒng)的進(jìn)程創(chuàng)建對(duì)象ProcessBuilder執(zhí)行同步腳本,并重定向錯(cuò)誤輸出流到輸入流中,獲取同步進(jìn)度信息,具體方案如下:
[0052]1.對(duì)于Oracle、MySQL數(shù)據(jù)庫(kù),同步更新器使用數(shù)據(jù)庫(kù)系統(tǒng)提供的dump及l(fā)oad工具,將源數(shù)據(jù)庫(kù)的內(nèi)容復(fù)制到目標(biāo)數(shù)據(jù)庫(kù)的服務(wù)器上,再利用load工具,載入數(shù)據(jù)。
[0053]2.對(duì)于DB2數(shù)據(jù)庫(kù),首先利用DB2內(nèi)置的命令,編目源數(shù)據(jù);然后,利用db21ook工具,獲取源數(shù)據(jù)庫(kù)所有表的名稱;接著,查看源數(shù)據(jù)庫(kù)的編碼方式,利用export工具,以ixf格式逐表將源數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)出;最后,利用load工具,將數(shù)據(jù)載入到本地?cái)?shù)據(jù)庫(kù)中。
【權(quán)利要求】
1.一種實(shí)現(xiàn)多源異構(gòu)數(shù)據(jù)資源自動(dòng)同步的方法,其特征在于: 首先,元數(shù)據(jù)服務(wù)節(jié)點(diǎn)向前置機(jī)節(jié)點(diǎn)發(fā)出同步更新請(qǐng)求,前置機(jī)節(jié)點(diǎn)接受請(qǐng)求,并從中解析出相關(guān)參數(shù):數(shù)據(jù)庫(kù)地址、數(shù)據(jù)庫(kù)名、用戶名、密碼等; 解析出的參數(shù)傳遞給配置分析器,配置分析器連接源數(shù)據(jù)庫(kù),讀取源數(shù)據(jù)庫(kù)的日志配置信息,根據(jù)數(shù)據(jù)庫(kù)的類型及配置信息,判斷是否可以采用增量同步方式; 如果增量同步方式可行,日志解析器將首先根據(jù)數(shù)據(jù)庫(kù)類型,初始化解析環(huán)境,然后啟用一個(gè)線程,從數(shù)據(jù)庫(kù)中讀取日志文件中記錄的DDL和DML語句,并保存在本地的緩存中;接著,同步更新器再啟用另外一個(gè)線程,從緩存中依次取出DML或DDL語句,更新前置機(jī)節(jié)點(diǎn)上的數(shù)據(jù)庫(kù); 如果源數(shù)據(jù)庫(kù)需要采用全量同步更新方式,同步更新器根據(jù)數(shù)據(jù)庫(kù)類型,使用現(xiàn)有的數(shù)據(jù)同步或備份工具,構(gòu)造出一個(gè)自動(dòng)化的數(shù)據(jù)同步腳本文件;然后,同步更新器將創(chuàng)建一個(gè)新的進(jìn)程運(yùn)行腳本,進(jìn)行數(shù)據(jù)同步; 同步完成后,同步更新器將更新元數(shù)據(jù)節(jié)點(diǎn)中的同步狀態(tài)信息,報(bào)告同步過程已完成。
2.根據(jù)權(quán)利要求1所述的實(shí)現(xiàn)多源異構(gòu)數(shù)據(jù)資源自動(dòng)同步的方法,其特征在于:生產(chǎn)節(jié)點(diǎn)與前置機(jī)節(jié)點(diǎn)是分布式異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)中的組件;其中,生產(chǎn)節(jié)點(diǎn)是指已部署的生產(chǎn)系統(tǒng)中的提供數(shù)據(jù)源的節(jié)點(diǎn);前置機(jī)節(jié)點(diǎn)是指在分布式異構(gòu)數(shù)據(jù)庫(kù)中提供數(shù)據(jù)源的節(jié)點(diǎn)。
3.根據(jù)權(quán)利要求1所述的實(shí)現(xiàn)多源異構(gòu)數(shù)據(jù)資源自動(dòng)同步的方法,其特征在于:所述的配置分析器、日志解析器、 同步更新器設(shè)置在前置機(jī)節(jié)點(diǎn)上。
4.根據(jù)權(quán)利要求2所述的實(shí)現(xiàn)多源異構(gòu)數(shù)據(jù)資源自動(dòng)同步的方法,其特征在于:所述的配置分析器、日志解析器、同步更新器設(shè)置在前置機(jī)節(jié)點(diǎn)上。
5.根據(jù)權(quán)利要求1至4任一項(xiàng)所述的實(shí)現(xiàn)多源異構(gòu)數(shù)據(jù)資源自動(dòng)同步的方法,其特征在于:所述的配置分析器需要對(duì)每種數(shù)據(jù)庫(kù)的配置信息進(jìn)行識(shí)別,具體如下: 對(duì)于MySQL數(shù)據(jù)庫(kù),查看數(shù)據(jù)庫(kù)是否開啟二進(jìn)制日志功能,如果數(shù)據(jù)庫(kù)系統(tǒng)沒有開啟二進(jìn)制日志功能,則使用全量同步模式;如果二進(jìn)制日志功能開啟,則判定需要采用增量同步模式; 對(duì)于Oracle、DB2數(shù)據(jù)庫(kù),查看數(shù)據(jù)庫(kù)系統(tǒng)是否開啟歸檔日志模式,如果開啟,則判定可采用增量同步模式,否則判定需要采用全量同步模式; 對(duì)于SQL Server數(shù)據(jù)庫(kù),查看日志模式是否為完全日志工作模式,如果是,則可采用增量同步模式,否則判定需要采用全量同步模式。
6.根據(jù)權(quán)利要求1至4任一項(xiàng)所述的實(shí)現(xiàn)多源異構(gòu)數(shù)據(jù)資源自動(dòng)同步的方法,其特征在于:當(dāng)源數(shù)據(jù)庫(kù)可以進(jìn)行增量同步更新時(shí),日志解析器首先獲取指定時(shí)間段內(nèi)的所有日志文件,并根據(jù)數(shù)據(jù)庫(kù)類型,解析日志文件內(nèi)容,獲取DDL與DML語句;同時(shí),針對(duì)每種數(shù)據(jù)庫(kù),日志解析器將采用不同的方式解析日志文件內(nèi)容,具體如下: 對(duì)于MySQL數(shù)據(jù)庫(kù),通過調(diào)用內(nèi)置的mysqlbinlog工具,查詢?nèi)罩緝?nèi)容,獲取相應(yīng)的DDL與DML語句; 對(duì)于Oracle數(shù)據(jù)庫(kù),通過使用LogMiner工具,解析歸檔日志的內(nèi)容;首先調(diào)用內(nèi)置的存儲(chǔ)過程sys.DBMS._LOGMNR_D.BUILD從redo日志中獲取LogMiner所需的數(shù)據(jù)字典;然后,添加需要解析的日志文件,并進(jìn)行解析;最后,查看解析結(jié)果視圖,獲取DDL與DML操作語句;對(duì)于DB2數(shù)據(jù)庫(kù),首先通過調(diào)用數(shù)據(jù)庫(kù)系統(tǒng)內(nèi)置的API接口 --db2ReadL0gN0C0nn,初始化解析環(huán)境;然后,調(diào)用db2ReadLog接口,逐條解析日志記錄,獲取DDL與DML語句; 對(duì)于SQL Server數(shù)據(jù)庫(kù),利用fn_dblog,讀取SQL Server日志,并根據(jù)SQL Server 二進(jìn)制日志文件格式,逐條進(jìn)行解析,獲取DDL與DML語句。
7.根據(jù)權(quán)利要求5所述的實(shí)現(xiàn)多源異構(gòu)數(shù)據(jù)資源自動(dòng)同步的方法,其特征在于:當(dāng)源數(shù)據(jù)庫(kù)可以進(jìn)行增量同步更新時(shí),日志解析器首先獲取指定時(shí)間段內(nèi)的所有日志文件,并根據(jù)數(shù)據(jù)庫(kù)類型,解析日志文件內(nèi)容,獲取DDL與DML語句;同時(shí),針對(duì)每種數(shù)據(jù)庫(kù),日志解析器將采用不同的方式解析日志文件內(nèi)容,具體如下: 對(duì)于MySQL數(shù)據(jù)庫(kù),通過調(diào)用內(nèi)置的mysqlbinlog工具,查詢?nèi)罩緝?nèi)容,獲取相應(yīng)的DDL與DML語句; 對(duì)于Oracle數(shù)據(jù)庫(kù),通過使用LogMiner工具,解析歸檔日志的內(nèi)容;首先調(diào)用內(nèi)置的存儲(chǔ)過程sys.DBMS._LOGMNR_D.BUILD從redo日志中獲取LogMiner所需的數(shù)據(jù)字典;然后,添加需要解析的日志文件,并進(jìn)行解析;最后,查看解析結(jié)果視圖,獲取DDL與DML操作語句; 對(duì)于DB2數(shù)據(jù)庫(kù),首先通過調(diào)用數(shù)據(jù)庫(kù)系統(tǒng)內(nèi)置的API接口 --db2ReadL0gN0C0nn,初始化解析環(huán)境;然后,調(diào)用db2ReadLog接口,逐條解析日志記錄,獲取DDL與DML語句; 對(duì)于SQL Server數(shù)據(jù)庫(kù),利用fn_dblog,讀取SQL Server日志,并根據(jù)SQL Server 二進(jìn)制日志文件格式,逐條進(jìn)行解析,獲取DDL與DML語句。
8.根據(jù)權(quán)利要求1至4任一項(xiàng)所述的實(shí)現(xiàn)多源異構(gòu)數(shù)據(jù)資源自動(dòng)同步的方法,其特征在于:當(dāng)確定同步方式后,同步更新器根據(jù)選擇的同步方式,更新前置機(jī)節(jié)點(diǎn)上的數(shù)據(jù)庫(kù);如果采用增量同步更新方式,同步更新器將啟用一個(gè)線程獲取DDL與DML語句,并保存在本地的緩存中;同時(shí),它將啟動(dòng)另外一個(gè)線程,依次執(zhí)行DDL與DML語句,更新本地服務(wù)器內(nèi)容;如果是全量更新方式,同步更新器將開啟一個(gè)新線程,并創(chuàng)建一個(gè)新的數(shù)據(jù)同步腳本,調(diào)用系統(tǒng)的進(jìn)程創(chuàng)建對(duì)象ProcessBuilder執(zhí)行同步腳本,并重定向錯(cuò)誤輸出流到輸入流中,獲取同步進(jìn)度信息,具體如下: 對(duì)于Oracle、MySQL數(shù)據(jù)庫(kù),同步更新器使用數(shù)據(jù)庫(kù)系統(tǒng)提供的dump及l(fā)oad工具,將源數(shù)據(jù)庫(kù)的內(nèi)容復(fù)制到目標(biāo)數(shù)據(jù)庫(kù)的服務(wù)器上,再利用load工具,載入數(shù)據(jù); 對(duì)于DB2數(shù)據(jù)庫(kù),首先利用DB2內(nèi)置的命令,編目源數(shù)據(jù);然后,利用db21ook工具,獲取源數(shù)據(jù)庫(kù)所有表的名稱;接著,查看源數(shù)據(jù)庫(kù)的編碼方式,利用export工具,以ixf格式逐表將源數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)出;最后,利用load工具,將數(shù)據(jù)載入到本地?cái)?shù)據(jù)庫(kù)中。
9.根據(jù)權(quán)利要求5所述的實(shí)現(xiàn)多源異構(gòu)數(shù)據(jù)資源自動(dòng)同步的方法,其特征在于:當(dāng)確定同步方式后,同步更新器根據(jù)選擇的同步方式,更新前置機(jī)節(jié)點(diǎn)上的數(shù)據(jù)庫(kù);如果采用增量同步更新方式,同步更新器將啟用一個(gè)線程獲取DDL與DML語句,并保存在本地的緩存中;同時(shí),它將啟動(dòng)另外一個(gè)線程,依次執(zhí)行DDL與DML語句,更新本地服務(wù)器內(nèi)容;如果是全量更新方式,同步更新器將開啟一個(gè)新線程,并創(chuàng)建一個(gè)新的數(shù)據(jù)同步腳本,調(diào)用系統(tǒng)的進(jìn)程創(chuàng)建對(duì)象ProcessBuilder執(zhí)行同步腳本,并重定向錯(cuò)誤輸出流到輸入流中,獲取同步進(jìn)度信息,具體如下: 對(duì)于Oracle、MySQL數(shù)據(jù)庫(kù),同步更新器使用數(shù)據(jù)庫(kù)系統(tǒng)提供的dump及l(fā)oad工具,將源數(shù)據(jù)庫(kù)的內(nèi)容復(fù)制到目標(biāo)數(shù)據(jù)庫(kù)的服務(wù)器上,再利用load工具,載入數(shù)據(jù);對(duì)于DB2數(shù)據(jù)庫(kù),首先利用DB2內(nèi)置的命令,編目源數(shù)據(jù);然后,利用db21ook工具,獲取源數(shù)據(jù)庫(kù)所有表的名稱;接著,查看源數(shù)據(jù)庫(kù)的編碼方式,利用export工具,以ixf格式逐表將源數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)出;最后,利用load工具,將數(shù)據(jù)載入到本地?cái)?shù)據(jù)庫(kù)中。
10.根據(jù)權(quán)利要求6所述的實(shí)現(xiàn)多源異構(gòu)數(shù)據(jù)資源自動(dòng)同步的方法,其特征在于:當(dāng)確定同步方式后,同步更新器根據(jù)選擇的同步方式,更新前置機(jī)節(jié)點(diǎn)上的數(shù)據(jù)庫(kù);如果采用增量同步更新方式,同步更新器將啟用一個(gè)線程獲取DDL與DML語句,并保存在本地的緩存中;同時(shí),它將啟動(dòng)另外一個(gè)線程,依次執(zhí)行DDL與DML語句,更新本地服務(wù)器內(nèi)容;如果是全量更新方式,同步更新器將開啟一個(gè)新線程,并創(chuàng)建一個(gè)新的數(shù)據(jù)同步腳本,調(diào)用系統(tǒng)的進(jìn)程創(chuàng)建對(duì)象ProcessBuilder執(zhí)行同步腳本,并重定向錯(cuò)誤輸出流到輸入流中,獲取同步進(jìn)度信息,具體如下: 對(duì)于Oracle、MySQL數(shù)據(jù)庫(kù),同步更新器使用數(shù)據(jù)庫(kù)系統(tǒng)提供的dump及l(fā)oad工具,將源數(shù)據(jù)庫(kù)的內(nèi)容復(fù)制到目 標(biāo)數(shù)據(jù)庫(kù)的服務(wù)器上,再利用load工具,載入數(shù)據(jù); 對(duì)于DB2數(shù)據(jù)庫(kù),首先利用DB2內(nèi)置的命令,編目源數(shù)據(jù);然后,利用db21ook工具,獲取源數(shù)據(jù)庫(kù)所有表的名稱;接著,查看源數(shù)據(jù)庫(kù)的編碼方式,利用export工具,以ixf格式逐表將源數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)出;最后,利用load工具,將數(shù)據(jù)載入到本地?cái)?shù)據(jù)庫(kù)中。
【文檔編號(hào)】G06F17/30GK103617176SQ201310539536
【公開日】2014年3月5日 申請(qǐng)日期:2013年11月4日 優(yōu)先權(quán)日:2013年11月4日
【發(fā)明者】許丞, 謝毅, 劉祥濤, 岳強(qiáng), 季統(tǒng)凱 申請(qǐng)人:廣東電子工業(yè)研究院有限公司