数据库数据的校验方法和装置与流程

文档序号:11950312阅读:476来源:国知局
数据库数据的校验方法和装置与流程

本申请涉及计算机技术领域,尤其涉及一种数据库数据的校验方法和装置。



背景技术:

随着开源数据库的应用和云计算的发展,出现了越来越多的数据跨数据库迁移的需求。所谓的数据迁移是指,根据提供的数据迁移的工具,按照指定的步骤和规则,将一种数据库(源数据库)的数据导出,以其他语句或者数据文件的形式,装载到目标数据库中。

但是,数据在数据库之间迁移后,还会产生以下的需要:

(1)数据库在异构关系型数据库之间迁移后,需要进行数据校验;

(2)数据迁移之后没有类型与迁移前的数据对应。例如,一个字段是Oracle中的TIMESTAMP WITH TIME ZONE,数据迁移到MySQL后需要有两个字段存储;

(3)数据迁移前后数据的字符集编码不能同时被两种数据库支持,需要转换;

(4)不同的数据库所支持的数据精度不同,需要判断迁移后的数据精度是否满足需求。

并且,数据迁移之后还需要进行数据的等价转换,或者是数据类型的映射、或者是格式上的、或者是精度上的、或者是编码上的转换。但是,现有技术中并没有提供对数据迁移前后两种数据库的数据有效校验的技术方案,无法判断迁移前后的数据是否一致、是否能够满足用户的需求。



技术实现要素:

本申请的主要目的在于提供一种数据库数据的校验方法和装置,以克服现有技术中存在的数据库数据迁移前后没有对数据进行校验、无法判断数据是否一致的问题。

为解决上述问题,根据本申请实施例提供了一种数据库数据的校验方法,用于对第一数据库迁移至第二数据库的数据进行验证。所述方法包括:根据第一数据库和第二数据库所支持的数据类型分别设置每个数据库对应的数据类型映射规则;按照数据库对应的数据类型映射规则,分别将所述第一数据库和所述第二数据库中的数据转换为中间数据,并判断转换后的中间数据是否相同。

其中,所述将所述第一数据库和所述第二数据库中的数据转换为中间数据,包括:分别获取所述第一数据库和所述第二数据库中的数据,并判断所获取的数据的数据类型;按照所述数据类型映射规则,将所述第一数据库中的数据转换为第一中间数据,将所述第二数据库中的数据转换为第二中间数据。

其中,还包括:所述第一中间数据和所述第二中间数据的数据格式包括:数值型中间数据、字符型中间数据、二进制流中间数据;预先设置每种数据格式的中间数据对应的数据对比规则,使用对应的数据对比规则判断所述第一中间数据和所述第二中间数据是否相同。

其中,还包括:对于数值型中间数据,所述第一数据的数值为P、精度为M,所述第二中间数据的数值为Q、精度为N,其中M≥N,若|P-Q|<10-N,则判断所述第一中间数据和所述第二中间数据相同。

其中,还包括:对于字符型中间数据,将所述第一中间数据和所述第二中间数据按位对比,若一致则判断所述第一中间数据和所述第二中间数据相同。

其中,还包括:对于二进制流中间数据,将所述第一中间数据和所述第二中间数据按位对比,若一致则判断所述第一中间数据和所述第二中间数据相同。

其中,还包括:所述数据类型映射规则包括:第一数据类型映射规则和第二数据类型映射规则;按照所述第一数据类型映射规则将所述第一数据库中的数据转换为第一中间数据,按照所述第二数据类型映射规则将所述第二数据库中的数据转换为第二中间数据。

其中,所述第一数据库为Oracle数据库,所述第一数据类型映射规则包括:将以下数据类型的数据转换为数值型中间数据:NUMBER、LONG、DATE、BINARY_FLOAT、BINARY_DOUBLE、TIMESTAMP、TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONE、INTERVAL YEAR、INTERVAL DAY;将以下数据类型的数据转换为字符型中间数据:VARCHAR2、NVARCHAR2、CHAR、NCHAR、CLOB、NCLOB、BFILE;将以下数据类型的数据转换为二进制流中间数据:RAW、LONG RAW、BLOB;以下数据类型的数据不进行数据转换:ROWID、UROWID。

