时间:2024-05-04
韩世杰 张记强 冯帆
(中国航天科工集团第二研究院706 所 北京市 100854)
当前国产数据库迎来蓬勃发展的时期,以武汉达梦、人大金仓、神州通用、天熠数据库为代表的一大批优秀的国产数据库产品得到了迅猛的发展[1][2]。随着党政军领域中信息系统的国产化,采用国产数据库替换国外数据库后,原先存放在国外数据库中的历史数据,无法直接使用。为了在新的数据库管理系统中使用这些历史数据,需要将数据从国外数据库迁移到国产数据库中,如何快速有效地将历史数据进行异构数据库迁移已经成为当前数据库领域的一个重要研究方向。
本文对异构数据库迁移系统的异构性进行分析,从数据库模式迁移和数据迁移两方面对异构数据库迁移过程进行描述,实现了一种通用的异构数据库迁移方法,解决异构数据库迁移问题,通用性和可扩展性好,且便于操作。最后,在QT 框架下,设计实现异构数据库数据迁移系统。实验验证表明,本系统达到了较好的数据迁移效果。
异构数据库迁移系统是将源数据库中的数据迁移到目标数据库中,异构数据库的异构性主要表现在以下三个方面。
(1)硬件平台的异构性[4]。数据库管理系统运行的硬件平台不同,其运行平台可能是X86、MIPS 或ARM 平台;
(2)操作系统平台的异构性。异构数据库系统中的数据库管理系统运行的操作系统种类较多,例如Windows、Linux、VxWorks与中标麒麟等;
(3)数据库引擎的异构性。常见国外数据库有Oracle、SQLServer、Mysql 与Postgre 等,常见国产数据库管理系统有达梦、金仓、神通等。
异构数据库迁移包括模式迁移与数据迁移两部分。
模式迁移是指为数据库数据搭建了数据存在的框架形式,在数据库中定义了数据存在的形式,包括数据库中的表和表中各字段的属性、表间依赖关系、字段依赖关系等信息。
由于设计理念不同,各数据库管理系统中数据库模式的表现形式也大相径庭,数据库模式迁移的关键点在于数据类型映射[5]。数据类型差异表现以下四个方面。
(1)异构数据库支持的数据类型种类不完全相同。例如A 数据库有时间类型,B 数据库不一定有时间类型。
(2)异构数据库相同数据类型的名称可能不同。例如存储整型数据,A 数据库类型名称为integer,B 数据库类型名称为int。
图1:异构数据库迁移系统架构图
图2:数据源表储结构
(3)在不同场景下,一个数据库的同一数据类型对应其它数据库的数据类型不同。例如A 数据库的varchar 类型根据实际数据长度,可能对应B 数据库的varchar 或blob 数据类型。
(4)类型映射往往为单向映射。例如A 数据库支持money 类型,B 数据库不支持money 但是支持double 类型。此时A 数据库的money 类型对应B 数据库double 类型,但是B 数据库的double类型一般不能直接转换为A 数据库money 类型。
图3:数据字典信息表存储结构
图4:数据类型存储结构
图5:异构数据库迁移流程图
数据迁移则是将原数据库中的数据填充到已搭建完成的目标数据库框架中。数据迁移具体实施是整个体系中关键的部分,需确定数据转换的细节、数据迁移的详细步骤以及完成迁移后的反馈等。
本系统的设计原则有三点。
(1)可扩展性。系统应具备较强的可扩展性,支持常见的国内外关系型数据库产品,例如Oracle、SQLServer、Mysql、Postgre、达梦、金仓、神通、天熠数据库等。
(2)通用性[6]。对异构数据库的数据库结构不做要求,做到数据库的“即插即用”,即数据库接入后就可以使用本软件进行迁移。
(3)可配置。用户可对目标数据库表名、源数据库管理系统和目标数据库管理系统中的数据类型的映射关系等进行配置。
异构数据库迁移系统的架构如图 1所示,系统分为应用层、业务逻辑层与数据层。
(1)应用层。该层为用户提供操作界面,接收用户输入信息。包含数据源注册、模式映射与数据库迁移功能。数据源注册是将数据源注册到系统中,解决异构数据库的硬件平台异构、操作系统平台的异构;模式映射用于管理源数据库管理系统和目标数据库管理系统中的元数据对应关系,主要数据字典元数据映射,数据类型元数据映射两个方面;数据库迁移用于为用户提供迁移源数据库与目标数据库选择。
(2)业务逻辑层。该层位于应用层和数据层之间,是数据库迁移的核心层。该层处理应用层中提供的功能。包括数据源管理、模式映射管理、数据库迁移流程管理模块。
(3)数据层。该层包括接入到系统中的所有异构数据库以及数据库迁移的源数据库与目标数据库。本系统中使用各异构数据库提供的ODBC 标准接口访问各数据库管理系统。
按照模块化设计思想进行异构数据迁移系统的设计,分为数据源注册、模式映射与数据迁移流程设计三个模块。
数据源注册分为两步,首先通过加载数据库厂商提供的驱动连接数据源,然后将数据源注册信息写入到本地SQLite 数据库中。数据源注册需要的信息包括数据源类型、注册名称、IP 地址、端口号、DNS 信息、默认连接数据库名称、用户名与密码,数据源注册信息的表结构图如图 2所示。
3.2.1 建立数据字典信息
建立数据库信息、数据库内表信息、表内字段信息三类数据字典信息,并保存到本地SQLite 中,数据字典存储结构如图3所示。
(1)获取数据源数据库信息,并且写入到SQLite 的“数据库表”(T_DATABASEINFO)。以Oracle 数据库为例,在Qt 下获取数据源数据库信息的方式为QsqlQuery::exec(“SELECT * FROM USER_USERS”)。
(2)获取表的信息,并且写入到SQLite 的“数据表表”(T_TABLEINFO)。以Oracle 数据库为例,在Qt 下获取数据源内表的信息的方式为:QsqlQuery::exec(“SELECT * FROM USER_TABLES”)。
(3)获取字段信息,并且写入到SQLite 的“数据字段表”(T_FIELDINFO)。以Oracle 数据库为例,在Qt 下获取数据源内字段信息的方式为:QsqlQuery::exec(“SELECT COLUMN_NAME,DATA_TYPE,DATA_LENGTH FROM USER_TAB_COLUMNS WHERE TABLE_NAME = '%1'").arg(strtable)”),其中strtable 为表的名称。
3.2.2 建立数据类型映射关系
数据类型管理对各异构数据库中支持的数据类型进行统一管理,重点根据各数据库数据类型的含义构建多元数据类型映射关系,解决从源数据库到目标数据库数据模式转换时的类型映射问题。
针对接入到系统中的各异构数据库数据源,提取其支持的所有数据类型,保存到本地SQLite 数据库进行统一管理。针对各异构数据库中的数据类型,按照语义接近的原则在各异构数据库间建立数据类型映射关系,解决异构数据库模式迁移过程中从源数据库到目标数据库的数据类型映射问题。根据异构数据数据类型映射特点,将各数据源中的通用数据类型按照字符型、浮点型、整形、时间和日期、blob 型分类映射,并将当前系统中的映射关系存储在本地SQLite 数据库中,各数据类型的映射关系存储结构如图 4所示。
异构数据库迁移系统包括数据抽取、数据转换和数据装载三部分,如图 5所示为异构数据库迁移流程。
(1)数据抽取。通过数据库访问接口获取源数据库A 数据字典信息和数据信息。
(2)数据转换。根据映射关系,将数据抽取获取到的源数据库中的数据模式和数据转换为符合目标数据库规则的数据模式和数据。
表1:Oracle 到达梦/天熠数据类型映射关系
表2:迁移系统试验结果
图6:异构数据库迁移界面
(3)数据装载。将数据转换后形成的数据模式和数据加载到目标数据库管理系统中,在目标数据库管理系统中形成数据库B,且B 和A 在语义和数据上是等价的。
数据迁移模块将要迁移的数据库数据从源数据库中读出,转换为可被目标数据库识别的形式,然后写入到目标数据库中。数据迁移位于模式迁移之后,目标数据库管理系统中具备了和源数据库管理系统中数据模式相同的数据库后,才能进行数据迁移。对于关系数据库来说,使用ODBC 标准接口从源数据库中获取数据,并按照目标数据库所支持的SQL 语句类型生成通用SQL 插入语句,使用ODBC接口执行生成的SQL语句,可将数据写入到目标数据库中。
实验采取将Oracle 数据迁移到国产数据库达梦数据库和天熠数据库中,来验证本系统的功能。选取Oracle 中数据量超过1000 万条的18 张表迁移到达梦数据库中,另外再选取Oracle 中数据量不超过1000 万条的5 张表迁移到天熠数据库中。用户界面如图 6所示,在该界面中选择源数据库、目标数据库、数据类型映射,系统根据这些信息完成数据库迁移。
如表1所示为数据库迁移时设定的数据类型映射关系。
迁移验证是将目标数据库中的数据与源数据库进行核对,以确保迁移后的数据的完整性和正确性。包括核验数据总数与核验记录内容两个方面。
(1)核验数据总数。分别查询源数据库和目标数据库中各表中的数据记录总数量,确认目标数据库和源数据库中各表数据总数的比值,即完整率。
(2)核验记录内容。对源数据库和目标数据库中的数据按照主键依次进行查询,确认目标数据库和源数据库中各表数据内容一致的比率,即准确率。
使用上述两种方法,对数据迁移前后的源数据库和目标数据库数据进行验证,具体结果如表2所示。
从实验结果可以看出,数据迁移过程中数据的完整性保持的较好,准确率略有欠缺,即所有数据记录都进行了迁移,但存在部分记录的数据迁移不完整的情况。对从源数据库到目标数据库产生偏差的数据记录进行分析,发现错误发生时Oracle 和达梦数据库的数据类型不完全匹配,达梦数据库数据类型对应的数据长度偏小,在数据载入时未能将全部数据写入数据库中,但此偏差在系统的允许范围内。
本文针对异构数据库环境下,数据库数据共享共用难的问题,对异构数据库迁移系统的异构性进行分析,从数据库模式迁移和数据迁移两方面对异构数据库迁移过程进行描述,实现了一种通用的异构数据库数据迁移方法,解决异构数据库数据迁移问题,最后本文对设计的异构数据库迁移系统进行了实验和分析。实验结果表明,本设计有效解决异构数据库迁移问题。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!