主、 备数据库记录一致性校验方法及系统 【技术领域】
本发明属于数据库技术领域, 尤其涉及一种主、 备数据库记录一致性校验方法及系统。 背景技术 数据库备份主要解决主数据库出现故障时的数据安全问题, 备份程序需要根据策 略将主数据库中的记录同步到备份数据库, 按照备份系统的设计, 主、 备数据库中的记录内 容应该一致。 但是实际应用时, 由于网络、 备份软件、 计算机硬件或操作系统等故障, 可能会 出现备份数据库中的记录内容与主数据库中的记录不一致的情况, 因而有必要对主、 备数 据库的记录进行检查, 以发现主、 备份数据库中不一致的记录, 并对其进行修复。
现有技术中, 对主、 备数据库记录的一致性进行判断的方法主要有 :
1、 比较数据库大小 : 对数据库的记录的数量进行比较, 或者对数据文件的大小进 行比较。
2、 比较数据文件的校验码 : 对数据文件计算校验码, 并比较校验码是否一致。
3、 比较记录的校验码 : 对每条数据库记录计算校验码, 并比较校验码是否一致。
上述第 1 种方法, 仅比较数据库记录数量, 还不能确定记录内容是否一致 ; 上述第 2 种方法, 比较数据库记录文件, 但由于数据库在不同系统中存写文件的差异, 虽然文件不 一致, 数据记录仍然可能是一致的, 因而该方法也容易存在误判 ; 上述第 3 种方法, 比较数 据记录的校验码, 可以很好地检查主、 备数据库的记录是否一致, 但由于要计算并比较每一 条记录的校验码, 工作量很大, 严重影响系统的性能。
因此有必要开发一种新的主、 备数据库记录一致性校验方法, 既能够准确校验主、 备数据库记录的一致性, 又能够较现有方法显著提高校验效率。
发明内容
本发明要解决的技术问题是针对现有技术中存在的要么校验不准确, 要么校验效 率低的问题, 提出一种校验准确, 同时校验效率较高的主、 备数据库记录一致性校验方法及 系统。
为解决上述技术问题, 本发明主、 备数据库记录一致性校验方法包括如下步骤 :
在数据备份之前, 对每条记录增加标识码字段和校验码字段, 其中标识码字段是 对记录的编号, 标识记录的唯一性, 校验码字段用于标识记录值的特征 ;
在考察时间段内, 将记录分成 M 个分片, 并且对每个分片计算校验码, M 为自然数 ;
逐个对主、 备数据库中对应的分片进行一致性检验 ; 如果校验通过, 则判定该分片 内的记录一致, 如果校验不通过, 则再对该分片中的记录逐个进行一致性校验, 以找出不一 致的记录。
进一步地, 所述记录的校验码字段是对记录的原有各字段进行计算得到的。
更进一步地, 对记录的原有各字段进行计算, 可以是采用 HASH 算法进行计算, 也可以是采用签名算法或其它专门算法进行计算。
进一步地, 在考察时间段内, 将记录分成 M 个分片的方法为 :
在考察时间段内, 以 N 个记录为一个分片, 对该考察时间段内生成的所有记录依 次进行分片, 最后一个分片允许不足 N 个记录, N 为自然数。
进一步地, 对分片计算校验码的方法为 :
采用专门算法对该分片中各记录的校验码字段进行计算, 来得到分片的校验码。 采用的专门算法可以是 HASH 算法, 也可以是签名算法或其它专门算法。
进一步地, 对主、 备数据库中对应的分片进行一致性检验, 采用的方法为 :
判断主、 备数据库中对应的分片的校验值以及记录个数是否一致, 当主、 备数据库 中对应的分片的校验值以及记录个数均一致时, 一致性校验通过 ; 否则一致性校验不通过。
一种主、 备数据库记录一致性校验系统, 包括 :
字段增加模块, 用于在数据备份之前, 对每条记录增加标识码字段和校验码字段, 其中标识码字段是对记录的编号, 标识记录的唯一性, 校验码字段用于标识记录值的特 征;
分片模块, 用于在考察时间段内, 将记录分成 M 个分片, 并且对每个分片计算校验 码, M 为自然数 ;
一致性校验模块, 用于逐个对主、 备数据库中对应的分片进行一致性检验 ; 如果校 验通过, 则判定该分片内的记录一致, 如果校验不通过, 则再对该分片中的记录逐个进行一 致性校验, 以找出不一致的记录。
进一步地, 所述记录的校验码字段是对记录的原有各字段进行计算得到的。
进一步地, 所述分片模块包括分片子模块和分片校验码计算子模块 ; 其中, 所述分 片子模块用于在考察时间段内, 以 N 个记录为一个分片, 对该考察时间段内生成的所有记 录依次进行分片, 最后一个分片允许不足 N 个记录, N 为自然数 ; 所述分片校验码计算子模 块用于对分片中各记录的校验码字段进行计算, 可以是采用 HASH 算法进行计算, 也可以是 采用签名算法或其它专门算法进行计算, 来得到该分片的校验码。
进一步地, 所述一致性校验模块包括第一校验子模块和第二校验子模块 ; 其中第 一校验子模块用于判断主、 备数据库中对应的分片的校验值以及记录个数是否一致, 仅当 主、 备数据库中对应的分片的校验值以及记录个数均一致时, 判定主、 备数据库中对应分片 的记录一致, 其它情况判定为主、 备数据库中对应分片的记录不一致 ; 所述第二校验子模块 用于, 当所述第一校验子模块判定主、 备数据库中对应分片的记录不一致时, 对该对应分片 中的记录逐个进行一致性校验, 以找出不一致的记录。
本发明的有益效果为 :
本发明使用标识码字段标识记录, 使用校验码字段标识记录值的特征, 并且在考 察时间段内, 将记录分成 M 个分片, 为了提高一致性校验效率, 本发明将一致性校验过程划 分为两个阶段实施, 其中第一阶段校验主、 备数据库中对应分片的整体特征, 若整体特征相 符, 则认为对应分片内的记录一致, 若对应分片的整体特征不符, 则进入第二阶段, 对主、 备 数据库中该对应分片内的各记录的特征分别进行比较, 以查找出该对应分片内不一致的记 录。
采用本发明方案能够显著提高主、 备数据库记录一致性校验的效率, 并且本发明还具有技术方案实施简便、 成本低等优点。 附图说明
图 1 为本发明第一实施例的主、 备数据库记录一致性校验方法流程示意图 ; 图 2 为本发明第二实施例的主、 备数据库记录一致性校验系统结构示意图。具体实施方式
下面结合附图和具体实施方式对本发明作进一步详细说明。
本发明第一实施例提供了一种主、 备数据库记录一致性校验方法, 如图 1 所示, 该 实施例中, 本发明主、 备数据库记录一致性校验方法具体包括如下步骤 :
步骤 101, 在数据备份之前, 对每条记录增加标识码字段和校验码字段, 其中标识 码字段即记录的编号, 用于标识记录的唯一性, 校验码字段用于标识记录值的特征。 该实施 例中, 可以单独增加一个包含这两个字段的数据表, 如表一所示。
表一、 包含标识码字段和校验码字段的数据表
记录的校验码字段可以是对记录的原有各字段进行计算得到的, 可以是用 HASH 算法进行计算, 也可以是用签名算法或其它专门算法进行计算。 当然, 记录的校验码字段也 可以采用其它合理的方式来得到, 只要其能够表征记录值的特征即可。
步骤 102, 在某个考察时间段 Δt(Δt 表示起点 t1 和终端 t2 均确定的一段时间 ) 内, 将记录分成 M 个分片, 并且对每个分片计算校验码, M 为自然数。得到的分片如表二所 示, 其中记录生成时间段即上述考察时间段。
表二、 分片示意表
该实施例中, 在考察时间段内, 将记录分成 M 个分片的方法为 :
在考察时间段内, 以 N 个记录为一个分片, 对该考察时间段内生成的所有记录依 次进行分片, 最后一个分片允许不足 N 个记录, 其中 N 为自然数。
当然, 在考察时间段内, 将记录分成 M 个分片还可以采用其它方法, 并不局限于本 实施例提供的方法, 例如前 M-1 个分片的记录个数也不一定要求相等, 即不一定均为 N 个。
该实施例中, 对分片计算校验码的方法可以为 :
对该分片中各记录的校验码字段进行计算, 可以是采用 HASH 算法进行计算, 也可 以是采用签名算法或其它专门算法进行计算, 来得到分片的校验码。
当然, 分片的校验码也可以采用其它合理的方式来得到, 只要其能够表征该分片 的特征即可。
步骤 103, 逐个对主、 备数据库中对应的分片进行一致性检验 ; 如果校验通过, 则 判定该分片内的记录一致, 如果校验不通过, 则再对该分片中的记录逐个进行一致性校验,
以找出不一致的记录。
该实施例中, 对主、 备数据库中对应的分片进行一致性检验, 采用的方法为 :
判断主、 备数据库中对应的分片的校验值以及记录个数是否一致, 当主、 备数据库 中对应的分片的校验值以及记录个数均一致时, 一致性校验通过 ; 否则一致性校验不通过。
该步骤具体可以按如下方式来实现 :
步骤 1031, 将主用数据库中某个分片的记录个数、 考察时间段 Δt、 最小记录 Rmin、 最大记录标识码 Rma 和分片校验码 VN 发送至备用数据库端。
步骤 1032, 在备用数据库端, 根据 Δt、 Rmin 和 Rmax 查询记录, 如果 :
1) 查询的记录个数与主用数据库端发送来的分片记录个数不一致, 则该对应的记 录分片不一致 ;
2) 查询的记录个数与主用数据库端发送来的分片记录个数相一致, 但根据备用数 据库的该分片计算得到的分片验证码与主用数据库端发送来的对应分片的验证码 VN 不一 致, 则该对应分片的记录不一致 ;
3) 查询的记录个数与主用数据库端发送来的分片记录个数相一致否则, 并且根据 备用数据库的该分片计算得到的分片验证码与主用数据库端发送来的对应分片的验证码 VN 相一致, 则判定主、 备数据库的该对应分片的记录一致。 对于记录不一致的对应分片记录集, 再做后续处理 :
向主用数据库端请求该对应分片内各记录的记录标识码和记录校验码 { < Ri, Vi > |i = 1, 2, 3, ..., N}, 并以这些数据与备用数据库中的记录逐条进行比较, 直到找到有问 题的记录。
在找到不一致的记录时, 可以从主数据库中将不一致的数据同步到备份数据库。
本发明第二实施例提供了一种主、 备数据库记录一致性校验系统, 如图 2 所示, 该 实施例中, 本发明主、 备数据库记录一致性校验系统包括字段增加模块 201、 分片模块 202 和一致性校验模块 203。
其中, 字段增加模块 201 用于在数据备份之前, 对每条记录增加标识码字段和校 验码字段, 其中标识码字段即记录的编号, 用于标识记录的唯一性, 校验码字段用于标识记 录值的特征。
该实施例中, 记录的校验码字段可以是对记录的原有各字段进行计算得到的, 具 体地, 可以是用 HASH 算法进行计算, 也可以是用签名算法或其它专门算法进行计算得到 的。 当然, 记录的校验码字段也可以采用其它合理的方式来得到, 只要其能够表征记录值的 特征即可。
分片模块 202 用于在考察时间段内, 将记录分成 M 个分片, 并且对每个分片计算校 验码, M 为自然数。
分片模块 202 包括分片子模块 2021 和分片校验码计算子模块 2022。其中, 分片 子模块 2021 用于在考察时间段内, 以 N 个记录为一个分片, 对该考察时间段内生成的所有 记录依次进行分片, 最后一个分片允许不足 N 个记录, N 为自然数 ; 分片校验码计算子模块 2022 用于对分片中各记录的校验码字段进行计算, 可以是采用 HASH 算法进行计算, 也可以 是采用签名算法或其它专门算法进行计算, 来得到该分片的校验码。
当然, 分片子模块 2021 在考察时间段内, 将记录分成 M 个分片还可以采用其它方
案, 并不局限于本实施例提供的上述方案, 例如前 M-1 个分片的记录个数也不一定要求相 等, 即不一定均为 N 个。
分片的校验码也可以采用其它合理的方式来得到, 只要其能够表征该分片的特征 即可。
一致性校验模块 203 用于逐个对主、 备数据库中对应的分片进行一致性检验 ; 如 果校验通过, 则判定该分片内的记录一致, 如果校验不通过, 则再对该分片中的记录逐个进 行一致性校验, 以找出不一致的记录。
一致性校验模块 203 包括第一校验子模块 2031 和第二校验子模块 2032 ; 其中第 一校验子模块 2031 用于判断主、 备数据库中对应的分片的校验值以及记录个数是否一致, 仅当主、 备数据库中对应的分片的校验值以及记录个数均一致时, 判定主、 备数据库中对应 分片的记录一致, 其它情况判定为主、 备数据库中对应分片的记录不一致 ; 第二校验子模块 2032 用于, 当第一校验子模块 2031 判定主、 备数据库中对应分片的记录不一致时, 对该对 应分片中的记录逐个进行一致性校验, 以找出不一致的记录。
以上所述的具体实施例, 对本发明的技术方案进行了进一步详细说明, 所应注意 的是, 以上所述仅为本发明的具体实施例而已, 本领域的技术人员可以对本发明进行各种 改动和变型而不脱离本发明的精神和范围。这样, 倘若本发明的这些修改和变型属于本发 明权利要求记载的技术方案及其等同技术的范围之内, 则本发明也意图包含这些改动和变 型在内。