比较SQL Server和Oracle中的表
我有一组SQL脚本,用于将数据从SQLServer2005中的表迁移到Oracle11。我想比较两个数据库中的数据,以确保它们被正确迁移 我的资料来源是:SQLServer2005。它有10个大表,约8000万行,20个表,约100000行 我的目标是:Exadata上的Oracle11,它的表结构与其源代码类似比较SQL Server和Oracle中的表,oracle,sql-server-2005,comparison,Oracle,Sql Server 2005,Comparison,我有一组SQL脚本,用于将数据从SQLServer2005中的表迁移到Oracle11。我想比较两个数据库中的数据,以确保它们被正确迁移 我的资料来源是:SQLServer2005。它有10个大表,约8000万行,20个表,约100000行 我的目标是:Exadata上的Oracle11,它的表结构与其源代码类似 知道我能做什么吗?有可用的工具吗?我会尝试在SSMO中设置一个链接到Oracle数据库的服务器。 然后,我将使用except操作符对每个表进行比较 select * from tabl
知道我能做什么吗?有可用的工具吗?我会尝试在SSMO中设置一个链接到Oracle数据库的服务器。 然后,我将使用except操作符对每个表进行比较
select * from table1
except
select * from [link_server]..myschema.TABLE1
union
select * from [link_server]..myschema.TABLE1
except
select * from table1
注意:当oracle表包含CLOB列时,我没有让它工作
对评论的答复:
在本地计算机上安装sql server,DBA就在这里。当您有权访问远程计算机时,可以向其添加链接的服务器 您似乎在问:“如何对ETL解决方案进行单元测试,以确保源数据库中的数据在目标数据库中得到忠实复制?” 当您详细了解表的数量及其大小时,我认为您需要深入比较每个表中每列中的每个值 我不知道有这样的工具。这样的检查可能会持续很长时间,但因为它是一次性的,所以是可行的。你可以用C#或Java或其他你熟悉的语言编写这样的东西 另一个想法是检查每个表的较小子集。如果ETL工具正确地完成了一小部分,那么就没有理由相信它会与其余部分一起失败,除非出现异常情况 您可以批量迁移数据,在迁移过程中检查并提交每个数据
另一个想法可能是一种统计方法:从每个行中随机抽样并执行检查 您可以设计一个函数,为每个表上的每个列:
- 将行号与值串联
- 散列(md5应该在这两个平台上都可用)
- 并计算哈希值的聚合按位异或
缺点是:如果结果不一样,你不知道差异在哪里。例如,您可以将表划分为1000行之类的块。谢谢。是的,这正是我要问的,我对数据库的无知,我不能简单地说:)。我正在考虑检查较小的子集,以减少运行此检查所需的时间。我很想听听ppl的其他想法,所以我想在这里提出这个问题。感谢您的投入,这对我绝对有帮助。我认为我们的DBA不喜欢链接服务的想法,因此需要做其他事情:(添加了“exadata”标记,因为我听说迁移到exadata时出现了以前Oracle迁移中不存在的问题。不过,没有什么特别要共享的。在比较中需要注意的一个问题是,在SQL Server中,“”的varchar或nvarchar是一个非空字符串。在Oracle“”中,它与null相同。具体取决于您的比较工具和使用的因此,hods SQL Server“”可能被标记为与Oracle的“”不同。