其中,所述第二数据库为MySQL数据库,所述第二数据类型映射规则包括:将以下数据类型的数据转换为数值型中间数据:BIT、TINYINT、BOOL、BOOLEAN、SMALLINT、MED、INT、INTEGER、BIGINT、DECIMAL、DEC、FLOAT、DOUBLE、DOUBLE PRECISION、FLOAT(p)、DATE、DATETIME、TIMESTAMP、TIME、YEAR;将以下数据类型的数据转换为字符型中间数据:CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、ENUM、SET;将以下数据类型的数据转换为二进制流中间数据:BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB。

其中,还包括:输出判断结果为不相同的中间数据所对应的数据、数据表、数据库的其中之一或其组合。

根据本申请实施例还提供一种数据库数据的校验装置,用于对第一数据库迁移至第二数据库的数据进行验证。所述装置包括:映射规则设置模块,用于根据第一数据库和第二数据库所支持的数据类型分别设置每个数据库对应的数据类型映射规则;转换及比较模块,用于按照数据库对应的数据类型映射规则,分别将所述第一数据库和所述第二数据库中的数据转换为中间数 据,并判断转换后的中间数据是否相同。

其中,所述转换及比较模块包括:数据获取模块,用于分别获取所述第一数据库和所述第二数据库中的数据,并判断所获取的数据的数据类型;数据转换模块,用于按照所述数据类型映射规则,将所述第一数据库中的数据转换为第一中间数据,将所述第二数据库中的数据转换为第二中间数据。

其中,所述第一中间数据和所述第二中间数据的数据格式包括:数值型中间数据、字符型中间数据、二进制流中间数据;所述转换及比较模块包括:对比规则设置模块,用于预先设置每种数据格式的中间数据对应的数据对比规则;数据比较模块,用于使用对应的数据对比规则比对判断所述第一中间数据和所述第二中间数据是否相同。

其中,所述数据比较模块包括:第一比较模块,用于对于数值型中间数据,所述第一中间数据的数值为P、精度为M,所述第二中间数据的数值为Q、精度为N,其中M≥N,若|P-Q|<10-N,则判断所述第一中间数据和所述第二中间数据相同。

其中,所述数据比较模块包括:第二比较模块,用于对于字符型中间数据,将所述第一中间数据和所述第二中间数据按位对比,若一致则判断所述第一中间数据和所述第二中间数据相同。

其中,所述数据比较模块包括:第三比较模块,用于对于二进制流中间数据,将所述第一中间数据和所述第二中间数据按位对比,若一致则判断所述第一中间数据和所述第二中间数据相同。

其中,所述映射规则设置模块设置的数据类型映射规则包括:第一数据类型映射规则和第二数据类型映射规则;所述数据转换模块,进一步包括:第一转换模块,用于按照所述第一数据类型映射规则将所述第一数据库中的数据转换为第一中间数据;第二转换模块,用于按照所述第二数据类型映射规则将所述第二数据库中的数据转换为第二中间数据。

其中,所述第一数据库为Oracle数据库,所述第一数据类型映射规则包括:将以下数据类型的数据转换为数值型中间数据:NUMBER、LONG、DATE、BINARY_FLOAT、BINARY_DOUBLE、TIMESTAMP、TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONE、INTERVAL YEAR、INTERVAL DAY;将以下数据类型的数据转换为字符型中间数据:VARCHAR2、NVARCHAR2、CHAR、NCHAR、CLOB、NCLOB、BFILE;将以下数据类型的数据转换为二进制流中间数据:RAW、LONG RAW、BLOB;以下数据类型的数据不进行数据转换:ROWID、UROWID。

其中,所述第二数据库为MySQL数据库,所述第二数据类型映射规则包括:将以下数据类型的数据转换为数值型中间数据:BIT、TINYINT、BOOL、BOOLEAN、SMALLINT、MED、INT、INTEGER、BIGINT、DECIMAL、DEC、FLOAT、DOUBLE、DOUBLE PRECISION、FLOAT(p)、DATE、DATETIME、TIMESTAMP、TIME、YEAR;将以下数据类型的数据转换为字符型中间数据:CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、ENUM、SET;将以下数据类型的数据转换为二进制流中间数据:BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB。

