專利名稱::一種通用可配置的數(shù)據(jù)庫數(shù)據(jù)遷移方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種數(shù)據(jù)庫數(shù)據(jù)遷移
技術(shù)領(lǐng)域:
,具體地說是一種一種通用可配置的數(shù)據(jù)庫數(shù)據(jù)遷移方法。
背景技術(shù):
:隨著信息技術(shù)的發(fā)展,數(shù)據(jù)庫技術(shù)的應(yīng)用越來越廣泛,目前主流的數(shù)據(jù)庫主要有oracle、sqlserver、sybase、informix等,數(shù)據(jù)庫的多樣性帶來了數(shù)據(jù)在不同數(shù)據(jù)庫之間的遷移,而且這種遷移隨著信息技術(shù)的發(fā)展也變得越來越頻繁。由于各中類型的數(shù)據(jù)其數(shù)據(jù)存儲方式各有不同且其存儲格式不公開,因此在進(jìn)行數(shù)據(jù)遷移時,各類數(shù)據(jù)庫產(chǎn)品往往只能通過私有的工具在本類數(shù)據(jù)庫產(chǎn)品中的進(jìn)行遷移,而對于不同類型數(shù)據(jù)庫之間的數(shù)據(jù)遷移各類型的數(shù)據(jù)庫均不提供相應(yīng)的支持。以往,工程師在不同數(shù)據(jù)庫間進(jìn)行數(shù)據(jù)遷移時沒有相應(yīng)的工具,只能通過手工重新建表,并且通過手動將源數(shù)據(jù)庫中的數(shù)據(jù)維護(hù)到目的數(shù)據(jù)庫中。這種遷移方式存在以下幾個缺點(diǎn)1)不同類型數(shù)據(jù)庫之間的數(shù)據(jù)描述沒有通用的格式定義,缺少一種中性的數(shù)據(jù)存儲格式。2)手動遷移極容易出現(xiàn)一些差錯,因此數(shù)據(jù)遷移后的準(zhǔn)確性較難保證。3)手動遷移數(shù)據(jù)費(fèi)時費(fèi)力,尤其是數(shù)據(jù)表較多且表中的數(shù)據(jù)行數(shù)數(shù)量級較大時更是如此。
發(fā)明內(nèi)容本發(fā)明的目的是提供一種一種通用可配置的數(shù)據(jù)庫數(shù)據(jù)遷移方法。本發(fā)明的目的是按以下方式實(shí)現(xiàn)的,包括以下內(nèi)容基于XML的數(shù)據(jù)庫連接信息配置文件格式定義,以下簡稱為DB_INF0.XML,該格式定義了連接數(shù)據(jù)所必須的信息,包括數(shù)據(jù)庫驅(qū)動類、數(shù)據(jù)庫連接所需的url、數(shù)據(jù)庫用戶名、數(shù)據(jù)庫密碼,定義格式如下〈dblnfoid=〃1〃driverClassName=〃oracle,jdbc.driver.OracleDriver〃url=〃jdbc:oracle:thin:0127.0.0.1:1521:omc〃username=〃user〃password=〃passwd〃/〉基于XML的表結(jié)構(gòu)信息配置文件格式定義,以下簡稱為TABLIE_INF0.xml,該格式定義了數(shù)據(jù)表的表名、表中各列的列名及數(shù)據(jù)類型,定義格式如下〈tablename=〃userinfo〃〉〈columnname=〃id〃type=〃integer〃/〉〈columnname=〃name〃type=〃varchar(32)〃/〉〈columnname=〃birthday〃type=〃datetime〃/〉〈/table〉基于XML的數(shù)據(jù)轉(zhuǎn)儲文件文件格式定義,以下簡稱為TABLE_DATA.xml,該格式定義了表名、列名以及表中的數(shù)據(jù)在XML中的存儲結(jié)構(gòu),定義格式如下〈tablename=〃userinfo">〈columns>〈columnname=〃id"/>〈columnname=〃name"/>〈columnname=〃birthday"/>〈/columns>〈values〉〈value〉〈v>l〈/v>〈v>wuyg〈/v>〈v>1982-09-24〈/v>〈/value>〈value〉〈v>2〈/v>〈v>wuxy〈/v>〈v>1980-12-26〈/v>〈/value>〈/values>〈/table>將源數(shù)據(jù)庫中數(shù)據(jù)導(dǎo)出為基于XML的數(shù)據(jù)轉(zhuǎn)儲文件的方法還包括,使用已定義的源數(shù)據(jù)庫連接信息自動連接到源數(shù)據(jù)庫,然后解析表結(jié)構(gòu)配置文件獲取表結(jié)構(gòu)信息,通過獲取的表結(jié)構(gòu)信息構(gòu)造數(shù)據(jù)導(dǎo)出所需的sql,進(jìn)而根據(jù)sql查詢數(shù)據(jù)并將查詢出的數(shù)據(jù)組織為基于XML的數(shù)據(jù)轉(zhuǎn)儲文件規(guī)定的格式,最后寫出為文件;將基于XML的數(shù)據(jù)轉(zhuǎn)儲文件導(dǎo)入目的數(shù)據(jù)庫的方法還包括,使用已定義的目的數(shù)據(jù)庫連接信息自動連接到目的數(shù)據(jù)庫,然后解析從源數(shù)據(jù)庫中導(dǎo)出的基于XML的數(shù)據(jù)轉(zhuǎn)儲文件,獲得表結(jié)構(gòu)信息及表中存儲的數(shù)據(jù),進(jìn)一步在目的數(shù)據(jù)庫中創(chuàng)建表,最后構(gòu)造數(shù)據(jù)導(dǎo)入所需的sql并執(zhí)行這些sql將數(shù)據(jù)導(dǎo)入到目的數(shù)據(jù)庫中;具體遷移步驟如下1)將源數(shù)據(jù)庫中數(shù)據(jù)導(dǎo)出為基于XML的數(shù)據(jù)轉(zhuǎn)儲文件(1)解析數(shù)據(jù)庫信息配置文件DBJNFO.xml并根據(jù)源數(shù)據(jù)ID獲取源數(shù)據(jù)庫連接所需信息;(2)解析數(shù)據(jù)表信息配置文件TABLE_INFO.xml,獲取數(shù)據(jù)表信息并向數(shù)據(jù)轉(zhuǎn)儲文件TABLE—DATA.xml中寫出表信息,包括表名和列名信息;(3)連接源數(shù)據(jù)庫,根據(jù)表結(jié)構(gòu)信息構(gòu)造數(shù)據(jù)導(dǎo)出所需的sql并執(zhí)行該sql進(jìn)行數(shù)據(jù)查詢;(4)對于查詢得出的數(shù)據(jù)逐條構(gòu)造為TABLE_DATA中value所需的格式并寫出到TABLE_DATA.xml中;(5)關(guān)閉源數(shù)據(jù)庫連接;2)將基于XML的數(shù)據(jù)轉(zhuǎn)儲文件導(dǎo)入目的數(shù)據(jù)庫;(1)解析數(shù)據(jù)庫信息配置文件DBJNFO.xml并根據(jù)目的數(shù)據(jù)ID獲取目的數(shù)據(jù)庫連接所需信息;(2)解析從源數(shù)據(jù)庫中導(dǎo)出的數(shù)據(jù)轉(zhuǎn)儲文件TABLE_DATA.xml中的表結(jié)構(gòu)信息,包括表名和列名信息;(3)連接目的數(shù)據(jù)庫,根據(jù)表結(jié)構(gòu)信息構(gòu)造建表所需的sql語句并執(zhí)行該語句完成表的創(chuàng)建;(4)解析從源數(shù)據(jù)庫中導(dǎo)出的數(shù)據(jù)轉(zhuǎn)儲文件TABLE_DATA.xml中的數(shù)據(jù),結(jié)合表結(jié)構(gòu)信息構(gòu)造數(shù)據(jù)導(dǎo)入所需的sql語句,執(zhí)行這些sql語句完成數(shù)據(jù)入庫;(5)關(guān)閉目的數(shù)據(jù)庫連接。本發(fā)明的優(yōu)異效果說明通過本發(fā)明的方法,可以將不同類型數(shù)據(jù)庫之間的數(shù)據(jù)遷移工作簡化。通過配置實(shí)現(xiàn)數(shù)據(jù)庫及表結(jié)構(gòu)描述,該裝置能夠自動將數(shù)據(jù)從源數(shù)據(jù)庫中導(dǎo)出為基于XML的數(shù)據(jù)轉(zhuǎn)儲文件并且能夠?qū)?dǎo)出的數(shù)據(jù)自動導(dǎo)入到目的數(shù)據(jù)庫中。優(yōu)點(diǎn)還包括以下幾個方面1)不同類型數(shù)據(jù)庫之間的數(shù)據(jù)描述實(shí)現(xiàn)了通用的格式定義,搭建了不同類型數(shù)據(jù)庫之間數(shù)據(jù)轉(zhuǎn)儲的平臺。2)通過該裝置自動完成源數(shù)據(jù)庫的導(dǎo)出和目的數(shù)據(jù)庫的導(dǎo)入,有效地保證了數(shù)據(jù)遷移的準(zhǔn)確性。3)降低了人力成本,大大提高了工作效率。具體實(shí)施例方式具體遷移步驟如下基于XML的數(shù)據(jù)庫連接信息配置文件格式定義,以下簡稱為DB_INFO.XML。該格式定義了連接數(shù)據(jù)所必須的信息,包括數(shù)據(jù)庫驅(qū)動類、數(shù)據(jù)庫連接所需的url、數(shù)據(jù)庫用戶名、數(shù)據(jù)庫密碼。如〈dblnfoid=〃1〃driverClassName=〃oracle,jdbc.driver.OracleDriver〃url=〃jdbc:oracle:thin:@127.0.0.1:1521:omc〃usern咖e=〃user"password=〃passwd"/>基于XML的表結(jié)構(gòu)信息配置文件格式定義,以下簡稱為TABLIEINFO,xml。該格式定義了數(shù)據(jù)表的表名、表中各列的列名及數(shù)據(jù)類型。如〈tablename=〃userinfo">〈columnname=〃id"type=〃integer"/>〈columnname=〃name"type=〃varchar(32)〃/>〈columnname=〃birthday"type=〃datetime"/>〈/table>基于XML的數(shù)據(jù)轉(zhuǎn)儲文件文件格式定義,以下簡稱為TABLE_DATA.xml。該格式定義了表名、列名以及表中的數(shù)據(jù)在XML中的存儲結(jié)構(gòu)。如〈tablename=〃userinfo">〈columns>〈columnname=〃id"/>〈columnname=〃name"/〉〈columnname=〃birthday〈/columns>〈values〉〈value〉〈v>l〈/v>〈v>wuyg〈/v>〈v>1982-09-24〈/v>〈/value>〈value〉〈v>2〈/v>〈v>wuxy〈/v>〈v>1980-12-26〈/v>〈/value>〈/values>〈/table>將源數(shù)據(jù)庫中數(shù)據(jù)導(dǎo)出為基于XML的數(shù)據(jù)轉(zhuǎn)儲文件,首先使用已定義的源數(shù)據(jù)庫連接信息自動連接到源數(shù)據(jù)庫,然后解析表結(jié)構(gòu)配置文件獲取表結(jié)構(gòu)信息,通過獲取的表結(jié)構(gòu)信息構(gòu)造數(shù)據(jù)導(dǎo)出所需的sql,進(jìn)而根據(jù)sql查詢數(shù)據(jù)并將查詢出的數(shù)據(jù)組織為基于XML的數(shù)據(jù)轉(zhuǎn)儲文件規(guī)定的格式,最后寫出為文件。將基于XML的數(shù)據(jù)轉(zhuǎn)儲文件導(dǎo)入目的數(shù)據(jù)庫,首先使用已定義的目的數(shù)據(jù)庫連接信息自動連接到目的數(shù)據(jù)庫,然后解析從源數(shù)據(jù)庫中導(dǎo)出的基于XML的數(shù)據(jù)轉(zhuǎn)儲文件,獲得表結(jié)構(gòu)信息及表中存儲的數(shù)據(jù),進(jìn)一步在目的數(shù)據(jù)庫中創(chuàng)建表,最后構(gòu)造數(shù)據(jù)導(dǎo)入所需的sql并執(zhí)行這些sql將數(shù)據(jù)導(dǎo)入到目的數(shù)據(jù)庫中。通過該方法及裝置,可以將不同類型數(shù)據(jù)庫之間的數(shù)據(jù)遷移工作簡化。通過配置實(shí)現(xiàn)數(shù)據(jù)庫及表結(jié)構(gòu)描述,該裝置能夠自動將數(shù)據(jù)從源數(shù)據(jù)庫中導(dǎo)出為基于XML的數(shù)據(jù)轉(zhuǎn)儲文件并且能夠?qū)?dǎo)出的數(shù)據(jù)自動導(dǎo)入到目的數(shù)據(jù)庫中。實(shí)施例在本方案中有以下兩個關(guān)鍵點(diǎn)將源數(shù)據(jù)庫中數(shù)據(jù)導(dǎo)出為基于XML的數(shù)據(jù)轉(zhuǎn)儲文件,將基于XML的數(shù)據(jù)轉(zhuǎn)儲文件導(dǎo)入目的數(shù)據(jù)庫。將源數(shù)據(jù)庫中數(shù)據(jù)導(dǎo)出為基于XML的數(shù)據(jù)轉(zhuǎn)儲文件第一步解析數(shù)據(jù)庫信息配置文件DB—INFO.xml并根據(jù)源數(shù)據(jù)ID獲取源數(shù)據(jù)庫連接所需信息。第二步解析數(shù)據(jù)表信息配置文件TABLE_INFO.xml,獲取數(shù)據(jù)表信息并向數(shù)據(jù)轉(zhuǎn)儲文件TABLE_DATA.xml中寫出表信息,包括表名和列名信息。第三步連接源數(shù)據(jù)庫,根據(jù)表結(jié)構(gòu)信息構(gòu)造數(shù)據(jù)導(dǎo)出所需的sql并執(zhí)行該sql進(jìn)行數(shù)據(jù)查詢。第四步對于查詢得出的數(shù)據(jù)逐條構(gòu)造為TABLE_DATA中value所需的格式并寫出到TABLE_DATA.xml中。第五步關(guān)閉源數(shù)據(jù)庫連接。參將基于XML的數(shù)據(jù)轉(zhuǎn)儲文件導(dǎo)入目的數(shù)據(jù)庫第一步解析數(shù)據(jù)庫信息配置文件DB—INFO.xml并根據(jù)目的數(shù)據(jù)ID獲取目的數(shù)據(jù)庫連接所需信息。第二步解析從源數(shù)據(jù)庫中導(dǎo)出的數(shù)據(jù)轉(zhuǎn)儲文件TABLE_DATA.xml中的表結(jié)構(gòu)信息,包括表名和列名信息。第三步連接目的數(shù)據(jù)庫,根據(jù)表結(jié)構(gòu)信息構(gòu)造建表所需的sql語句并執(zhí)行該語句完成表的創(chuàng)建。第四步解析從源數(shù)據(jù)庫中導(dǎo)出的數(shù)據(jù)轉(zhuǎn)儲文件TABLE_DATA.xml中的數(shù)據(jù),結(jié)合表結(jié)構(gòu)信息構(gòu)造數(shù)據(jù)導(dǎo)入所需的sql語句,執(zhí)行這些sql語句完成數(shù)據(jù)入庫。:0104]第五步關(guān)閉目的數(shù)據(jù)庫連接。:O105]1.關(guān)鍵代碼:0106]publicvoiddoSubJob():0107]{try:0108]{:0109]〃st印l:寫臨時文件頭,組織sql語句:0110]fileWriter.write(XmlUtil.convertPa:rentHead(〃classname=、〃〃+table2file.getNeType()+"\〃〃));:0川]fileWriter.write(table2file.getColumnsXml0);:0112]〃st印2:查詢數(shù)據(jù):0113]Stringsql=table2file.getSelectSql();.0114]stmt=co皿.createStatement0;:0115]log.info(dbld+〃_〃+table2file.getNeType()+〃sql:"+sql);:0116]rst=stmt.executeQuery(sql);:0117]〃st印3:將數(shù)據(jù)逐行寫入文件:0118]writeEachLine();:0119]〃st印4:寫文件尾:0120]fileWriter.write(XmlUtil.co読rtParentTail(〃class"));:0121]}catch(Exceptionex):0122]{.0123]log.error(ex.getMessage(),ex);:0124]}finally:0125]{:0126]try:0127]{:0128]〃st印4:釋放資源,注意Connection不能釋放:0129]if(stmt!=null){stmt,close()5}if(rst!=null){rst.close();}if(util!=null){util.destory();}}catch(Exceptionex){log.error(ex.getMessage(),ex);}}}。使用本發(fā)明的方法,僅需完成不同數(shù)據(jù)庫的連接信息、表結(jié)構(gòu)信息的配置,即可完成不同數(shù)據(jù)庫間數(shù)據(jù)的遷移工作,提高了工作效率,同時保證了數(shù)據(jù)的正確性。權(quán)利要求一種通用可配置的數(shù)據(jù)庫數(shù)據(jù)遷移方法,其特征在于包括以下內(nèi)容基于XML的數(shù)據(jù)庫連接信息配置文件格式定義,以下簡稱為DB_INFO.XML,該格式定義了連接數(shù)據(jù)所必須的信息,包括數(shù)據(jù)庫驅(qū)動類、數(shù)據(jù)庫連接所需的url、數(shù)據(jù)庫用戶名、數(shù)據(jù)庫密碼,定義格式如下<dbInfoid=″1″driverClassName=″oracle.jdbc.driver.OracleDriver″url=″jdbc:oracle:thin:@127.0.0.1:1521:omc″username=″user″password=″passwd″/>基于XML的表結(jié)構(gòu)信息配置文件格式定義,以下簡稱為TABLIE_INFO.xml,該格式定義了數(shù)據(jù)表的表名、表中各列的列名及數(shù)據(jù)類型,定義格式如下<tablename=″userinfo″><columnname=″id″type=″integer″/><columnname=″name″type=″varchar(32)″/><columnname=″birthday″type=″datetime″/></column></row><table>基于XML的數(shù)據(jù)轉(zhuǎn)儲文件文件格式定義,以下簡稱為TABLE_DATA.xml,該格式定義了表名、列名以及表中的數(shù)據(jù)在XML中的存儲結(jié)構(gòu),定義格式如下<tablename=″userinfo″><columns><columnname=″id″/><columnname=″name″/><columnname=″birthday″/></columns><values><value><v>1</v><v>wuyg</v><v>1982-09-24</v></value><value><v>2</v><v>wuxy</v><v>1980-12-26</v></value></values></column></row><table>將源數(shù)據(jù)庫中數(shù)據(jù)導(dǎo)出為基于XML的數(shù)據(jù)轉(zhuǎn)儲文件,使用已定義的源數(shù)據(jù)庫連接信息自動連接到源數(shù)據(jù)庫,然后解析表結(jié)構(gòu)配置文件獲取表結(jié)構(gòu)信息,通過獲取的表結(jié)構(gòu)信息構(gòu)造數(shù)據(jù)導(dǎo)出所需的sql,進(jìn)而根據(jù)sql查詢數(shù)據(jù)并將查詢出的數(shù)據(jù)組織為基于XML的數(shù)據(jù)轉(zhuǎn)儲文件規(guī)定的格式,最后寫出為文件;將基于XML的數(shù)據(jù)轉(zhuǎn)儲文件導(dǎo)入目的數(shù)據(jù)庫,使用已定義的目的數(shù)據(jù)庫連接信息自動連接到目的數(shù)據(jù)庫,然后解析從源數(shù)據(jù)庫中導(dǎo)出的基于XML的數(shù)據(jù)轉(zhuǎn)儲文件,獲得表結(jié)構(gòu)信息及表中存儲的數(shù)據(jù),進(jìn)一步在目的數(shù)據(jù)庫中創(chuàng)建表,最后構(gòu)造數(shù)據(jù)導(dǎo)入所需的sql并執(zhí)行這些sql將數(shù)據(jù)導(dǎo)入到目的數(shù)據(jù)庫中;具體遷移步驟如下1)將源數(shù)據(jù)庫中數(shù)據(jù)導(dǎo)出為基于XML的數(shù)據(jù)轉(zhuǎn)儲文件(1)解析數(shù)據(jù)庫信息配置文件DB_INFO.xml并根據(jù)源數(shù)據(jù)ID獲取源數(shù)據(jù)庫連接所需信息;(2)解析數(shù)據(jù)表信息配置文件TABLE_INFO.xml,獲取數(shù)據(jù)表信息并向數(shù)據(jù)轉(zhuǎn)儲文件TABLE_DATA.xml中寫出表信息,包括表名和列名信息;(3)連接源數(shù)據(jù)庫,根據(jù)表結(jié)構(gòu)信息構(gòu)造數(shù)據(jù)導(dǎo)出所需的sql并執(zhí)行該sql進(jìn)行數(shù)據(jù)查詢;(4)對于查詢得出的數(shù)據(jù)逐條構(gòu)造為TABLE_DATA中value所需的格式并寫出到TABLE_DATA.xml中;(5)關(guān)閉源數(shù)據(jù)庫連接;2)將基于XML的數(shù)據(jù)轉(zhuǎn)儲文件導(dǎo)入目的數(shù)據(jù)庫;(1)解析數(shù)據(jù)庫信息配置文件DB_INFO.xml并根據(jù)目的數(shù)據(jù)ID獲取目的數(shù)據(jù)庫連接所需信息;(2)解析從源數(shù)據(jù)庫中導(dǎo)出的數(shù)據(jù)轉(zhuǎn)儲文件TABLE_DATA.xml中的表結(jié)構(gòu)信息,包括表名和列名信息;(3)連接目的數(shù)據(jù)庫,根據(jù)表結(jié)構(gòu)信息構(gòu)造建表所需的sql語句并執(zhí)行該語句完成表的創(chuàng)建;(4)解析從源數(shù)據(jù)庫中導(dǎo)出的數(shù)據(jù)轉(zhuǎn)儲文件TABLE_DATA.xml中的數(shù)據(jù),結(jié)合表結(jié)構(gòu)信息構(gòu)造數(shù)據(jù)導(dǎo)入所需的sql語句,執(zhí)行這些sql語句完成數(shù)據(jù)入庫;(5)關(guān)閉目的數(shù)據(jù)庫連接。全文摘要本發(fā)明提供一種通用可配置的數(shù)據(jù)庫數(shù)據(jù)遷移方法,是將源數(shù)據(jù)庫中數(shù)據(jù)導(dǎo)出為基于XML的數(shù)據(jù)轉(zhuǎn)儲文件,使用已定義的源數(shù)據(jù)庫連接信息自動連接到源數(shù)據(jù)庫,然后解析表結(jié)構(gòu)配置文件獲取表結(jié)構(gòu)信息,通過獲取的表結(jié)構(gòu)信息構(gòu)造數(shù)據(jù)導(dǎo)出所需的sql,進(jìn)而根據(jù)sql查詢數(shù)據(jù)并將查詢出的數(shù)據(jù)組織為基于XML的數(shù)據(jù)轉(zhuǎn)儲文件規(guī)定的格式,最后寫出為文件;將基于XML的數(shù)據(jù)轉(zhuǎn)儲文件導(dǎo)入目的數(shù)據(jù)庫,使用已定義的目的數(shù)據(jù)庫連接信息自動連接到目的數(shù)據(jù)庫,然后解析從源數(shù)據(jù)庫中導(dǎo)出的基于XML的數(shù)據(jù)轉(zhuǎn)儲文件,獲得表結(jié)構(gòu)信息及表中存儲的數(shù)據(jù),進(jìn)一步在目的數(shù)據(jù)庫中創(chuàng)建表,最后構(gòu)造數(shù)據(jù)導(dǎo)入所需的sql并執(zhí)行這些sql將數(shù)據(jù)導(dǎo)入到目的數(shù)據(jù)庫中;使用本發(fā)明的方法,僅需完成不同數(shù)據(jù)庫的連接信息、表結(jié)構(gòu)信息的配置,即可由該裝置完成不同數(shù)據(jù)庫間數(shù)據(jù)的遷移工作,提高了工作效率,同時保證了數(shù)據(jù)的正確性。文檔編號G06F17/30GK101789021SQ20101011318公開日2010年7月28日申請日期2010年2月24日優(yōu)先權(quán)日2010年2月24日發(fā)明者武玉剛申請人:浪潮通信信息系統(tǒng)有限公司