Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 仅使用一组样本数据创建生产的测试数据库副本_Java_Database_Oracle_Database Link - Fatal编程技术网

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

Java 仅使用一组样本数据创建生产的测试数据库副本,java,database,oracle,database-link,Java,Database,Oracle,Database Link,我们有两个Oracle数据库。一个是我们的生产客户数据库。另一个是测试数据库。测试数据库是生产的副本,没有任何数据…只有空表。我试图找到一种高效的方法,将一组样本数据从生产数据库复制到测试中 我需要从Customer表中的PK示例列表开始,并编写一个流程,用该示例填充测试数据库Customer表。然后,我需要使用基于示例的相关数据填充子表 我们曾经有一个Java进程,它将使用一个准备好的语句从生产中选择数据…根据结果集构建一个文件…然后使用一个update语句将其放入测试数据库。效率极低 我不是

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

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

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

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


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

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

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

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



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

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

“我不是DBA,所以我不太了解DBA 那个领域。我试着用谷歌搜索一些 有关数据库链接的信息,但无法访问 找到很好的例子。”

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

有许多用例,特别是在企业示例中-

这些都是针对大型企业数据的

有一个开源的tdm工具,但java中没有(我不确定它是否好)

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


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

作为生产的完整副本的测试数据库比清除bug的子集工作得更好。大多数人之所以选择复制,是因为他们没有时间和资源来制作完整的拷贝,但虚拟数据(又称拷贝数据管理)已经改变了这一切。在这样的系统中,您可以在几分钟内摄取一份生产拷贝并制作精简克隆拷贝,而几乎不需要额外存储。该系统通常还压缩数据,因此摄取副本的大小为原始副本的1/3,并且具有在几分钟内快速刷新的优势,这在破坏性测试中非常有用。它们还倾向于与掩蔽集成,因为我们可能不希望敏感数据从生产环境进入开发和测试。这方面有很多供应商。对于初学者,请查看Netapp SMO、Activfio、Oracle Snap Clone和Delphix。其中大多数都需要一些专用硬件,这可能是一个障碍。Delphix完全是软件,甚至有一个名为Delphix Express的免费版本,您可以下载。Rubrick和Coherecity也在使用类似的技术处理VM图像

祝福
凯尔·海利(Kyle Hailey)

openTDM看起来像是其他SF项目的99%。死了.+1这个。如果您有权访问合适的生产数据库,请使用它。运行一些PII类型清理(CCnums、SSN等),并将其用于测试。尽管您可能希望在每次主要单元测试之前恢复一个永久备份,因为在运行测试之前,您总是希望数据库处于特定状态。在这种情况下,这不是一个选项。我们有一个完整的测试数据库,它是生产的一个副本(在某个时间点…并且不是每天刷新)。造成我的问题的一个问题是,我们的DBA(无论出于何种原因)需要好几天的时间才能用生产数据库的副本刷新测试数据库。此外,我们在测试环境中的空间非常有限(因此需要一个示例数据库)。imho…解决方案是在测试中投入更多的资金和空间,但是,这是不可行的。@aintnophet:expdp/impdp(或旧的exp/imp)是快速导入/导出的可行选项,请参阅我的更新答案。