其中,还包括:输出模块,用于输出判断结果为不相同的中间数据所对应的数据、数据表、数据库的其中之一或其组合。

与现有技术相比,根据本申请的技术方案,通过分别将源数据库和目标数据库中的数据按照指定的数据类型映射规则转换成中间数据,并按照指定的数据对比规则对转换后的中间数据进行比对,判断出两个数据库的数据是否相同,有效实现了数据库间的数据校验。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1示出根据本申请一个实施例的数据库数据的校验方法的流程图;

图2示出根据本申请另一实施例的数据库数据的校验方法的流程图;

图3示出根据本申请一个实施例的数据库数据的校验装置的结构框图;

图4示出根据本申请另一实施例的数据库数据的校验装置的结构框图;

图5示出根据本申请又一实施例的数据库数据的校验装置的结构框图。

具体实施方式

本申请的主要思想在于,通过分别将源数据库(第一数据库)和目标数据库(第二数据库)中的数据转换成中间数据格式(MDT),并通过对中间数据的比较从而实现关系型数据库(包括异构数据库)之间的数据验证,能够在数据迁移之后,从应用的角度对数据的一致性进行比较验证。

为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

根据本申请实施例,提供一种数据库数据的校验方法。

本申请所述的数据迁移是指数据跨数据库迁移,按照指定的步骤和规则,将源数据库中的数据导出,以固定的语句或者数据文件的形式,装载到目标数据库中。在进行数据迁移时,可以采用现有技术中的数据迁移的方法,本申请对此不进行限定。

本申请用于对第一数据库迁移至第二数据库的数据进行验证,其中,第一数据库可以为源数据库,第二数据库可以为目标数据库。并且,所述第一数据库和所述第二数据库可以是同构关系型数据库,也可以是异构关系型数据库,每个数据库可以包括一个或多个数据表,而每个数据表则可以包括一个或多个行和列。

参考图1,图1示出根据本申请一个实施例的数据库数据的校验方法的流程图。如图1所示,该方法包括:

步骤S102,根据第一数据库和第二数据库所支持的数据类型分别设置其每个数据库对应的数据类型映射规则。

在本申请的实施例中,不同类型的数据库可以分别支持不同数据类型的数据,因此需要分别针对该数据库所支持的数据类型设置相对应的数据类型 映射规则。例如,设置与第一数据库中的数据类型相对应的第一数据类型映射规则,其中,该第一数据类型映射规则中详细定义了一系列的第一数据库所支持的数据类型对应的映射规则;以及设置与第二数据库中的数据类型相对应的第二数据类型映射规则,其中,该第二数据类型映射规则中也详细定义了一系列的第二数据库所支持的数据类型对应的映射规则。

步骤S104,按照数据库对应的数据类型映射规则,分别将所述第一数据库和所述第二数据库中的数据转换为中间数据(Meta Data Type,简称MDT),并判断转换后的中间数据是否相同。

具体地,首先通过第一数据库获取其中存储的数据并判断其数据类型;通过第二数据库获取其中存储的数据并判断其数据类型;然后按照所述第一数据类型映射规则将所述第一数据库中的数据转换为第一中间数据,按照所述第二数据类型映射规则将所述第二数据库中的数据转换为第二中间数据,最后判断转换后的第一中间数据和第二中间数据是否相同。

在本申请的一个实施例中,中间数据的数据格式包括:数值型中间数据(MDT_DECIMAL)、字符型中间数据(MDT_STRING)以及二进制流中间数据(MDT_BINARY)。预先设置上述三种数据格式的中间数据对应的数据对比规则,并采用对应的数据对比规则判断所述第一中间数据和所述第二中间数据是否相同。例如,如果转换后的第一中间数据和第二中间数据为数值型中间数据,则使用数值型中间数据对应的数据对比规则比对第一中间数据和第二中间数据,并判断第一中间数据和第二中间数据是否相同。

根据本申请的上述实施例,通过将两个数据库中的数据按照指定的数据类型映射规则转换成中间数据(MDT),并按照指定的数据对比规则对转换后的中间数据进行比对,从而判断出两个数据库数据是否相同,有效实现了数据库间的数据校验。

下面参考图2,图2是根据本申请另一实施例的数据库数据的校验方法的流程图。如图2所示,该方法包括:

