当前位置:文档之家› 异构数据库数据迁移研究

异构数据库数据迁移研究

异构数据库数据迁移研究
摘要:数据迁移是指将一种数据环境中的数据根据需要进行某种转换,导入另外一种相异或者相同的数据环境中。

异构数据库迁移是指将数据库管理系统中不同的,或者数据结构、数据组成与定义相异的数据之间尽量进行等价、无损的数据转移。

通过文献案例和理论研究对异构数据库的迁移技术进行了分析,提出了一种以Java为编程语言和数据库结构JDBC为基础的异构数据库管理系统的迁移方法,并通过实验证实了此方法的有效性。

关键词:企业信息化;数据迁移;异构数据环境;Oracal;SqlServer
0、引言
随着企业的发展,企业原有的各种信息系统常常需要升级,以性能更好、规模更大的系统替代原有的系统。

例如企业常常考虑使用0racle或DB2等大型数据库软件来代替MS SqlServer,在信息系统升级中,一个不可避免的问题就是数据迁移。

而在不同数据库之间进行数据迁移是其中的一个难点,因为不同厂商的数据库中定义的数据类型不尽相同,企业可以选择一些数据库系统自带的工具软件进行数据迁移,例如Oracle公司的Migration work-Bench、MS SQLServer的DTS(Data Transformation Serv-ice,数据转换服务)。

但是这些工具的针对性不强,不够灵活,所以许多企业在升级数据库时,常常自己编写软件来完成数据迁移。

本文设计的系统专门用于MS SQL Server和0racle数据库之间的
数据迁移,本系统采用了Java为编程语言,采用0raclelog和SQL server2005作为数据库环境,并利用Java语言的跨平台性和JDBC的无差异数据使用来为数据迁移提供技术支撑。

1、系统设计和实现
1.1 总体设计
为实现数据迁移功能,将系统划分为下面几个步骤:①读取源数据;②生成数据转换的规则;③使用Java语言实现操作。

1.2 系统结构设计
系统结构用来描述系统内部各组成要素之间的相互联系、相互作用的方式或秩序,即各要素在时间或空间上排列和组合的具体形式。

系统功能结构设计如图1所示。

下面依照这个结构图来描述各个软件功能模块。

(1)连接模块。

使用此系统之前,必须先连接数据库。

本功能模块用于连接SQL Server数据库和Oracle数据库,通过输入数据库连接所需的用户名、密码、数据库名称等。

(2)Oracle数据区模块。

该模块用于显示所连接的Oracle数据库及表的信息。

用户通过连接模块进行数据库连接,如果连接成功,将在窗口中显示当前连接的服务器下各个Oracle数据库的结构,采用树形结构显示。

显示信息包括服务器、用户名和当前用户可以访问的表。

用户可以查看表名称、表中的字段属性及约束条件等详细信息。

(3)SQL Server数据区模块。

该模块用于显示所连接的SQL Server数据库及表的信息。

用户通过连接模块进行数据库连接,连接
成功后将在窗口中显示各个数据库的结构,以树形结构显示,结构分3层,最上面是现在已连接的SQL Server数据库的服务器名,第2层为现在可以访问的数据库名。

(4)操作模块。

本模块的主要功能是对选中的表进行操作,分为两个界面,左边显示SQL Server数据库信息,右边显示Oracle数据库信息。

迁移表的操作是新建表与删除表操作,用户在界面左边选择SQL Server数据库中的一个表,这时本系统会在连接的Oracle数据库中查找是否存在同样的表,如果没有,将会在Oracle数据库中新建立一个表,表的字段、数据类型、约束条件、主键等信息全部通过读取相应的SQLServer数据库获得,按照本系统预先建立的数据类型转换对应表,生成SQL语句并在Oracle数据库中运行该语句以建立相应的表。

这个过程完成了以下操作:读取SQLServer数据库→生成SQL 语句→在Oracle数据中建立表,这就相当于完成了从SQL Server到Oracle的表的迁移。

(5)操作结果模块。

本模块用于显示数据迁移完成后的结果。

这些信息包括用户选中表中的各个字段信息、表中的具体数据,还有根据数据类型转换规则执行后的一些字段信息和生成的SQL语句,以及在目的数据库表中的新数据和系统本身记录下来的操作日志。

