异种数据库复制方法

文档序号:6436134阅读:223来源:国知局
专利名称:异种数据库复制方法
技术领域
本发明涉及数据库系统应用领域,尤指一种异种数据库复制方法。
背景技术
在当前应用数据库系统的环境中,如企业级的网络环境,异种数据库同时并存的现象越来越普遍。比如,在一个公司内部,其市场部门采用微软公司地SQL Server数据库,其研发部门采用神舟软件公司的OSCAR安全数据库,而其总服务器采用甲骨文公司的ORACLE数据库,这种异种数据库同时使用的情况在许多系统集成的方案与实施中屡见不鲜,于是异种数据库之间的数据内容的复制成为人们普遍关心的问题。
目前,各大主流数据库产品都提供了在各自数据库之间进行复制的功能。现有的复制功能一般采用发布/订阅模型来实现的。如图1所示,发布服务器1用于配置发布设置及将数据库系统中的数据提取出来,以便复制到其它服务器;分发服务器2用于具体执行数据分发任务;订阅服务器3、订阅服务器4和订阅服务器5用于接收复制数据。
首先,在发布服务器1进行发布配置,例如对复制的内容,执行复制的周期等进行设置;订阅服务器3、4、5根据需要订阅配置好的发布;分发服务器2会根据发布配置执行数据分发,将数据写入订阅服务器3或者4或者5。在这样的实现模型下,数据被写入发布数据库1后,分发服务器2根据发布配置定期去检查数据变更,然后将这些数据变更提取出来写入订阅服务器3或者4或者5。
这种复制技术存在以下两个主要缺陷
1)不能实现任意的异种数据库间的数据复制
发布服务器1和分发服务器2的实现和数据库服务器紧密相关,各数据库厂商只开发出配合自己的数据库产品的发布服务器1和分发服务器2,也就是说发布服务器1和分发服务器2不具有可移植性;目前最多只能做到订阅服务器3或者4或者5能适宜异种数据库,这主要是通过sql(Struct QueryLanguage,结构化查询语言)标准来屏蔽不同数据库间的差异。
2)不支持实时性
分发服务器2按设定的周期去检查发布数据库1的更改,然后再写入订阅服务器3或者4或者5,而不是实时地对数据库的更改进行复制。

发明内容
本发明要解决的技术问题是提供一种能够在任意的异种数据库间进行实时地数据复制的异种数据库复制方法。
为了解决上述问题,本发明采用以下技术方案
一种异种数据库复制方法,涉及原数据库及待复制数据库,其包括以下步骤
10)建立异种数据库系统通用接口驱动,所述异种数据库系统通用接口驱动包括原数据库数据库系统通用接口驱动和待复制数据库数据库系统通用接口驱动;
20)判断对原数据库的调用是否对原数据库有更改;
30)若对原数据库有更改,则将该调用同时传递给原数据库和待复制数据库的数据库系统通用接口驱动并调用原数据库的数据库系统通用接口驱动;
40)调用待复制数据库的数据库系统通用接口驱动。
进一步地本发明异种数据库复制方法,在步骤30)后还包括步骤
31)将已传递给待复制数据库的数据库系统通用接口驱动的对原数据库有更改的调用存放在队列中;
32)空闲时,触发步骤40)。
所述步骤中的数据库系统通用接口驱动为开放数据库连接或爪哇数据库连接。
与现有技术相比,本发明异种数据库复制方法的有益效果是
由于采用数据库系统通用接口来建立异种数据库的驱动,而数据库系统通用接口是任何种类的数据库系统都支持的接口,可将异种数据库间的差异性屏蔽,故通过调用数据库系统通用接口驱动可实现任意异种数据库的数据复制。
另外还采用将对原数据库有更改的调用同时传递给原数据库和待复制数据库的数据库系统通用接口驱动,通过调用原数据库和待复制数据库的数据库系统通用接口驱动,即将对原数据库有更改的调用在原数据库上执行,同时也将该调用在待复制数据库上执行,因而能够实现实时地进行数据复制,具有实时性。
最后,本发明异种数据库复制方法的另一个技术方案,采用先将已传递给待复制数据库的数据库系统通用接口驱动的调用存放在队列中,待服务器空闲时或者在适宜的时候,再调用待复制数据库的数据库系统通用接口调用,换句话说就是待服务器空闲时或者在适宜的时候,再进行数据的复制,这样可以避免用户应用感觉数据库访问慢,但却牺牲了一定的实时性。