步骤S202,将第一数据库中的数据迁移至第二数据库中,具体的数据迁移方法本申请不进行限定。

步骤S204,根据第一数据库和第二数据库所支持的数据类型,分别设置每个数据库的数据类型对应的数据类型映射规则。其中,所述数据类型映射规则中详细定义了一系列的与数据库所支持的数据类型对应的映射规则。例如,设置与第一数据库对应的第一数据类型映射规则、与第二数据库对应的第二数据类型映射规则。

步骤S206,分别获取所述第一数据库和所述第二数据库中的数据,并判断所获取的数据的数据类型。

步骤S208,按照数据库的数据类型对应的数据类型映射规则,将所述第一数据库中的数据转换为第一中间数据,将所述第二数据库中的数据转换为第二中间数据。

其中,所述中间数据的数据格式包括:数值型中间数据(MDT_DECIMAL)、字符型中间数据(MDT_STRING)、二进制流中间数据(MDT_BINARY)。

具体的数据类型映射规则包括:

(1)数值型中间数据(MDT_DECIMAL),由数值和精度两部分数据组成。当精度小于或等于0时,视为整数,当精度大于0时为小数;对于浮点数类型,精度取值为小数的位数。例如:1.21转化为MDT_DECIMAL后为(1.21,2),12345转化为MDT_DECIMAL后为(12300,-2)。

(2)对于字符型中间数据(MDT_STRING),按照数据库表定义的编码读出后,统一转为utf8编码。

(3)对于二进制流中间数据(MDT_STRING),由于其为二进制形式因此不需要特别转换,直接提取即可。

(4)对于各种时间类型的数据,统一转换为unix时间戳的格式,精度精确到微秒。

(5)对于定长自动补齐空格的数据类型,中间数据去掉末尾全部空格。

步骤S210,预先设置每种数据格式的中间数据对应的数据对比规则,使用对应的数据对比规则判断所述第一中间数据和所述第二中间数据是否相同。具体的数据对比规则请参考表1。

表1

另外,需要说明,在进行比对数字时,两个库中支持的精度不一致时,首先需确认精度小的一方是否满足应用需求,否则判定数据不一致。

步骤S212,输出判断结果为不相同的中间数据所对应的数据、数据表、数据库的其中之一或其组合。例如,对于判断结果为不相同的第一中间数据第二中间数据,输出第一中间数据对应的第一数据库中的数据和第二中间数据对应的第二数据库中的数据;或者输出第一中间数据对应的第一数据库中的数据表和第二中间数据对应的第二数据库中的数据表;或者输出第一中间数据对应的第一数据库和第二中间数据对应的第二数据库;或者输出上述的数据、数据表、数据库的结合或其中二者的结合,此处不再赘述。

下面以第一数据库为Oracle数据库、第二数据库为MySQL数据库为例,描述本申请实施例。

在本实施例中,将数据由Oracle库迁移至MySQL库,Oracle库所支持的数据类型及其转换为中间数据的映射转换规则请参考表2,MySQL库所支持的数据类型及其转换为中间数据的转换规则请参考表3。

表2

表3

按照表2将Oracle数据库的数据转换为第一中间数据、按照表3将MySQL数据库的数据转换为第二中间数据,然后按照表1的数据对比规则判断转换后的第一中间数据和第二中间数据是否相同,最后输出判断结果为不相同的中间数据所对应的数据、数据表、数据库的其中之一或其组合。

下面的表4中示出实际应用中的数据迁移以及数据校验的一些实例。

表4

综上所示,通过本申请的数据库数据的校验方法有效实现了数据库间的 数据校验,并且本申请具有支持同构和异构关系型数据库对比、对数据库内置数据类型转换后进行校验,自适应迁移前后数字类型精度变化、自适应迁移前后字符编码的变化等优点。

根据本申请实施例还提供一种数据库数据的校验装置,用于对第一数据库迁移至第二数据库的数据进行验证。如图3所示,是根据本申请一个实施例的数据库数据的校验装置的结构框图,该装置包括:

映射规则设置模块31,用于根据第一数据库和第二数据库所支持的数据类型分别设置每个数据库对应的数据类型映射规则;

