Java 仅使用一组样本数据创建生产的测试数据库副本
我们有两个Oracle数据库。一个是我们的生产客户数据库。另一个是测试数据库。测试数据库是生产的副本,没有任何数据…只有空表。我试图找到一种高效的方法,将一组样本数据从生产数据库复制到测试中 我需要从Customer表中的PK示例列表开始,并编写一个流程,用该示例填充测试数据库Customer表。然后,我需要使用基于示例的相关数据填充子表 我们曾经有一个Java进程,它将使用一个准备好的语句从生产中选择数据…根据结果集构建一个文件…然后使用一个update语句将其放入测试数据库。效率极低 我不是DBA,所以我对这个领域不太了解。我试着用谷歌搜索一些关于数据库链接的信息,但找不到很好的例子Java 仅使用一组样本数据创建生产的测试数据库副本,java,database,oracle,database-link,Java,Database,Oracle,Database Link,我们有两个Oracle数据库。一个是我们的生产客户数据库。另一个是测试数据库。测试数据库是生产的副本,没有任何数据…只有空表。我试图找到一种高效的方法,将一组样本数据从生产数据库复制到测试中 我需要从Customer表中的PK示例列表开始,并编写一个流程,用该示例填充测试数据库Customer表。然后,我需要使用基于示例的相关数据填充子表 我们曾经有一个Java进程,它将使用一个准备好的语句从生产中选择数据…根据结果集构建一个文件…然后使用一个update语句将其放入测试数据库。效率极低 我不是
是否有人知道这样做的方法……或者,至少给我一个起点?如果您有足够的空间,我建议复制整个生产数据以进行测试。它将更易于管理,也可能是测试备份(从备份恢复到新实例)的好机会 从开发人员的角度来看,如果没有一组具有代表性的数据,您将无法可靠地测试应用程序的性能。此数据集应具有与生产数据相同的属性(数据量、物理分布…)。实现这一点的最简单方法是在测试中使用与生产中相同的数据 如果您能够承受停机时间,您可以停止生产数据库,将文件复制到测试服务器并装载这两个数据库。如果您负担不起停机时间,那么最好学习一些DBA技能(最终学习热备份,然后恢复到新实例)
更新:如果物理复制数据库不可行,则应使用
expdp
和impdp
(或旧的exp
/imp
)批量复制数据。您可以复制所有架构,也可以复制所有架构。在这种情况下,您可以手动选择适当的WHERE子句。批量导出和导入将比逐行复制数据快几个数量级。我只想指出行业场景和产品。。不是解决方案,而是@aintnoprophet提到的参考输入
“我不是DBA,所以我不太了解DBA
那个领域。我试着用谷歌搜索一些
有关数据库链接的信息,但无法访问
找到很好的例子。”
此用例与测试数据管理系统相关。这一概念涉及到这样一个事实,即我们需要有一种方法来管理测试数据,这种方法进入特定测试场景的特定测试用例中。从大量数据中手动创建数据子集将非常困难,您显著增加了人为错误的可能性。因此,多次测试迭代的重复数据子设置很快变得难以管理
有许多用例,特别是在企业示例中-
这些都是针对大型企业数据的
有一个开源的tdm工具,但java中没有(我不确定它是否好)
如果你正在寻找产品(jut供参考),其中有
凯尔·海利(Kyle Hailey)openTDM看起来像是其他SF项目的99%。死了.+1这个。如果您有权访问合适的生产数据库,请使用它。运行一些PII类型清理(CCnums、SSN等),并将其用于测试。尽管您可能希望在每次主要单元测试之前恢复一个永久备份,因为在运行测试之前,您总是希望数据库处于特定状态。在这种情况下,这不是一个选项。我们有一个完整的测试数据库,它是生产的一个副本(在某个时间点…并且不是每天刷新)。造成我的问题的一个问题是,我们的DBA(无论出于何种原因)需要好几天的时间才能用生产数据库的副本刷新测试数据库。此外,我们在测试环境中的空间非常有限(因此需要一个示例数据库)。imho…解决方案是在测试中投入更多的资金和空间,但是,这是不可行的。@aintnophet:expdp/impdp(或旧的exp/imp)是快速导入/导出的可行选项,请参阅我的更新答案。