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

Ton*_*ony 11 sql-server-2008 tools sql-server

我们正在将我们的数据库迁移到新模式,但想要验证数据是否已正确移动。

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

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

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

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

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

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

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

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

And*_*ton 7

比较两种不同的模式并非不可能,而是计算您对结果的信心程度。我基本上借鉴了银行对账技术

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

基础:

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

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

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

技巧:

无论我使用什么方法来生成将要比较的内容,我最终都会得到一组文件/视图/数据库,其中包含可协调的源和目标数据,然后根据介质,我可以使用一种常用工具来比较它们。我个人的喜好是:

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

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

  3. 数据比较
    与其将调节数据输出到文件或报告,不如将它们输出到单独的 DB,然后使用Redgate SQL Data Compare 之类的东西来比较 DB

其他工具:

没有尝试过任何这些,但在“数据协调工具”上的快速谷歌搜索给出:

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


gbn*_*gbn 6

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

  • 如果表被拆分或合并等怎么办?
  • 如果你有 datetime,现在你有 smalldatetime = 数据会有所不同
  • ...

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

只有你知道你改变或修改了什么


Sql*_*hes 5

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

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

听起来很痛苦。祝你好运!