Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较SQL Server和Oracle中的表_Oracle_Sql Server 2005_Comparison - Fatal编程技术网

比较SQL Server和Oracle中的表

比较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

我有一组SQL脚本,用于将数据从SQLServer2005中的表迁移到Oracle11。我想比较两个数据库中的数据,以确保它们被正确迁移

我的资料来源是:SQLServer2005。它有10个大表,约8000万行,20个表,约100000行

我的目标是:Exadata上的Oracle11,它的表结构与其源代码类似


知道我能做什么吗?有可用的工具吗?

我会尝试在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的“”不同。