(6)辅助功能。

在迁移过程中显示迁移的时间进度表,提示估计完成时间和剩余时间,如果迁移过程中出现错误,将中止迁移操作并且提示错误类型和出错位置等信息。

2、系统详细设计
详细设计的主要任务是设计每个模块的实现算法、所需的局部数据结构。

详细设计的目标有两个:实现模块功能的算法逻辑上要正确且算法描述要简明易懂。

这里仅描述这个阶段的关键步骤。

2.1 操作区模块
迁移模块主要完成的工作有:
(1)连接Oracle和SQL Server数据库。

(2)从SQL Server到Oracle数据库的迁移。

该操作实现过程如下:①从SQL Server数据库中获取到将要迁移的表;②获得表的详细信息:表名、数据类型、约束条件、主键等;③从Oracle数据库中寻找相应的数据库,如果没有则重新建立新数据库;④完成从SQL Server到Oracle的迁移;⑤提示迁移成功消息框,完成迁移日志记录。

(3)从Oracle到SQL Server数据库的迁移。

实现的方法和从SQL Server到Oracle数据库的迁移方法相似,不再赘述。

2.2 大数据字段的迁移
在数据迁移过程中有一些大数据字段的迁移比较复杂,所以单独在本节进行分析。

例如,在SQL Server表中有一种二进制数据类型是image,Oracle数据库中没有image数据类型,但是Oracle有存储为二进制数据的类型,比如BLOB类型,这样就可以将SQL Server 中的im-age类型转换为Oracle中的BLOB。

下面对步骤进行描述:首先使用SQL语句以获得一个结果集,然后调用这个结果集的getBinaryStream方法,从而获得二进制数据,接下来将此二进制数据
写入到一个临时文件中。

接下来,就可以把数据转换成BLOB型存到Oracle表中。

因为BLOB类型的特殊性,这里写入BLOB字段与写入其它类型字段的方式不同。

由于BLOB必须使用其自身的cursor才能对BLOB进行操作,所以在写入BLOB之前需要获取cursor。

可以先插入一个空的BLOB,这会创建一个BLOB的cursor,接下来再将这个空的BLOB的cursor查询出来。

这样通过两个步骤,就间接获得了BLOB的cursor,此时才能真正写入BLOB数据了,代码编写需分成3个步骤来完成这个功能。

(1)插入空BLOB:
into javatest(name,content)values(?,empty_blob());
(2)获得BLOB的cursor:
select content from javatest where name=?
(3)用cursor写数据:
update javatest set content=?where name=?
通过上面几个步骤就能完成从image到BLOB的转换。

而text 到CLOB的方法,以及ntext到NCLOB的转换,因为都是二进制数据,所以可以用相同的方法实现,这里不再赘述。

3、系统测试
为了测试系统的有效性,特设置测试环境用于测试,方法是从Oracle数据库中将较大的数据量迁移到SQL Server数据库中,测试数据使用Oracle中样例数据库SH中的SH.SALES和SH.PRODUCTS
两个表,两个表的数据行约为100万行和1万行。

实验主机配置为表1所示。

为了更好地比较,测试中还选用了SQL Server自带的数据迁移工具DTS,当迁移完成后记录测试中所花费的时间和内存资源,如表2所示。

从表2可知,使用DTS运行时占用内存资源比较稳定,消耗内存资源比较少;而迁移系统在运行时仅耗内存资源50~120MB。

当数据量比较小时,所需内存资源比较小;当数据增加时,DTS所耗内存资源将随着迁移数据的增加而显著增加。

本系统对两个表的迁移都比SQL Server自带工具DTS要快,并且数据量越大时,效率越明显。

虽然使用本系统将会耗费更多的内存,但在目前机器内存普遍比较高的情况下,多占用一些内存并不影响系统的有效性。

4、结语
文中对异构数据库进行了研究,对SQL Server和Or-acle数据库的数据类型进行了分析,根据软件工程思想对系统进行了总体设计和详细设计,并使用Java程序设计了语言实现系统。

该系统可以在SQL Server和Oracle数据库之间进行数据迁移,最后通过搭建测试环境证实了系统的有效性。

相关主题