【问题标题】:SQL code tests to verify migration was successful [closed]用于验证迁移是否成功的 SQL 代码测试 [关闭]
【发布时间】:2013-11-18 21:02:26
【问题描述】:

我有一个关于迁移后测试数据的问题。

我已经使用基本的测试查询来验证数据是否已成功迁移,但现在我想不起来了。任何额外的建议将不胜感激。

以下是我目前使用过的:

-记录计数

SELECT COUNT(*) FROM table_name;

-总和列

SELECT SUM(column_name) FROM table_name;

-检查空值

SELECT column_name FROM table_name
      WHERE column_name IS NULL

我正在检查源系统和目标系统中的输出结果是否相同。澄清一下,旧的源系统是不同数据库的混合体。 SQL 服务器 2005、2008 和 Sybase。目标方是 Teradata。所有数据都已移至 Teradata。

【问题讨论】:

  • 当您说“已迁移”时,您的意思是您的迁移文件中有测试或样本数据吗?如果是这样,通常不是一个好主意。查看this post 和已发布的 RailsCast 剧集以获取相关信息。除此之外,我认为这个问题可能过于本地化,因为我们不知道你有什么样的数据,或者你想要寻找什么样的东西。

标签: sql teradata


【解决方案1】:

您是否尝试过比较这两个表以确保它们相同?我假设当您说“源系统”和“目标系统”时,您有两个表。比如:

SELECT * FROM t1 WHERE NOT EXISTS (SELECT * FROM t2 WHERE t2.column_name = t1.column_name)

或者查找源表中存在但目标表中不存在的记录,以及目标表中存在但源表中不存在的记录:

SELECT * FROM (SELECT Id, column_name FROM t1, 'old'
UNION ALL
SELECT Id, column_name FROM t2, 'new') t
ORDER BY Id

代码会根据您使用的 RDBMS 有所不同,但思路应该相同。

【讨论】:

  • 澄清一下,旧的源系统是不同数据库的混合体。 SQL 服务器 2005、2008 和 Sybase。目标方是 Teradata。所有数据均已移至 Teradata。
【解决方案2】:

您可以做很多不同的事情,具体取决于您希望数据“完全”匹配的程度。它还取决于某些系统如何处理 NULL - 例如,在 oracle 中,空字符串是空字符串,而在 SQL Server 中,'' 和 NULL 是不等价的。

如果您的 DBMS 在源和目标上都相同,您可以使用(在 SQL Server 中)SUM(CHECKSUM(concatenation_of_my_fields)) 等技巧来了解您是否真的拥有相同的数据。

不过,您必须做出很多假设。您确实必须自己确定适合您的迁移场景的最佳测试用例。您已经列出了大多数通常已经完成的常规操作。

但是,迁移并不总是“将表 a 复制到表 b”。对于更高级的案例,您需要与您的业务团队合作并确定所有真实的测试案例。

【讨论】:

  • 澄清一下,旧的源系统是不同数据库的混合体。 SQL 服务器 2005、2008 和 Sybase。目标方是 Teradata。所有数据都已移至 Teradata。
猜你喜欢
  • 1970-01-01
  • 2019-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多