是否有工具可以在两个不同的模式之间执行数据比较?


11

我们正在将数据库迁移到新架构,但要验证数据是否已正确移动。

如果架构相同,则传统的数据比较工具可以比较两个数据库之间的差异。在我们的案例中,表设计有所更改,但是旧模式中的所有数据都在新模式中,只是稍微移动了一下,我需要确保它是正确的。我们有数千万行,因此不能选择手动检查。

是否有任何工具可以帮助进行这种比较?

如果没有,那么是否有任何库/框架可以帮助启动定制解决方案的开发?

如果有必要,我很高兴使用特定于数据库的解决方案,在这种情况下,对于SQL Server 2008。

我的解决方案:我通过VIEW在旧数据库上创建每个表的字段与新数据库表相同的字段来比较这两个数据集。

然后,我使用这里描述的技术比较数据:在SQL Server中比较两个表的最短,最快和最简单的方法:UNION!

在这次迁移中,我很幸运,因为整个表的结构类似于旧数据库,其中字段从一个表移动到另一个表,或者被删除或添加。在删除和添加的情况下,没有什么可比较的,对于已移动或聚合的字段,我会在视图中进行计算以提供正确的信息以进行比较。

UNION比较显示我只能用不同的行,所以只要数据是正确的,我得到一个空的结果集。


1
如果架构已更改,您如何知道数据正确?如果表已被拆分或合并怎么办?
gbn


@AaronBertrand-感谢您的评论,但是在那时(3年前),我调查了用于此目的的工具的可用性,但没有发现可以在不同模式之间进行比较的工具。我希望您的链接是我仍然可以购买的可以购买的工具。
托尼

@Tony您当然可以使用Red-Gate的工具(不确定其他任何工具)来做到这一点,只需要做一些手动映射即可。
亚伦·伯特兰

@Tony不同的模式,相同的数据库?还是不同的模式,不同的数据库?
亚伦·伯特兰

Answers:


7

比较两个不同的模式并非不可能,这是对结果的信心的一种计算。我基本上是从银行对帐技术中借来的

重要提示:这种协调并不是要确保目标在数据上下文中与源完全匹配(这是您要迁移到新系统的原因),但是您确实需要解释任何差异!

基础:

  1. 确定您将用来衡量的指标(即:用户总数,所有年龄的总和,用户ID列表及其邮政编码...)我尝试使用以下指标:总计,平均值和样本/详细记录
  2. 将此数据转储到公共位置(通过视图/报告/合理的方式)
  3. 比较您的数据并确保可以解释任何差异

我通常将比较分为几种方法(特别是对于详细指标):

  • 按表:通常使用源表作为定义,在目标数据库上创建一组视图以尝试重现源表数据
  • 按对象:根据数据库和存储的内容,在多个表之间创建对象(即用户)的整体视图可能更有意义,类似于上面创建一组视图以将该对象作为对象返回的方式。结果集
  • 按报告:如果源数据库具有一组完善的管理报告,则另一种技术是使用完全相同的格式重现这些报告。

技术:

无论使用哪种方法进行比较,最终都会得到一组包含可协调的源数据和目标数据的文件/视图/数据库,然后根据介质的不同,我可以使用一种常用工具比较它们。我个人的偏好是:

  1. 文件比较
    为SourceDB和DestinationDB创建两个不同的文件夹(加盖了时间/版本,因此我知道何时进行对帐),并将指标的输出转储为相关命名的文件,然后使用比较工具(例如CSDiff)来识别差异

  2. Excel比较
    特别是在处理管理报告时,我将创建一组Excel工作簿以比较报告(实质上是使用VLookup和比较总计)

  3. 数据比较
    而不是将对帐数据输出到文件或报表,而是将其输出到单独的数据库,然后使用Redgate SQL Data Compare之类的东西来比较数据库

其他工具:

没有尝试过这些方法,但是通过Google在“数据对帐工具”上进行的快速搜索可以得出:

还有其他,但是那些看起来很合理


感谢您的建议。正如您所说,这并非不可能(目前我正在研究解决方案)只是困难。我将研究您提到的方法。
托尼

@Tony不用担心,我发现的技巧是尝试将其分解为较小的步骤,然后为每个步骤找到现有工具(您将需要编写一些自定义内容,这是在可能的情况下尽量减少这种工作)
Andrew Bickerton

6

如果要比较两种不同数据库设计中的数据,则必须编写手工编码的SQL来比较数据。

  • 如果表已被拆分或合并怎么办?
  • 如果您有日期时间,现在您有小日期时间=数据将不同
  • ...

在两个不同的数据库中,没有用于检查数据是否相同的框架库。

只有您知道自己更改或修改的内容


我很担心,但我想如果有人做这样的比较我会问。我希望可能有一种工具可以加快查询的编写速度,但是正如您所说,我可能不得不从头开始编写一些东西。
托尼

1
@Tony:是的,这是因为任何工具都无法将“出了什么问题”与“我们所做的改变”区分开来
gbn11

5

比较不同的模式将是不可能的。为了解决您的问题,我将弄清楚您需要比较哪些数据。然后,我将在每个服务器上创建一个视图,该视图将拉回我想比较的数据(考虑到数据类型等)。

一旦两个视图相同,我将使用第三方工具(如Red Gate Data Compare)来查看哪些行不同。

听起来很痛苦。祝好运!


1
您说这是不可能的,然后提供可能的解决方案:)实际上,我正在使用的方法与您的建议类似,只是我没有使用外部工具比较结果,而是在SQL中完成了所有工作。谢谢。
托尼

2

几年前,我写了一个工具来做到这一点-两个数据库之间的数据比较。从那时起,我将其转换为商业软件并在

www.sql-server-tool.com

  • 单个许可证的价格为99美元,但您可以免费试用30天。

该程序名为“ SQL Server比较工具”的SCT(我从未擅长命名:),具有许多微调选项,例如:忽略选定的列或指定比较方法(逐条记录或主键/索引比较)。比较“会话”可以保存并稍后重播,而无需重新输入参数。命令行参数可用于完全自动化比较。

对于数以千万计的行,可能会有点慢-在这种情况下,我建议从较小的数据子集开始-假设仅比较前1,000行-看看是否需要对该过程进行任何微调。

达里乌斯·齐耶瓦尔托夫斯基·金托特


感谢您推荐您的应用程序,我尝试了一下,但是它没有比较不同的架构,这是我需要做的。从第一个表获取数据时失败。我也不确定应用程序是否会处理我拥有的数据量,因为似乎没有办法限制比较的行数;我对其进行测试的表有99百万行。
托尼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.