一种异构数据库平台下应用程序零修改迁移的方法

文档序号:6383708阅读:162来源:国知局
专利名称:一种异构数据库平台下应用程序零修改迁移的方法
技术领域
本发明属于异构数据库平台迁移技术,特别是一种异构数据库平台下应用程序零修改迁移的方法。
背景技术
随着人们信息化意识的逐步提高,越来越多的企业、组织和个人采用信息系统对其业务、数据和流程进行管理和控制。在信息系统的构建过程中,一直沿用着“应用程序+数据库平台”的模式,其中数据库平台扮演着极为关键和核心的角色,几乎所有的应用程序都依赖数据库平台数据的获取、传输、组织、存储、查询和展示来构建。数据库平台的成功应用与否,关系到整个信息系统的成败。信息系统的广泛应用,在提升工作效率和社会生产力的同时,也带来了相应的问题随着时间的推移,旧的数据库平台越来越不能适应应用系统日益增长的性能和安全性的苛刻要求,大量信息系统迫切需要迁移到安全性更高、数据处理能力更强的数据库平台,具体表现在以下三个方面一、安全性。目前在我国,电信、银行、电力等关系到国计民生的重大领域和国防军事等核心机密系统的大量应用都基于ORACLE数据库平台来开发,由于ORACLE数据库平台的核心技术和版权被国外商业公司所掌握,再加上ORACLE数据库平台的不安全性,使得采用国产数据库平台替代国外数据库平台的呼声越来越强烈。国内诸多研究机构和院校也构建了数个与ORACLE数据库平台兼容性较强的数据库平台,其性能与ORACLE数据库平台能达到同样数量级,这就为ORACLE数据库平台的可替换性提供了保证;二、性能。在一些信息化实施较早的行业与组织,其数据库平台多采用老式数据库平台,例如Access, Foxpro等,或是新式数据库平台的较低版本。这些老式和低版本的数据库平台在数据量和用户量不大的场景下,尚能发挥较好作用,但在应用程序数据规模快速提升的今天,数据规模已由原来的MB级、GB级提升到目前的TB级、PB级,原有的数据库平台已无法负荷庞大的数据量和用户量,因此迫切需要升级到处理能力更强、处理速度更快的数据库平台;三、平台的融合。随着信息化的逐步推进,为了使信息系统发挥更大的效用,多个独立的信息系统之间,同一信息系统的不同子系统之间,都亟待数据交换和数据融合,原有的多个独立数据库平台需要融合成一个统一的数据库平台。但是,异构数据库平台迁移的昂贵代价却成为信息系统升级和融合的阻碍一方面是数据迁移的高代价。异构数据库平台之间数据类型的存在差异,需要手动定制各个异构数据库平台之间的数据类型映射。不过幸运的是,各个商用数据库平台提供了相应的导入导出工具辅助配合数据库平台的迁移,最大程度上减轻了数据迁移的代价;另一方面是应用程序迁移的高代价。数据库平台的变更,导致应用程序需要进行相应的更改,否则应用程序无法正常工作,这部分的代价十分高昂,某些场合甚至到了无法容忍的程度,体现在
(I)需要耗费大量的人力、物力和财力修改应用程序的源代码,随着应用程序业务系统规模的增大,这部分成本甚至会以指数级增长,在源代码无人维护或者开发方更换的情况下尤其明显;(2)大量应用程序甚至无法获得源代码,使得对应用程序的修改根本无法进行。
另一方面,随着数据库技术和数据访问技术的发展,数据访问模型也朝着统一的趋势发展。在Windows平台下,微软先后提出了 ODBC、OLE DB、ADO等多个通用数据访问模型,这些模型封装了数据库平台的异构性,使得数据访问方式变得统一和通用。现在,AD0+0LE DB已经成为Windows平台下数据库访问方式的事实标准,如附图2所示。

发明内容
本发明的目的在于提供一种异构数据库平台下应用程序零修改迁移的方法,该方法适用所有Windows平台下使用AD0+0LE DB方式访问数据库平台的应用程序,具有很好的普遍性和适用性。实现本发明目的的技术解决方案为一种异构数据库平台下应用程序零修改迁移的方法,该方法的体系结构包括服务器端和客户端,所述的服务器端为两个兼容的异构数据库平台,分别叫做原数据库平台和新数据库平台,数据库平台兼容性包括数据类型和SQL语句;所述的客户端由应用程序和应用程序加载器组成,该应用程序使用“AD0+0LE DB”的方式访问数据库平台,使用“AD0+0LEDB”连接字符串连接数据库平台;应用程序加载器启动应用程序,在内存中搜索并替换应用程序的数据库连接字符串,并关闭应用程序的运行。本发明与现有技术相比,其显著优点(1)由于本发明无需获得应用程序的源代码,也无需修改应用程序的源代码,应用程序无需进行任何修改,即可在两个数据库平台之间无缝迁移与切换,大大减少了应用程序迁移的工作量,节省了人力、物力和财力。(2)适用的数据库平台为任意两个兼容的数据库平台,具有很好的普遍性和适用性。(3)适用的应用程序运行在Windows操作系统下使用AD0+0LE DB方式访问数据库平台;适用的数据库平台为任意两个兼容的异构数据库平台,数据库平台的兼容性包括数据类型、SQL语句等。下面结合附图对本发明作进一步详细描述。