图1是现有技术用于异种数据库复制的发布/订阅模型图2是本发明异种数据库复制方法的流程图3是本发明异种数据库复制方法的实施例的应用图4和图5是另一个例子的应用图。
具体实施例方式
如图2所示,本发明异种数据库复制方法,涉及原数据库及待复制数据库,包括以下步骤
步骤10)建立异种数据库系统通用接口驱动,所述异种数据库系统通用接口驱动包括原数据库数据库系统通用接口驱动和待复制数据库数据库系统通用接口驱动;
步骤20)判断对原数据库的调用是否对原数据库有更改;
步骤30)若对原数据库有更改,则将该调用同时传递给原数据库和待复制数据库的数据库系统通用接口驱动并调用原数据库的数据库系统通用接口驱动;
步骤40)调用待复制数据库的数据库系统通用接口驱动。
上述步骤中所述的数据库系统通用接口指开放数据库连接(ODBC,OpenDatabase Connectivity)、爪哇数据库连接(JDBC,JAVA Database Connectivity)等,因任何种类的数据库系统都支持这些数据库系统通用接口,故采用建立异种数据库系统通用接口驱动,可屏蔽异种数据库间的差异。如果对原数据库的调用对原数据库有更改,也就是说该调用将会引起原数据库与待复制数据库不一致,因而将该调用也同时传递给待复制数据库的数据库系统通用接口驱动,这样步骤40)调用待复制数据库的数据库系统通用接口驱动,即将对原数据库有更改的调用在原数据库上执行,而且同时也在待复制数据库上执行,也就是说,对原数据库进行了更改,同时在待复制数据库上也进行了同样的更改,保证了原数据库与待复制数据库的一致性,也即实现了原数据库向待复制数据库的复制。
如图2所示,若步骤20)判断的结果为对原数据库的调用不会对原数据库产生更改,则执行
步骤50)将调用传递给原数据库的数据库系统通用接口驱动;
步骤60)调用原数据库的数据库系统通用接口驱动。
从上述步骤可知,若对原数据库的调用对原数据库不会产生更改,也即表示该调用不会导致原数据库与待复制数据库的不一致性,故没有必要将该调用也传递给待复制数据库的数据库系统通用接口驱动。
如图2所示,执行完步骤40)或者步骤60)后转到步骤20),即继续判断下一个对原数据库的调用是否对原数据库有更改,根据判断结果执行相应的步骤。
下面以北京神舟软件有限公司为例来详述本发明异种数据库复制方法的技术方案。
两个异种数据库A和数据库B,数据库A为用户应用所使用的数据库,数据库B是进行数据复制的目的数据库,数据库访问接口采用数据库系统通用接口JDBC。
首先建立符合规范的JDBC驱动AB,该驱动包含数据库A的JDBC驱动包和数据库B的JDBC驱动包,并且实现标准要求的所有接口方法。
本例JDBC驱动AB的主要代码如下
public class ABDriver implements java.sql.Driver{//实现标准接口java.sql.Driverjava.sql.Driver oscarDriver=null;//Oscar数据库JDBC Driverjava.sql.Driver otherDriver=null;//其他数据库JDBC Driverstatic{try{java.sql.DriverManager.registerDriver(new ABDriver());//向驱动管理器注册新驱动}catch(Exception e){}}public Connection connect(String url,Properties info)throws SQLException{//连接方法if(url.starts With(ojava.sql.Config.DB_URL_START_CHAR)){//判断驱动类型ojava.sql.Connection con=null;try{if(Config.DB_URL_START_CHAR.equals(″$″)){//获取sqlserver数据库DriverotherDriver=(java.sql.Driver)(Class.forName(Config.DB_SQLSERVER_DRIVER).newInstance());}else if(Config.DB_URL_START_CHAR.equals(″#″)){//获取oracle数据库DriverotherDriver=(java.sql.Driver)ass.forName(Config.DB_ORACLE_DRIVER).newInstance());}else if(Config.DB_URL_START_CHAR.equals(″@″)){//获取db2数据库DriverotherDriver=(java.sql.Driver)(Class.forName(Config.DB_DB2_DRIVER).newInstance());}else{throw new SQLException(″illegal jdbc url″);//抛出异常}oscarDriver=(java.sql.Driver)(Class.forName(″com.oscar.Driver″).newInstance());////获取oscar数据库DriverProperties pt=new Properties();<!-- SIPO <DP n="4"> --><dp n="d4"/>pt.put(″user″,Config.DB_USERNAME);//用户名pt.put(″password″,Config.DB_PASSWORD);//用户密码con=new ojava.sql.Connection();//创建ABDriver的连接对象try{con.oscarConnect=(com.oscar.jdbc3.Jdbc3Connection)(Class.forName(″com.oscar.jdbc3.Jdbc3Connection″).newInstance());//获取OSCAR数据库连接((com.oscar.jdbc3.Jdbc3Connection)con.oscarConnect).openConnection(Config.DB_IP,Integer.parseInt(Config.DB_PORT),pt,Config.DB_NAME,Config.DB_URL,(com.oscar.Driver)oscarDriver);//打开连接break;}catch(Exception ex){}con.otherConnect=java.sql.DriverManager.getConnection(url,info);//获取其他数据库连接if(con.otherConnect==null)return null;elsereturn(java.sql.Connection)con;//把ABDriver的连接对象返回给用户}catch(SQLException ex){if(con!=null &amp;&amp; con.otherConnect!=null){con.otherConnect.close();//关闭其他数据库连接}if(con!=null &amp;&amp; con.oscarConnect!=null){con.oscarConnect.close();//关闭OSCAR数据库连接}throw ex;}catch(Exception e){if(con!=null &amp;&amp; con.otherConnect!=null){con.otherConnect.close();//关闭其他数据库连接}if(con!=null &amp;&amp; con.oscarConnect!=null){con.oscarConnect.close();//关闭OSCAR数据库连接}throw new SQLException(″oscar.unusual″);}}else{throw new SQLException(″illegal jdbc url″);<!-- SIPO <DP n="5"> --><dp n="d5"/>}}}
如图3所示,用户应用(用户应用程序)创建的数据库驱动AB的连接包括一个数据库A的连接和一个数据库B的连接,故同时创建数据库A和数据库B的连接。对于调用Rollback()(回滚语句)、Commit()(提交语句)及PrepareStatement()(预备语句)等都可能会对数据库A产生更改,故将这些调用也传递给数据库B的JDBC驱动;而对于调用GetMetaData()(获取连接元数据)、GetAutoCommit()(查询提交方式)、GetTypeMap()(获取类型映射)等不会对数据库A产生更改,故只将这些调用传递给数据库A的JDBC驱动。
采用本发明异种数据库复制方法进行异种数据库复制能够对任意数据库间进行复制而且还具有很好的实时性,但是由于对原数据库有更改的调用原数据库的数据库系统通用接口驱动和待复制数据库的数据库系统通用接口驱动都要执行后,才处理对原数据库的下一次调用,因而可能会使用户应用感到访问变慢。
故,如图4所示,本发明数据库复制方法的另一个技术方案,还包括
步骤31)将已传递给待复制数据库的数据库系统通用接口驱动的对原数据库有更改的调用存放在队列中;
步骤32)空闲时,触发步骤40)。
从上述步骤可知将已传递给待复制数据库的数据库系统通用接口驱动的对原数据库有更改的调用先存放在队列中,并不马上执行这些调用,由一个工作线程根据用户配置和服务器运行状况,在服务器空闲时,或者在合适的时候执行这些调用,即将数据复制到待复制数据库中。
如图5所示,将所有对原数据库有更改的调用都存放在函数队列中,工作线程在合适的时候再调用待复制数据库的数据库系统通用接口驱动来执行这些调用,实现原数据库到待复制数据库的数据的复制。
此种技术方案不会使用户应用感到数据库访问变慢,但牺牲了一定的实时性。
以上所述仅是本发明异种数据库复制方法的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明异种数据库复制方法原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明异种数据库复制方法的保护范围。
权利要求
1、一种异种数据库复制方法,涉及原数据库及待复制数据库,其特征在于,包括步骤
10)建立异种数据库系统通用接口驱动,所述异种数据库系统通用接口驱动包括原数据库的数据库系统通用接口驱动和待复制数据库的数据库系统通用接口驱动;
20)判断对原数据库的调用是否对原数据库有更改;
30)若对原数据库有更改,则将该调用同时传递给原数据库和待复制数据库的数据库系统通用接口驱动并调用原数据库的数据库系统通用接口驱动;
40)调用待复制数据库的数据库系统通用接口驱动。
2、如权利要求1所述的异种数据库复制方法,其特征在于,所述步骤30)后还包括步骤
31)将已传递给待复制数据库的数据库系统通用接口驱动的对原数据库有更改的调用存放在队列中;
32)空闲时,触发步骤40)。
3、如权利要求1或者2所述的异种数据库复制方法,其特征在于,所述数据库系统通用接口驱动为开放数据库连接。
4、如权利要求1或者2所述的异种数据库复制方法,其特征在于,所述数据库系统通用接口驱动为爪哇数据库连接。
全文摘要
本发明公开了一种异种数据库复制方法,涉及原数据库及待复制数据库,包括步骤建立异种数据库系统通用接口驱动,所述异种数据库系统通用接口驱动包括原数据库数据库系统通用接口驱动和待复制数据库数据库系统通用接口驱动;判断对原数据库的调用是否对原数据库有更改;若对原数据库有更改,则将该调用同时传递给原数据库和待复制数据库的数据库系统通用接口驱动并调用原数据库的数据库系统通用接口驱动;调用待复制数据库的数据库系统通用接口驱动。本发明异种数据库复制方法能够实现任意种数据库间复制而且还具有实时性。
文档编号G06F17/30GK1770151SQ20041008878
公开日2006年5月10日 申请日期2004年11月3日 优先权日2004年11月3日
发明者何清法, 陈刚, 金星, 程胜, 降志勇 申请人:北京神舟航天软件技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1