闪回还原点解析

db_recovery_file_dest

DB_RECOVERY_FILE_DEST specifies the default location for the flash recovery area. 

The flash recovery area contains multiplexed copies of current control files and online redo logs, as well as archived redo logs, flashback logs, and RMAN 

backups.

Specifying this parameter without also specifying the DB_RECOVERY_FILE_DEST_SIZE initialization parameter is not allowed.




DB_RECOVERY_FILE_DEST 指定了默认的闪回恢复区, 闪回恢复区包含了当前的控制文件和联机重做日志多路复用副本


指定这个参数在没有指定DB_RECOVERY_FILE_DEST_SIZE参数是不允许的

[oracle@june ~]$ cd /oradata/
[oracle@june oradata]$ ls
june
[oracle@june oradata]$ mkdir flash_recovery_area

SQL> alter system set db_recovery_file_dest='/oradata/flash_recovery_area' scope=both;
alter system set db_recovery_file_dest='/oradata/flash_recovery_area' scope=both
*
第 1 行出现错误:
ORA-02097: 无法修改参数, 因为指定的值无效
ORA-19802: 无法使用 DB_RECOVERY_FILE_DEST, 由于缺少 DB_RECOVERY_FILE_DEST_SIZE



SQL> alter system set DB_RECOVERY_FILE_DEST_SIZE=2G scope=both;

系统已更改。

SQL> alter system set db_recovery_file_dest='/oradata/flash_recovery_area' scope=both;

系统已更改。


创建闪回还原点,不需要开启闪回。

SQL> select FLASHBACK_ON from v$database ;

FLASHBACK_ON
------------------
NO

SQL> create restore point before_drop guarantee flashback database;
create restore point before_drop guarantee flashback database
*
第 1 行出现错误:
ORA-38784: 无法创建还原点 'BEFORE_DROP'。
ORA-38785: 必须对可靠的还原点启用介质恢复。


创建闪回还原点,必须先开启归档。
alter database archivelog;



SQL> alter system set LOG_ARCHIVE_DEST_1= "LOCATION=/oradata/arch";

系统已更改。


创建闪回还原点:
SQL> alter system set db_recovery_file_dest='/oradata/flash_recovery_area' scope=both;

系统已更改。

SQL> create restore point before_drop guarantee flashback database;

还原点已创建。

此时已经产生闪回日志:
[oracle@june flashback]$ ls -ltrh
总计 47M
-rw-r----- 1 oracle dba 7.9M 05-26 02:56 o1_mf_9r4gzfcv_.flb
-rw-r----- 1 oracle dba 7.9M 05-26 02:56 o1_mf_9r4h7fy1_.flb
-rw-r----- 1 oracle dba 7.9M 05-26 02:57 o1_mf_9r4h7t98_.flb
-rw-r----- 1 oracle dba 7.9M 05-26 02:57 o1_mf_9r4h7zyt_.flb
-rw-r----- 1 oracle dba 7.9M 05-26 02:57 o1_mf_9r4h8l4q_.flb
-rw-r----- 1 oracle dba 7.9M 05-26 02:57 o1_mf_9r4h8tnt_.flb

删除闪回还原点:
SQL> drop restore point BEFORE_DROP;

还原点已删除。

[oracle@june flashback]$ ls
[oracle@june flashback]$ 

此时闪回日志被清除


开始闪回测试:

SQL> conn scott/oracle
已连接。
SQL> select count(*) from flash;

  COUNT(*)
----------
     72655

创建闪回还原点:

SQL> create restore point before_drop guarantee flashback database;

还原点已创建。
SQL> select count(*) from flash;

  COUNT(*)
----------
     72655

SQL> drop table flash purge;

表已删除。

SQL> select count(*) from flash;
select count(*) from flash
                     *
第 1 行出现错误:
ORA-00942: 表或视图不存在


闪回到还原点:
SQL> flashback database to restore point BEFORE_DROP;
flashback database to restore point BEFORE_DROP
*
第 1 行出现错误:
ORA-38757: 要闪回数据库, 数据库必须已装载但不能打开。


SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。

Total System Global Area  301305856 bytes
Fixed Size		    1336148 bytes
Variable Size		  251661484 bytes
Database Buffers	   41943040 bytes
Redo Buffers		    6365184 bytes
数据库装载完毕。
SQL> flashback database to restore point BEFORE_DROP;

闪回完成。

SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项


SQL> alter database open resetlogs;

数据库已更改。

数据已恢复:
SQL> conn scott/oracle
已连接。
SQL> select count(*) from flash;

  COUNT(*)
----------
     72655


结论:
1.闪回还原点,可以不用开启闪回

2.闪回还原点,必须开启归档

3.删除闪回还原点,闪回日志自动删除

原文地址:https://www.cnblogs.com/hzcya1995/p/13352282.html