仅使用一组样本数据创建“生产”的“测试数据库”副本

我们有2个Oracle数据库。 一个是我们的生产客户数据库。 另一个是测试数据库。 测试数据库是没有任何数据的生产副本……只是空表。 我试图找到一种有效的方法将一组样本数据从Production db复制到Test。

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

我们曾经有一个Java进程,它将使用预准备语句从Production中选择数据…根据结果集构建文件…然后使用update语句将其放入Test db。 这非常低效。

我不是DBA所以我对这个领域知之甚少。 我试图谷歌一些关于数据库链接的信息,但找不到很好的例子。

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

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

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

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


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

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

“我不是一名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中(我不确定它的好坏)

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

  • Informatica测试数据管理解决方案

  • Informatica数据子集

  • IBM Optim

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

最好的祝福Kyle Hailey

这看起来像你所寻找的是Jailer 。 它从关系数据库中导出一致的,引用完整的行集。