下面演示第二种方式:
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 267227136 bytes
Fixed Size 2227504 bytes
Variable Size 192938704 bytes
Database Buffers 67108864 bytes
Redo Buffers 4952064 bytes
Database mounted.
SQL> flashback database to scn 1121575;
Flashback complete.
SQL> alter database open read only;
Database altered.
SQL> select * from test;
no rows selected
SQL> startup mount force
ORACLE instance started.
Total System Global Area 267227136 bytes
Fixed Size 2227504 bytes
Variable Size 192938704 bytes
Database Buffers 67108864 bytes
Redo Buffers 4952064 bytes
Database mounted.
SQL>
SQL>
SQL>
SQL>
SQL>
SQL> shutdown immediate
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 267227136 bytes
Fixed Size 2227504 bytes
Variable Size 192938704 bytes
Database Buffers 67108864 bytes
Redo Buffers 4952064 bytes
Database mounted.
SQL> flashback database to scn 1121600;
Flashback complete.
SQL> select * from test;
select * from test
*
ERROR at line 1:
ORA-01219: database not open: queries allowed on fixed tables/views only
SQL> alter database open read only;
Database altered.
SQL> select * from test;
ID SCN
---------- --------------------
0 1121575
SQL> startup mount force
ORACLE instance started.
Total System Global Area 267227136 bytes
Fixed Size 2227504 bytes
Variable Size 192938704 bytes
Database Buffers 67108864 bytes
Redo Buffers 4952064 bytes
Database mounted.
SQL> alter database open resetlog;
alter database open resetlog
*
ERROR at line 1:
ORA-02288: invalid OPEN mode
SQL> alter database open resetlogs;
Database altered.
SQL> select * from test;
ID SCN
---------- --------------------
0 1121575
V$database
通过这个视图可以查看是否启用了Flashback database功能
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
YES
2. V$flashback_database_log
Flashback Database 所能回退到的最早时间,取决与保留的Flashback Database Log 的多少, 该视图就可以查看许多有用的信息。
Oldest_flashback_scn / Oldest_flashback_time : 这两列用来记录可以恢复到最早的时点
Flashback_size: 记录了当前使用的Flash Recovery Area 空间的大小
Retention_target: 可以恢复的时间长度
Estimated_flashback_size: 根据恢复时间长度对需要的空间大小的估计值
3. V$flashback_database_stat
这个视图用来对Flashback log 空间情况进行更细粒度的记录和估计。 这个视图以小时为单位记录单位时间内数据库的活动量,Flashback_Data 代表Flashback log产生数量,DB_Date 代表数据改变数量,Redo_Date代表日志数量,通过这3个数量可以反映出数据的活动特点,更准确的预计Flash Recovery Area的空间需求
SQL> desc v$flashback_database_stat Name Null? Type ----------------------------------------- -------- ---------------------------- BEGIN_TIME DATE END_TIME DATE FLASHBACK_DATA NUMBER DB_DATA NUMBER REDO_DATA NUMBER ESTIMATED_FLASHBACK_SIZE NUMBER
闪回数据库的工作原理
为了实现闪回数据库,Oracle需要记录数据块的前景象before image到一种日志中,这种日志被命名为flashback database logs闪回日志。当一个数据块首次被修改时,前台进程会将该数据块的before image拷贝到位于shared pool中的flashback log buffer中,RVWR进程定期地将flashback log buffer中的记录刷新到磁盘上。 在DBWR进程可以写出相关脏块到磁盘之前,DBWR必须保证该buffer header相关FBA(Flashback Byte Address)的flas