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

时间:2011-04-19 16:53:49

标签: java database oracle database-link

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

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

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

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

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

4 个答案:

答案 0 :(得分:5)

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

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

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


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

答案 1 :(得分:3)

我只是想指出行业场景和产品..不是解决方案,而是作为@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中没有(我不确定它的好坏)

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

答案 2 :(得分:3)

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

祝福 Kyle Hailey

答案 3 :(得分:1)

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