图1是本发明的整体结构图。图2是微软通用数据访问方式示意图。图3是实施本发明方法前的函数调用流程图。图4是实施本发明方法后的函数调用流程图。
具体实施例方式应用程序与数据库平台交互操作分为两类一是应用程序与数据库平台建立数据库连接;二是应用程序对数据库平台执行数据查询、数据维护等数据库操作。如果要达到数据库平台迁移后不修改应用程序,而应用程序仍然可以正确执行的目标,那么就必须保证应用程序与数据库平台的两类操作都正确执行。对于第二类操作,由于AD0+0LE DB提供了标准化的操作方式,屏蔽了数据库平台的实现细节,因此使用AD0+0LE DB的应用程序对所有数据库平台的调用方式都是一样的,异构数据库平台的兼容性(数据类型、SQL语句)由数据库平台厂商提供。针对第一类操作,由于AD0+0LE DB使用数据库连接字符串对数据库平台进行连接,因此,只需修改应用程序中所有的数据库连接字符串,由指向迁移前的数据库平台改为指向迁移后的数据库平台。
本发明异构数据库平台下应用程序零修改迁移的方法的体系结构包括服务器端和客户端。其中服务器端为两个兼容的异构数据库平台,分别叫做原数据库平台(迁移前的数据库平台)和新数据库平台(迁移后的数据库平台),这两个数据库平台可以运行于同一台主机,也可运行于不同的主机。如前所述,两个异构数据库平台的兼容性由数据库平台厂商保证,包括数据类型和SQL语句的兼容性。客户端由应用程序和应用程序加载器组成。客户端的操作系统平台为Microsoft Windows系列。原数据库平台的内容迁移到新数据库平台的技术不属于本发明的要解决的技术问题。数据库平台本身的内容迁移不属于本发明的内容。在原数据库平台的内容未迁移到新数据库平台之前,应用程序的执行步骤如下步骤101,启动应用程序;步骤102,应用程序中的连接字符串指向原数据库平台,应用程序连接上原数据库平台;步骤103,应用程序对原数据库平台执行数据查询、数据维护等各种数据库操作;步骤104,退出应用程序,应用程序断开对原数据库平台的连接。本发明的核心部分为应用程序加载器。应用程序加载器为一个Windows程序,与应用程序运行在同一台主机之上,其功能有I,启动应用程序;2,在内存中搜索并替换应用程序的数据库连接字符串;3,关闭应用程序的运行。在原数据库平台的内容迁移到新数据库平台之后,应用程序执行步骤如下步骤201,启动应用程序加载器;步骤202,在应用程序加载器中选择并启动应用程序;步骤203,应用程序加载器将应用程序中的连接字符串指向新数据库平台,应用程序连接上新数据库平台;步骤204,应用程序对新数据库平台执行数据查询、数据维护等各种数据库操作;步骤205,退出应用程序,应用程序断开对新数据库平台的连接;步骤206,退出应用程序加载器。在原数据库平台的内容迁移到新数据库平台之后,应用程序加载器执行步骤如下步骤301,启动应用程序步骤301-1,选择应用程序;步骤301-2,启动应用程序,将应用程序进程挂接到应用程序加载器中;步骤301-3,暂停执行应用程序;步骤302,在内存中搜索并替换应用程序的数据库连接字符串;步骤302-1,采用Windows进程注入的方法将一段代码注入到应用程序中;步骤302-2,注入代码枚举应用程序的二进制代码;步骤302-3,注入代码从应用程序二进制代码的内存开始地址至内存结束地址进行搜索,搜索以连接原数据库平台的数据库连接字符串开头的内存地址;步骤302-4,如果搜索匹配目标,那么将连接原数据库平台的数据库连接字符串替换为连接新数据库平台的数据库连接字符串;步骤302-5,搜索结束;步骤303,恢复执行应用程序,应用程序连接到新数据库平台;步骤304,退出应用程序,应用程序断开对新数据库平台的连接;步骤305,退出应用程序加载器。从上述步骤201 步骤206和步骤301 步骤305可以看出,在原数据库平台的内容迁移到新数据库平台之后,应用程序无需修改,可以通过应用程序加载器,直接由访问原数据库平台迁移到访问新数据库平台。实施例本发明的整体结构如图1所示。本发明的体系结构包括服务器端和客户端。服务器端为两个异构数据库平台,分别叫做原数据库平台和新数据库平台,在本实施例中,原数据库平台为0RACLE8.1. 7,新数据库平台为MySQL。客户端由应用程序和应用程序加载器组成,客户端的操作系统平台为Microsoft WindowsXP SP3。在原数据库平台的内容未迁移到新数据库平台之前,应用程序的执行步骤如下步骤101,启动应用程序;步骤102,应用程序中的连接字符串指向原数据库平台,应用程序连接上原数据库平台;步骤103,应用程序对原数据库平台执行数据查询、数据维护等各种数据库操作;步骤104,退出应用程序,应用程序断开对原数据库平台的连接。在原数据库平台的内容迁移到新数据库平台之后,应用程序执行步骤如下步骤201,启动应用程序加载器;步骤202,在应用程序加载器中选择并启动应用程序;步骤203,应用程序加载器将应用程序中的连接字符串指向新数据库平台,应用程序连接上新数据库平台;步骤204,应用程序对新数据库平台执行数据查询、数据维护等各种数据库操作;步骤205,退出应用程序,应用程序断开对新数据库平台的连接;步骤206,退出应用程序加载器。 本发明的核心部分为应用程序加载器,在原数据库平台的内容迁移到新数据库平台之后,应用程序加载器执行步骤如下步骤301,启动应用程序步骤301-1,选择应用程序;步骤301-2,启动应用程序,将应用程序进程挂接到应用程序加载器中(ProcessAttach 函数);步骤301-3,暂停执行应用程序(dwCreationFlags | =CREATE_SUSPENDED 方法);步骤302,在内存中搜索并替换应用程序的数据库连接字符串;步骤302-1,采用Windows进程注入的方法将一段代码注入到应用程序中;步骤302-2,注入代码枚举应用程序的二进制代码(VirtualQueryEx函数);步骤302-3,注入代码从应用程序二进制代码的内存开始地址至内存结束地址进行搜索,搜索以连接原数据库平台的数据库连接字符串开头的内存地址(memicmp函数);
步骤302-4,如果搜索匹配目标,那么将连接原数据库平台的数据库连接字符串替换为连接新数据库平台的数据库连接字符串(memcpy函数、memset函数、VirtualProtect函数和memmove函数);步骤302-5,搜索结束;步骤303,恢复执行应用程序(ResumeThread方法),应用程序连接到新数据库平台;步骤304,退出应用程序,应用程序断开对新数据库平台的连接;步骤305,退出应用程序加载器。应用程序加载器执行步骤302-1的流程如下步骤601,得到被注入进程的HANDLE (OpenProcess函数);步骤602,在被注入进程中为注入DLL文件名分配内存(VirtualAllocEx函数);步骤603,把DLL的全路径文件名写到分配的内存中(WriteProcessMemory函数);步骤604,把 DLL 映射到被注入进程(CreateRemoteThread 和 LoadLibrary 函数);步骤605,等待远程线程结束(WaitForSingleObject函数),等待LoadLibrary返回。即以DLL_PROCESS_ATTACH为参数调用的DLLMain返回时,远程线程同时结束;步骤606,取回远程线程的结束码(GetExitCodeThtread函数),即LoadLibrary的返回值,DLL加载后的基地址(HM0DULE);步骤607,释放步骤602分配的内存(VirtualFreeEx函数);步骤608,用 CreateRemoteThread 和 FreeLibrary 把 DLL 从被注入进程中卸载。调用时传递步骤606取得的HM0DULE给FreeLibrary (通过CreateRemoteThread的IpParameter 参数)。步骤609,等待线程的结束(WaitSingleObject函数)。应用程序加载器执行步骤302-1由Windows的进程注入功能完成,进程注入的高级语言代码示例和汇编语言代码示例如表I和表2所示,其流程示意如图3和图4所示。高级语言代码示例中注入代码前和注入代码后的宿主进程代码实现步骤如下进程注入前步骤401,调用函数Caller直接调用执行目标函数Target ;步骤402,执行目标函数Target调用完毕后返回调用函数Caller ;进程注入后步骤501,调用函数Caller调用目标函数Target ;步骤502,目标函数Target跳转到函数Detour ;步骤503,函数Detour执行注入代码Trampoline,步骤504,完成执行注入代码后,跳转回Target函数,执行Target函数的剩余部分代码;步骤505, Target函数执行完后返回函数Detour ;步骤506,函数Detour返回调用函数Caller。表I注入进程高级语言代码示例
权利要求
1.一种异构数据库平台下应用程序零修改迁移的方法,其特征在于该方法的体系结构包括服务器端和客户端,所述的服务器端为两个兼容的异构数据库平台,分别叫做原数据库平台和新数据库平台,数据库平台兼容性包括数据类型和SQL语句;所述的客户端由应用程序和应用程序加载器组成,该应用程序使用“ADO+OLE DB”的方式访问数据库平台,使用“ADO+OLE DB”连接字符串连接数据库平台;应用程序加载器启动应用程序,在内存中搜索并替换应用程序的数据库连接字符串,并关闭应用程序的运行。
2.根据权利要求1所述的异构数据库平台下应用程序零修改迁移的方法,其特征在于客户端的操作系统平台为Microsoft Windows系列。
3.根据权利要求1所述的异构数据库平台下应用程序零修改迁移的方法,其特征在于在原数据库平台的内容未迁移到新数据库平台之前,客户端的应用程序执行步骤如下 步骤101,启动应用程序; 步骤102,应用程序中的连接字符串指向原数据库平台,应用程序连接上原数据库平台; 步骤103,应用程序对原数据库平台执行数据查询、数据维护等各种数据库操作; 步骤104,退出应用程序,应用程序断开对原数据库平台的连接。
4.根据权利要求1所述的异构数据库平台下应用程序零修改迁移的方法,其特征在于在原数据库平台的内容迁移到新数据库平台之后,客户端的应用程序执行步骤如下 步骤201,启动应用程序加载器; 步骤202,在应用程序加载器中选择并启动应用程序; 步骤203,应用程序加载器将应用程序中的连接字符串指向新数据库平台,应用程序连接上新数据库平台; 步骤204,应用程序对新数据库平台执行数据查询、数据维护等各种数据库操作; 步骤205,退出应用程序,应用程序断开对新数据库平台的连接; 步骤206,退出应用程序加载器。
5.根据权利要求1所述的异构数据库平台下应用程序零修改迁移的方法,其特征在于在原数据库平台的内容迁移到新数据库平台之后,客户端的应用程序加载器执行步骤如下 步骤301,启动应用程序 步骤301-1,选择应用程序; 步骤301-2,启动应用程序,将应用程序进程挂接到应用程序加载器中; 步骤301-3,暂停执行应用程序; 步骤302,在内存中搜索并替换应用程序的数据库连接字符串 步骤302-1,采用Windows进程注入的方法将一段代码注入到应用程序中; 步骤302-2,注入代码枚举应用程序的二进制代码; 步骤302-3,注入代码从应用程序二进制代码的内存开始地址至内存结束地址进行搜索,搜索以连接原数据库平台的数据库连接字符串开头的内存地址; 步骤302-4,如果搜索匹配目标,那么将连接原数据库平台的数据库连接字符串替换为连接新数据库平台的数据库连接字符串;步骤302-5,搜索结束; 步骤303,恢复执行应用程序,应用程序连接到新数据库平台; 步骤304,退出应用程序,应用程序断开对新数据库平台的连接; 步骤305,退出应用程序加载器。
6.根据权利要求5所述的异构数据库平台下应用程序零修改迁移的方法,其特征在于应用程序加载器执行步骤302-1的流程如下 步骤601,得到被注入进程的HANDLE ; 步骤602,在被注入进程中为注入DLL文件名分配内存; 步骤603,把DLL的全路径文件名写到分配的内存中; 步骤604,把DLL映射到被注入进程; 步骤605,等待远程线程结束,等待LoadLibrary返回,S卩以DLL_PROCESS_ATTACH为参数调用的DLLMain返回时,远程线程同时结束; 步骤606,取回远程线程的结束码,即LoadLibrary的返回值,DLL加载后的基地址; 步骤607,释放步骤602分配的内存; 步骤608,用CreateRemoteThread和FreeLibrary把DLL从被注入进程中卸载,调用时传递步骤606取得的HM0DULE给FreeLibrary ; 步骤609,等待线程的结束。
全文摘要
本发明公开了一种异构数据库平台下应用程序零修改迁移的方法,该方法的体系结构包括服务器端和客户端,所述的服务器端为两个兼容的异构数据库平台,分别叫做原数据库平台和新数据库平台,数据库平台兼容性包括数据类型和SQL语句;所述的客户端由应用程序和应用程序加载器组成,该应用程序使用“ADO+OLEDB”的方式访问数据库平台,使用“ADO+OLEDB”连接字符串连接数据库平台;应用程序加载器启动应用程序,在内存中搜索并替换应用程序的数据库连接字符串,并关闭应用程序的运行。本发明可在两个数据库平台之间无缝迁移与切换,大大减少了应用程序迁移的工作量,节省了人力、物力和财力。
文档编号G06F9/48GK103019845SQ20121052909
公开日2013年4月3日 申请日期2012年12月10日 优先权日2012年12月10日
发明者张涛, 袁志坚, 赵敏, 陈融, 王金双, 陈萍, 于晗 申请人:中国人民解放军理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1