-- 1. 版本及闪回区信息
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
-- 闪回区路径及最大大小
SQL> set linesize 1000
SQL> show parameter db_recover
NAME TYPE VALUE
------------------------------------ ---------------------- -----------------------------
db_recovery_file_dest string D:/oracle/flash_recovery_area
db_recovery_file_dest_size big integer 2G
------------------------------------ ---------------------- -----------------------------
db_recovery_file_dest string D:/oracle/flash_recovery_area
db_recovery_file_dest_size big integer 2G
-- 闪回区数据保持时间(分钟)
SQL> show parameter flash
NAME TYPE VALUE
------------------------------------ ---------------------- ------
db_flashback_retention_target integer 1440
SQL> select 1440/60 hours from dual;
------------------------------------ ---------------------- ------
db_flashback_retention_target integer 1440
SQL> select 1440/60 hours from dual;
HOURS
----------
24
----------
24
SQL> shut
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 289406976 bytes
Fixed Size 1248600 bytes
Variable Size 109052584 bytes
Database Buffers 176160768 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
Fixed Size 1248600 bytes
Variable Size 109052584 bytes
Database Buffers 176160768 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
-- 2. 开启数据库闪回(归档下才可开启数据库闪回)
SQL> alter database flashback on;
alter database flashback on
*
第 1 行出现错误:
ORA-38706: 无法启用 FLASHBACK DATABASE 事件记录。
ORA-38707: 尚未启用介质恢复。
alter database flashback on
*
第 1 行出现错误:
ORA-38706: 无法启用 FLASHBACK DATABASE 事件记录。
ORA-38707: 尚未启用介质恢复。
SQL> alter database flashback on;
alter database flashback on
*
第 1 行出现错误:
ORA-38706: 无法启用 FLASHBACK DATABASE 事件记录。
ORA-38707: 尚未启用介质恢复。
SQL> archive log list
数据库日志模式 非存档模式
自动存档 禁用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 287
当前日志序列 289
SQL> alter database archivelog;
数据库已更改。
SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 287
下一个存档日志序列 289
当前日志序列 289
SQL> alter database flashback on;
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 287
下一个存档日志序列 289
当前日志序列 289
SQL> alter database flashback on;
数据库已更改。
SQL> alter database open;
数据库已更改。
-- 最早恢复到的事件点
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
会话已更改。
SQL> select * from v$flashback_database_log;
OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI RETENTION_TARGET FLASHBACK_SIZE ESTIMATED_FLASHBACK_SIZE
-------------------- ------------------- ---------------- -------------- ------------------------
464604298 2008-03-11 16:51:50 1440 8192000 0
-------------------- ------------------- ---------------- -------------- ------------------------
464604298 2008-03-11 16:51:50 1440 8192000 0
-- 3. 数据库闪回测试
-- 3.1 创建并损坏数据
SQL> create table t1 as select * from dba_objects;
表已创建。
SQL> create table t2 as select * from dba_objects;
表已创建。
SQL> create table t3 as select * from dba_objects;
表已创建。
SQL> select sysdate from dual;
SYSDATE
-------------------
2008-03-11 16:58:23
-------------------
2008-03-11 16:58:23
SQL> drop table t2;
表已删除。
SQL> truncate table t3;
表被截断。
-- 3.2 闪回数据库
SQL> flashback database to timestamp(to_date('2008-03-11 16:58:23', 'yyyy-mm-dd hh24:mi:ss'));
flashback database to timestamp(to_date('2008-03-11 16:58:23', 'yyyy-mm-dd hh24:mi:ss'))
*
第 1 行出现错误:
ORA-38757: 要闪回数据库, 数据库必须已装载但不能打开。
flashback database to timestamp(to_date('2008-03-11 16:58:23', 'yyyy-mm-dd hh24:mi:ss'))
*
第 1 行出现错误:
ORA-38757: 要闪回数据库, 数据库必须已装载但不能打开。
SQL> shut
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 289406976 bytes
Fixed Size 1248600 bytes
Variable Size 113246888 bytes
Database Buffers 171966464 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
SQL> flashback database to timestamp(to_date('2008-03-11 16:58:23', 'yyyy-mm-dd hh24:mi:ss'));
Fixed Size 1248600 bytes
Variable Size 113246888 bytes
Database Buffers 171966464 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
SQL> flashback database to timestamp(to_date('2008-03-11 16:58:23', 'yyyy-mm-dd hh24:mi:ss'));
闪回完成。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
SQL> alter database open resetlogs;
数据库已更改。
-- 4. 检查闪回结果
SQL> select count(*) from t1;
COUNT(*)
----------
50191
----------
50191
SQL> select count(*) from t2;
COUNT(*)
----------
50192
----------
50192
SQL> select count(*) from t3;
COUNT(*)
----------
50193
----------
50193
SQL>
-- 5. 关闭数据库闪回
SQL> shut
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 289406976 bytes
Fixed Size 1248600 bytes
Variable Size 117441192 bytes
Database Buffers 167772160 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
SQL> alter database flashback off;
Fixed Size 1248600 bytes
Variable Size 117441192 bytes
Database Buffers 167772160 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
SQL> alter database flashback off;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL>