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



我们有2个Oracle数据库。一个是我们的产品客户数据库。另一个是测试数据库。测试数据库是生产数据库的副本,没有任何数据…只有空桌子。我正试图想出一个高效和有效的方法来复制数据的样本集从生产数据库到测试。

我需要从Customer表的样例列表开始,并编写一个进程,用该样例填充测试数据库Customer表。然后,我需要用基于示例的相关数据填充子表。

我们曾经有一个Java进程,它会使用一个准备好的语句从生产中选择数据…基于结果集构建一个文件…然后使用update语句将其放入Test db。它的效率非常低。

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

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

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

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

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


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

我只是想指出行业场景和产品…@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的(我不确定它是否好)

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

  • Informatica Test Data Management解决方案

  • Informatica Data子集

  • IBM Optim

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

最好的祝福凯尔Hailey

看起来您要找的是狱卒。它从关系数据库导出一致的、引用完整的行集。

最新更新