4

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

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

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

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

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

4

4 回答 4

5

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

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

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


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

于 2011-04-19T17:21:15.927 回答
3

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

“我不是 DBA,所以我不太了解那个领域。我尝试在 Google 上搜索有关数据库链接的一些信息,但找不到很好的示例。”

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

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

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 中没有(我不确定它是否好用)

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

于 2011-04-19T17:40:38.733 回答
3

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

最好的祝福凯尔海莉

于 2016-05-23T13:55:19.553 回答
1

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

于 2011-05-16T13:40:31.083 回答