之所以这个题目这么写,是因为可靠的还原点,隐式地打开数据库的闪回特性,启动闪回日志,但是只是针对这个还原点,即使不做alter database flashback on;也可以做flashback database操作,但又不能做flashback database to scn的指定闪回数据库操作,特色而已.
创建可靠的还原点,在关闭数据库的情况下:
SQL> conn / as sysdba
已连接。
SQL> create restore point before_drop guarantee flashback database;
create restore point before_drop guarantee flashback database
*
第 1 行出现错误:
ORA-38784: 无法创建还原点 'BEFORE_DROP'。
ORA-38785: 必须对可靠的还原点启用介质恢复。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1298184 bytes
Variable Size 171966712 bytes
Database Buffers 436207616 bytes
Redo Buffers 2895872 bytes
数据库装载完毕。
SQL> archive log list
数据库日志模式 非存档模式
自动存档 禁用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 4
当前日志序列 6
SQL> show parameter log_archive
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_config string
log_archive_dest string
log_archive_dest_1 string
log_archive_dest_10 string
log_archive_dest_2 string
log_archive_dest_3 string
log_archive_dest_4 string
log_archive_dest_5 string
log_archive_dest_6 string
log_archive_dest_7 string
log_archive_dest_8 string
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_9 string
log_archive_dest_state_1 string enable
log_archive_dest_state_10 string enable
log_archive_dest_state_2 string enable
log_archive_dest_state_3 string enable
log_archive_dest_state_4 string enable
log_archive_dest_state_5 string enable
log_archive_dest_state_6 string enable
log_archive_dest_state_7 string enable
log_archive_dest_state_8 string enable
log_archive_dest_state_9 string enable
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_duplex_dest string
log_archive_format string ARC%S_%R.%T
log_archive_local_first boolean TRUE
log_archive_max_processes integer 2
log_archive_min_succeed_dest integer 1
log_archive_start boolean FALSE
log_archive_trace integer 0
SQL> alter database archivelog;
数据库已更改。
SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 4
下一个存档日志序列 6
当前日志序列 6
SQL> alter database open;
数据库已更改。
SQL> create restore point before_drop guarantee flashback database;
create restore point before_drop guarantee flashback database
*
第 1 行出现错误:
ORA-38784: 无法创建还原点 'BEFORE_DROP'。
ORA-38787: 在闪回数据库处于关闭状态时, 创建第一个可靠还原点需要装载模式。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1298184 bytes
Variable Size 171966712 bytes
Database Buffers 436207616 bytes
Redo Buffers 2895872 bytes
数据库装载完毕。
SQL>
SQL> create restore point before_drop guarantee flashback database;
还原点已创建。
SQL>
SQL> conn / as sysdba
已连接。
SQL> select flashback_on from v$database;
FLASHBACK_ON
----------------------------------------------------------------------
RESTORE POINT ONLY
SQL> alter database open;
数据库已更改。
我们可以发现创建可靠的还原点以后,数据库默认打开flashback database log,但是只保存针对这个还原点的日志,我们测试一下,
是否可以还原到中间时刻
SQL> conn scott/tiger
已连接。
SQL> select count(*) from emp2;
COUNT(*)
----------
14
SQL> insert into emp2 select * from emp2;
已创建14行。
SQL> /
已创建28行。
SQL> /
已创建56行。
SQL> /
已创建112行。
SQL> /
已创建224行。
SQL> /
已创建448行。
SQL> /
已创建896行。
SQL> /
已创建1792行。
SQL> /
已创建3584行。
SQL> commit;
提交完成。
SQL> select distinct ora_rowscn from emp2;
ORA_ROWSCN
----------
659777
658468
SQL> conn / as sysdba
已连接。
SQL> select * from v$restore_point;
SCN DATABASE_INCARNATION# GUA STORAGE_SIZE TIME NAME
---------- --------------------- --- ------------ ---------------------------------------- -----------------------------
658906 2 YES 8192000 27-4月 -08 08.18.49.000000000 下午 BEFORE_DROP
SQL> conn scott/tiger
已连接。
SQL> delete from emp2 where rownum<1000;
已删除999行。
SQL> commit;
提交完成。
SQL> select distinct ora_rowscn from emp2;
ORA_ROWSCN
----------
659777
660070
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1298184 bytes
Variable Size 171966712 bytes
Database Buffers 436207616 bytes
Redo Buffers 2895872 bytes
数据库装载完毕。
SQL>
SQL> flashback database to scn 658468;
flashback database to scn 658468
*
第 1 行出现错误:
ORA-38726: 未启用闪回数据库事件记录。
SQL> select * from v$flashback_database_log;
OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI RETENTION_TARGET FLASHBACK_SIZE ESTIMATED_FLASHBACK_SIZE
-------------------- ------------------- ---------------- -------------- ------------------------
658906 2008-04-27 20:18:49 1440 8192000 0
SQL> flashback database to scn 658906;
flashback database to scn 658906
*
第 1 行出现错误:
ORA-38726: 未启用闪回数据库事件记录。
SQL> flashback database to restore point BEFORE_DROP;
闪回完成。
仅仅能执行这个闪回数据库操作,不能针对SCN,闪回数据库在未做alter database flashback on的情况下,只能
闪回到还原点.
SQL> alter database open read only;
数据库已更改。
SQL> select distinct ora_rowscn from scott.emp2;
ORA_ROWSCN
----------
658468
SQL> select count(*) from scott.emp2;
COUNT(*)
----------
14
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/175005/viewspace-255694/ ,如需转载,请注明出处,否则将追究法律责任。