适用对象:
Oracle数据库—11gR2
问题:
通常,在进行基准测试期间,需要先加载全新的数据库,然后才能开始新的运行。确保全新数据库正常运行的一个方法就是:在每次测试运行之前,重新创建整个数据库,但是根据数据库的大小,此方法可能会耗费很长时间或低效。
解决方案:
本文介绍了如何使用Oracle的闪回功能,以快速将数据库恢复到运行工作负载之前就已存在的状态。更具体地说,本文介绍了如何使用“保证恢复点”。
恢复点:
恢复点只不过是一个与时间辍或数据库SCN有关的名称而已。用户可以创建正常的恢复点或保证恢复点。二者之间的区别是:保证恢复点允许您闪回至恢复点,而无论DB_FLASHBACK_RETENTION_TARGET初始化参数是什么,即就是说,它始终可用(假定您的闪存恢复区域有足够的空间)。
提醒:本文中的闪回记录未打开。
保证恢复点:
前提条件:创建一个保证恢复点需要以下满足前提条件:
- 用户必须具有SYSDBA系统权限
- 必须已经创建闪存恢复区域
- 数据库必须在ARCHIVELOG模式下
创建保证恢复点:
创建或迁移新数据库后,首先要创建保证恢复点,以便您可以在每次开始新的工作负载之前先闪回。步骤如下所示:
- $> su – oracle
- $> sqlplus / as sysdba;
- 查看 ARCHIVELOG 是否启用
SQL> select log_mode from v$database;
如果步骤 3 显示未启用 ARCHIVELOG,则继续,否则跳至下面的步骤 8。
- SQL> shutdown immediate;
- SQL> startup mount;
- SQL> alter database archivelog;
- SQL> alter database open;
- SQL> create restore point CLEAN_DB guarantee flashback database;
其中,CLEAN_DB 是为保证恢复点提供的名称。
查看保证恢复点
SQL> select * from v$restore_point;
验证有关新创建的恢复点的信息。另外,记下 SCN# 以备参考,我们将其称为“参考 SCN#”
闪回保证恢复点
现在,为了将数据库恢复到保证恢复点,请执行以下步骤:
- $> su – oracle
- $> sqlplus / as sysdba;
- SQL> select current_scn from v$database;
- SQL> shutdown immediate;
- SQL> startup mount;
- SQL> select * from v$restore_point;
- SQL> flashback database to restore point CLEAN_DB;
- SQL> alter database open resetlogs;
- SQL> select current_scn from v$database;
将以上第9步中的SCN#与参考SCN#进行比较。
提醒:以上第 9 步中的 SCN# 不一定与参考 SCN# 完全相同,但是二者非常接近。
参考资料: