【问题标题】:Fastest way to reset oracle database for testing重置 oracle 数据库以进行测试的最快方法
【发布时间】:2017-04-25 14:34:32
【问题描述】:

我正在使用 Oracle 数据库对我的应用程序进行自动化测试,我想在某些步骤之间重置/重新创建数据库。

重置 Oracle 数据库的最佳/最快方法是什么?

【问题讨论】:

  • 不同意投票为 DBA,SE 的人。自动化测试夹具绝对是开发人员关心的问题。
  • 测试的范围是什么?我们在谈论多少数据?您希望多久初始化一次(“在某些步骤之间”的时间尺度是多少)?
  • 数据量大。我目前正在测试一个 ERP 系统,并且已经有大约 150 个表。我已经尝试了一些替代方案:内存中(失败)、数据泵(expdp 和 impdp)、删除用户(级联)并重新应用所有脚本以再次创建/生成数据。
  • @NielsenMartinsGonçalves 根据我的经验,删除用户并重新应用脚本是最好的解决方案。它使您可以正确使用版本控制并真正了解您的架构和数据。是否存在阻止您使用该方法的特定问题?
  • @JonHeller 运行脚本的时间太长,有几个套件,在执行套件之间这样做会使运行所有测试所需的时间变得不可行

标签: oracle testing oracle11g automated-tests


【解决方案1】:

既然您说要重置整个数据库,那么闪回数据库可能是适合您的工具。闪回数据库使用存档日志(因此您必须首先处于存档日志模式)和闪回日志,以便撤消数据库上的所有内容以将数据库恢复到特定时间点或指定的恢复点。

闪回日志设置是您配置保留时间(以分钟为单位)以及日志位置的最大大小。

配置快速恢复区来存储闪回日志:

alter system set db_recovery_file_dest='L:\Oracle\FRA' scope=both;
alter system set db_recovery_file_dest_size=100G scope=both;
alter system set db_flashback_retention_target = 1440 scope=both; --1 day

开启闪回数据库:

alter database flashback on;

创建一个还原点,它只不过是一个指向该还原点时的SCN的指针:

create restore point before_changes;

您可以根据需要创建任意数量的还原点,并且它们不会占用任何额外空间,因为它们只是指针。也就是说,如果达到 db_flashback_retention_target 或 db_recovery_file_dest_size 参数(以先到者为准),还原点将滚降。

您可以通过创建闪回保证还原点来防止这些还原点的滚动。但是,必须注意保证闪回数据库还原点,因为如果达到任一参数,您的数据库将无法访问(在这种情况下,您必须删除保证闪回数据库还原点,或增加这些参数的值。

运行测试后,您可以通过以下方式闪回:

shutdown immediate;
startup mount;
flashback database to restore point before_changes;
alter database open resetlogs;

您可以从 Oracle 11.2 docs 阅读有关闪回数据库和还原点的信息。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-03-24
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多