oracle - 重置 oracle 数据库以进行测试的最快方法

标签 oracle testing oracle11g automated-tests

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

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

最佳答案

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

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

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

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 中阅读有关闪回数据库和还原点的信息.

关于oracle - 重置 oracle 数据库以进行测试的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43613655/

相关文章:

testing - 使用测试账号时用iOS SDK获取 "Cannot Post To Facebook"

python - Bazel:如何在测试前运行 py_binary 生成输入文件

regex - 为什么非贪婪量词有时在 Oracle 正则表达式中不起作用?

oracle - 转换不同世纪的日期

mysql - 如何使用连接编写 Hibernate HQL 查询?

testing - 在 Jest 中,通过分片并行化和工作线程并行化有什么区别?

java - 插入 BLOB 失败,文件为 NULL

java - JDBC 是否在将日期插入 Oracle DB 之前调整日期?我该如何防止这种情况?

database - Oracle 10g 临时表

sql - 为什么这个相关子查询在 Oracle 和 SQL Server 中的工作方式不同