转换及比较模块32,用于按照数据库对应的数据类型映射规则,分别将所述第一数据库和所述第二数据库中的数据转换为中间数据,并判断转换后的中间数据是否相同。

参考图4,所述转换及比较模块32进一步包括:

数据获取模块41,用于分别获取所述第一数据库和所述第二数据库中的数据,并判断所获取的数据的数据类型。

数据转换模块42,用于按照所述数据类型映射规则,将所述第一数据库中的数据转换为第一中间数据,将所述第二数据库中的数据转换为第二中间数据。

对比规则设置模块43,用于预先设置每种数据格式的中间数据对应的数据对比规则,其中中间数据的数据格式包括:数值型中间数据、字符型中间数据、二进制流中间数据;具体的数据对比规则请参考表1。

数据比较模块44,用于使用对应的数据对比规则比对判断所述第一中间数据和所述第二中间数据是否相同。

继续参考图5,所述数据比较模块44进一步包括:

第一比较模块51,用于对于数值型中间数据,所述第一中间数据的数值为P、精度为M,所述第二中间数据的数值为Q、精度为N,其中M≥N,若|P-Q|<10-N,则判断所述第一中间数据和所述第二中间数据相同。

第二比较模块52,用于对于字符型中间数据,将所述第一中间数据和所述第二中间数据按位对比,若一致则判断所述第一中间数据和所述第二中间数据相同。

第三比较模块53,用于对于二进制流中间数据,将所述第一中间数据和所述第二中间数据按位对比,若一致则判断所述第一中间数据和所述第二中间数据相同。

在本申请的一种实施方式中,所述映射规则设置模块31设置的数据类型映射规则包括:第一数据类型映射规则和第二数据类型映射规则;所述数据转换模块42进一步包括:第一转换模块(未示出),用于按照所述第一数据类型映射规则将所述第一数据库中的数据转换为第一中间数据;第二转换模块(未示出),用于按照所述第二数据类型映射规则将所述第二数据库中的数据转换为第二中间数据。

下面以第一数据库为Oracle数据库、第二数据库为MySQL数据库为例,描述本申请实施例。在本实施例中,将数据由Oracle库迁移至MySQL库。

所述第一数据类型映射规则包括:

将以下数据类型的数据转换为数值型中间数据:NUMBER、LONG、DATE、BINARY_FLOAT、BINARY_DOUBLE、TIMESTAMP、TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONE、INTERVAL YEAR、INTERVAL DAY;

将以下数据类型的数据转换为字符型中间数据:VARCHAR2、NVARCHAR2、CHAR、NCHAR、CLOB、NCLOB、BFILE;

将以下数据类型的数据转换为二进制流中间数据:RAW、LONG RAW、BLOB;

以下数据类型的数据不进行数据转换:ROWID、UROWID。

具体的Oracle库所支持的数据类型及其转换为中间数据的映射转换规则请参考表2。

并且,所述第二数据类型映射规则包括:

将以下数据类型的数据转换为数值型中间数据:BIT、TINYINT、BOOL、 BOOLEAN、SMALLINT、MED、INT、INTEGER、BIGINT、DECIMAL、DEC、FLOAT、DOUBLE、DOUBLE PRECISION、FLOAT(p)、DATE、DATETIME、TIMESTAMP、TIME、YEAR;

将以下数据类型的数据转换为字符型中间数据:CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、ENUM、SET;

将以下数据类型的数据转换为二进制流中间数据:BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB。

具体的MySQL库所支持的数据类型及其转换为中间数据的转换规则请参考表3。

此外,所述数据库数据的校验装置还包括:输出模块(未示出),用于输出判断结果为不相同的中间数据所对应的数据、数据表、数据库的其中之一或其组合。

本申请的方法的操作步骤与装置的结构特征对应,可以相互参照,不再一一赘述。

综上所示,通过将源数据库和目标数据库中的数据按照指定的数据类型映射规则转换成中间数据,并按照指定的数据对比规则对转换后的中间数据进行比对,判断出两个数据库数据是否相同,有效实现了数据库间的数据校验。本申请具有支持同构和异构关系型数据库对比、对数据库内置数据类型转换后进行校验,自适应迁移前后数字类型精度变化、自适应迁移前后字符编码的变化等优点。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1