我们正在将数据库迁移到新模式,但想要验证数据是否已正确移动。
如果模式相同,传统的数据比较工具可以比较两个数据库的差异。在我们的例子中,表设计发生了变化,但旧模式中的所有数据都在新模式中,只是稍微移动了一下,我需要确保它是正确的。我们有数千万行,因此人工检查不是一种选择。
是否有任何工具可以帮助进行此类比较?
如果没有,是否有任何库/框架可以帮助启动自定义解决方案的开发?
如有必要,我很乐意使用特定于数据库的解决方案,在这种情况下用于 SQL Server 2008。
我的解决方案:我通过VIEW
在旧数据库上创建一个与新数据库表具有相同字段的每个表来比较两个数据集。
然后,我使用此处描述的技术比较数据:在 SQL Server 中比较两个表的最短、最快和最简单的方法:UNION !
我在这次迁移中很幸运,因为整个表结构类似于旧数据库,字段从一个表移动到另一个表,删除或添加。在删除和添加的情况下,没有什么可比较的,对于已移动或聚合的字段,我在视图中进行计算以提供正确的比较信息。
比较UNION
只显示有差异的行,所以只要数据正确,我就会得到一个空的结果集。
比较两种不同的模式并非不可能,这是计算您对结果的信心程度。我基本上是从银行对账技术中借来的
重要提示:这种协调不是要确保目标与数据上下文中的源完全匹配(这是您迁移到新系统的原因),但您确实需要解释任何差异!
基础:
我通常将比较分为几种方法(特别是对于详细指标):
技巧:
无论我使用什么方法来生成要比较的内容,我最终都会得到一组包含可协调源和目标数据的文件/视图/数据库,然后根据媒介,我可以使用常用工具之一比较它们。我自己的偏好是:
文件比较
为 SourceDB 和 DestinationDB 创建两个不同的文件夹(标记时间/版本,以便我知道我何时进行了对账)并将我的指标输出转储为相关命名的文件,然后使用比较工具(例如CSDiff)来识别差异
Excel 比较
特别是在处理管理报告时,我将创建一组 Excel 工作簿来比较报告(本质上是利用 VLookups 和比较总数)
数据比较
不是将调节数据输出到文件或报告中,而是将它们输出到单独的数据库,然后使用Redgate SQL 数据比较之类的东西来比较数据库
其他工具:
没有尝试过任何这些,但在“数据协调工具”上的快速谷歌搜索给出:
还有其他的,但那些看起来很合理
如果要比较两种不同数据库设计中的数据,则必须编写手工编码的 SQL 来比较数据。
没有用于检查两个不同数据库中的数据是否相同的框架库。
只有你知道你改变或修改了什么
您将不可能比较不同的模式。为了解决您的问题,我会弄清楚您需要比较哪些数据。然后,我将在每台服务器上创建一个视图,该视图将拉回我想要比较的数据(考虑数据类型等)。
一旦两个视图相同,我就会使用Red Gate Data Compare 之类的第三方工具来查看哪些行不同。
听起来很痛苦。祝你好运!
几年前,我写了一个工具来做这件事——两个数据库之间的数据比较。从那时起,我将其转换为商业软件并发布在
www.sql-server-tool.com
该程序 - 名为 SCT 的“SQL Server 比较工具”(我从来不擅长命名事物:) - 有很多微调选项,例如:忽略选定的列或指定比较方法(逐个记录或主键/指数比较)。比较“会话”可以保存并在以后重新播放,而无需重新输入参数。命令行参数可用于完全自动化比较。
对于数千万行,它可能有点慢 - 在这种情况下,我建议从较小的数据子集开始 - 假设只比较前 1,000 行 - 看看是否需要对过程进行任何微调。
Dariusz Dziewialtowski-Gintowt