【问题标题】:How can we do data analysis for DB replication project我们如何对数据库复制项目进行数据分析
【发布时间】:2018-08-31 14:45:36
【问题描述】:

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

该项目是关于将数据从 Sybase 复制到 oracle DB。 跨 Sybase、Oracle 的表 A 的表结构是相同的。 所有数据库中的相同列和主键组合。 例如如果 Sybase 具有包含 a、b 和 C 列的表 A 同名同列的同一张表可以在不同的数据库中使用。

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

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

【问题讨论】:

标签: oracle replication sybase


【解决方案1】:

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?我猜不是(但这超出了我的经验范围)。

注意 rs_subcmp 的“-h”选项。文档只是说它运行“快速比较”,但它实际上在做的是使用 hashbytes() 函数运行查询。比如:

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

所以这种查询可能有利于上面讨论的“摘要视图”类型比较(如果 Oracle STANDARD_HASH() 函数输出与 Sybase hashbytes() 函数匹配(同样,超出我的经验))

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

【讨论】:

    【解决方案2】:

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

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

    正如@TenG 在他的回答中暗示的那样,比较数据和生成代码以协调差异需要付出很多努力。滚动您自己的代码是可行的,但需要大量工作。如果您有钱,您可能会发现 3rd 方工具可以为您完成大部分/所有工作。

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

    【讨论】:

    • 非常轻微的修正:至少从 15.7.1 开始,rs_subcmp 是 64 位的。
    【解决方案3】:

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

    我只能谈谈我们采取的方法,基于可用工具和最大限度地减少停机时间的限制,以及可用空间的限制。

    在所有情况下,我都会编写在两个层面上工作的脚本——摘要视图和“深入研究”。我们找不到任何现成的工具可以及时完成我们想要的工作。事实上,即使是我们发现的迁移工具也有局限性(datapump、sqlloader、golden Gate 等),并且需要手动编写脚本来处理我们发现标准工具中缺少或太慢的位。

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

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

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

    然后将来自每个数据库的对应表对相互“区分”以突出差异。然后可以更详细地查看发现的任何差异。

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

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

    在一个项目中,没有足够的磁盘空间来做这些报告,所以我编写了一个 Java 程序,它并排查询两个数据库,使用块队列来获取和比较行集。在内存中意味着这非常快。

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

    对于用户报告,用户会指定他们想看到的内容,我们相应地编写报告。

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

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

    【讨论】:

    • 但是当您获得校验和时,我想知道您是如何知道哪个确切的列复制失败的?
    • 校验和是一种生成不匹配记录列表的简单方法。使用该列表,您可以深入了解哪些列不同的详细信息
    • GauravP - 这很明显。一旦您确定了一系列行,您就可以运行深度潜水(详细)报告来查找差异。请记住,由于您指定了范围,因此您可以在行中将范围分解为零。
    猜你喜欢
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    • 2019-02-09
    • 2015-08-26
    相关资源
    最近更新 更多