【问题标题】:Create a Test Database copy of Production with only a sample set of Data仅使用一组样本数据创建生产的测试数据库副本
【发布时间】:2011-08-08 20:36:41
【问题描述】:

我们有 2 个 Oracle 数据库。一个是我们的生产客户数据库。另一个是测试数据库。测试数据库是没有任何数据的生产副本……只是空表。我正在尝试想出一种高效且有效的方法将一组样本数据从生产数据库复制到测试。

我需要从客户表中的 PK 示例列表开始,然后编写一个流程来使用该示例填充测试数据库客户表。然后,我需要根据样本用相关数据填充子表。

我们曾经有一个 Java 进程,它会使用准备好的语句从生产环境中选择数据...根据结果集构建文件...然后使用更新语句将其放入测试数据库。这是非常低效的。

我不是 DBA,所以我不太了解那个领域。我试图用谷歌搜索一些关于数据库链接的信息,但找不到很好的例子。

有谁知道这样做的方法...或者,至少给我一个起点?

【问题讨论】:

    标签: java database oracle database-link


    【解决方案1】:

    如果您有足够的空间,我建议您复制整个生产数据进行测试。管理起来会容易得多,它也可能是测试备份(从备份恢复到新实例)的好机会。

    从开发人员的角度来看,如果没有一组具有代表性的数据,您将无法可靠地测试应用程序的性能。该数据集应具有与生产数据相同的属性(数据量、物理分布...)。实现这一目标的最简单方法是在测试中使用与生产中相同的数据。

    如果您能承受停机时间,您可以停止生产数据库,将文件复制到测试服务器并挂载两个数据库。如果您无法承受停机时间,那么学习一些 DBA 技能可能是个好主意(并最终了解热备份,然后恢复到新实例)。


    更新:如果物理复制您的数据库不可行,您应该考虑使用expdpimpdp(或旧的exp/imp)批量复制数据。您可以复制所有模式或filter the data on export。在这种情况下,您将手动选择适当的 WHERE 子句。批量导出和导入将比逐行复制数据快几个数量级。

    【讨论】:

    • +1 这个。如果您可以访问合适的生产数据库,请使用它。运行一些 PII 类型清理(CCnums、SSN 等),并将其用于您的测试。尽管您可能希望在每次主要单元测试之前恢复一个永久备份,因为您总是希望数据库在运行测试之前处于特定状态。
    • 这不是这种情况下的选项。我们确实有一个完整的测试数据库,它是生产的副本(在某个时间点......并且每天都不会刷新)。造成我的问题的一个问题是,我们的 DBA(无论出于何种原因)需要数天时间才能用生产副本刷新我们的测试数据库。此外,我们在测试环境中的空间受到严重限制(因此需要一个示例数据库)。恕我直言...解决方案是在测试中投入更多资金和空间,但是,这是不可行的。
    • @aintnoprophet:expdp/impdp(或旧的 exp/imp)是快速导入/导出的可行选项,请参阅我的更新答案。
    【解决方案2】:

    我只想指出行业场景和产品 .. 不是解决方案,而是作为@aintnoprophet 提到的参考输入

    “我不是 DBA,所以我不太了解 那个境界。我试着谷歌一些 有关数据库链接的信息,但不能 找到很好的例子。”

    此用例与测试数据管理系统有关。这个概念涉及我们需要有一种方法来管理测试数据的事实,该方法进入某些特定测试场景的特定测试用例。从大量数据中手动创建数据子集将非常困难,您显着增加人为错误的机会。因此,多次测试迭代的重复数据子设置很快变得难以管理。

    有很多用例,尤其是在企业示例中 -

    http://www.compuware.com/resources/mainframe/Fileaid_clientserver.pdf

    http://www.erphome.net/wdb/upload/forum1_f_8007_1227768589.pdf

    这些适用于庞大的企业数据。

    有一个开源的 tdm 工具 http://sourceforge.net/projects/opentdm/ 但在 java 中没有(我不确定它是否好用)

    如果您正在寻找产品(仅供参考),其中一些是

    【讨论】:

    • openTDM 看起来像 99% 的其他 SF 项目。死了。
    【解决方案3】:

    作为生产的完整副本的测试数据库在清除错误方面比使用子集的效果要好得多。大多数人都是子集,因为他们没有时间和资源来制作完整的副本,但所有这些都随着虚拟数据(即副本数据管理)而发生了变化。在这样的系统中,您可以在几分钟内获取一份生产副本并制作精简克隆副本,几乎不需要额外的存储空间。该系统通常还会压缩数据,因此摄取副本的大小是原始数据的 1/3,并且具有在几分钟内快速刷新的优势,这在破坏性测试中非常有用。它们还倾向于与屏蔽集成,因为我们可能不希望敏感数据从生产环境进入开发和测试。该地区有许多供应商。初学者请查看 Netapp SMO、Actifio、Oracle Snap Clone 和 Delphix。其中大多数需要一些专门的硬件,这可能是一个障碍。 Delphix 是完全软件,甚至还有一个免费版本,称为 Delphix Express,您可以下载。 Rubrick 和 Cohesity 正在将类似的技术用于 VM 映像。

    最好的祝愿 凯尔海莉

    【讨论】:

      【解决方案4】:

      这看起来像您要查找的是Jailer。它从关系数据库中导出一致的、引用完整的行集。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-30
        • 2010-10-26
        相关资源
        最近更新 更多