ORACLEFLASHBACKDATABASE总结(二)

2015-02-02 13:28:33 · 作者: · 浏览: 45
ter database open read only 命令以read-only 模式打开数据库,然后立刻通过逻辑导出的方式将误操作涉及表的数据导出,再执行recover database 命令以重新应用数据库产生的redo,将数据库修复到flashback database 操作前的状态,然后再通过逻辑导入的方式,将之前误操作的表重新导入,这样的话对现有数据的影响最小,不会有数据丢失。

下面演示第二种方式:

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


与flashback database 相关的视图

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