我们如何为数据库复制项目进行数据分析

时间:2018-03-22 08:40:06

标签: oracle replication sybase

我们在项目中面临一个问题,即数据验证问题。

该项目涉及从Sybase到Oracle数据库的数据复制。 跨越Sybase,Oracle的表A的表结构是相同的。 所有数据库中的列和主键组合相同。 例如如果Sybase的表A包含列a,b和C 具有相同名称和相同列的相同表将以不同的数据库提供。

我们完成了复制的东西部分。但是我们遇到了一些无声的失败,比如数据差异只是想知道是否有任何工具可用于此。

关于他的任何信息都会有所帮助。感谢。

3 个答案:

答案 0 :(得分:1)

Sybase(现在的SAP)有几个产品可用于数据比较和对帐:

  • rs_subcmp - 一个较早的32位工具,附带Sybase Replication Server产品,可用于比较之间的数据 来源和目标;可以生成SQL协调脚本 差异然后应用于目标以使其同步 与来源;如果你的表大小超过1GB,你可以 仍然使用rs_subcmp,但您需要创建多个比较 作业(通过where子句)处理表的不同子集 [我不记得rs_subcmp是否可用于异构 复制设置,例如ASE-Oracle。]
  • Data Assurance (DA) - 较新的64位产品......也来自 Sybase ...也可以比较数据和(重新)同步目标 来自源(通过SQL协调脚本或直接); DA能够处理少数几个之间的比较 不同的RDBMS产品(例如ASE-Oracle);我正在做一个 项目,其中一个要求是验证(和协调 需要时)200 + TB的数据从Oracle迁移到HANA和 我正在使用DA作为项目的验证/对帐部分

正如@TenG已经暗示他的回答,比较数据和生成代码以协调差异需要花费大量精力。滚动自己的代码是可行的,但需要做很多工作。如果你有钱,你可能会发现第三方工具可以为你完成大部分/全部工作。

如果您使用第三方产品将数据从Sybase复制到Oracle,则可能需要查看同一供应商是否具有您可以使用的比较/验证/对帐工具。

答案 1 :(得分:0)

我参与了一些迁移项目,关键部分一直是数据协调。

我只能根据可用工具的限制和最小化停机时间以及可用空间的限制来讨论我们采用的方法。

在所有情况下,我都编写了两个级别的脚本 - 摘要视图和“深度潜水”。我们找不到任何可以及时完成我们想要的工具。事实上,即使我们发现的迁移工具也有局限性(数据泵,sqlloader,黄金门等)和手工编码脚本来处理我们发现在标准工具中缺乏或太慢的位。

摘要视图因项目而异。它是基于部分功能(交易匹配的会计数字)供用户验证,部分技术。对于较小的表,我们可以编写简单的报表,差异很直接。

对于较大的表格,我们编写技术报告,查看数据带(例如将PK组分为1000个)收集所有列数据并生成校验和,为每个表生成报告,如:

PK ID Range Start   Checksum
-----------------   -----------
100000              22773377829
200000              38938938282
.
.

然后,来自每个数据库的相应表对彼此“差异”以突出显示差异。然后可以更详细地查看发现的任何差异。

脚本以这样的方式编写,允许它们并行运行,查看离散的波段。 Te波段范围也是可调的,以获得最佳吞吐量。这显然加快了速度。

脚本是触发sqlplus报告的shell脚本,类似于源数据库。

在一个项目上没有足够的磁盘空间来执行这些报告,因此我编写了一个Java程序,它使用块队列来获取和比较行集,并排查询这两个数据库。留在记忆中意味着这超级快。

对于“深入研究”,我们查看了关键表的详细信息,或报告校验和差异的表。

对于用户报告,用户将指定他们想要查看的内容,并相应地编写报告。

在上一个项目中,发现的唯一差异是由字符集转换问题引起的(带有重音符号的人名未正确处理)。

在整体数据集较小的项目中,我们将数据提取到XML文件,并编写了一个Java工具来处理对并报告差异。

答案 2 :(得分:0)

SAP / Sybase rs_subcmp工具非常强大,也很难使用。详情请见:

https://help.sap.com/viewer/075940003f1549159206fcc89d020515/16.0.3.3/en-US/feb58db1bd1c1014b134ef4efef25563.html?q=rs_subcmp

您必须传递关键字段信息,但一旦这样做,它可以在瞬态差异后重试/重新启动比较流。很漂亮。

rs_subcmp希望能够处理Sybase数据源。因此,为了与Oracle进行比较,您可能必须设置其中一个Sybase-to-Oracle网关产品($$$$$)。

您是否可以安装Oracle ODBC驱动程序并对其进行配置以允许Sybase客户端访问Oracle?我猜不到(但这超出了我的经验范围)。

注意" -h" rs_subcmp的选项。文档只是说它运行了一个快速比较",但它实际上在做的是使用hashbytes()函数运行查询。类似的东西:

select keyfield1,keyfield2, hashbytes("Md5",datacol1,datacol2,datacol3)
from mytable

因此,这种查询可能对于"摘要视图"上面讨论的类型比较(如果Oracle STANDARD_HASH()函数输出与Sybase hashbytes()函数匹配(再次,在我的经验之外))

注意,从ASE 16开始,hash()和amp; hashbytes()函数针对大型varbinary列运行Md5哈希选项,它们可能会耗尽所有过程缓存,从而可能导致服务器崩溃(CR 811073)