ORACLEFLASHBACKDATABASE总结(一)

2015-02-02 13:28:33 · 作者: · 浏览: 44

闪回数据库(FLASHBACK DATABASE)是oracle数据库非常重要的一项功能,与通过undo 获取表数据的历史版本进而执行逻辑错误恢复的功能相比,flashback database 的功能完全不同:undo数据是针对整个数据库的;undo数据的保存时间是有限的;undo 的本质是为了保持数据的一致性。而flashback database可以只针对某表空间保存历史数据,并且只要存储空间允许,flashback database可以保存任意长的历史时间。flashback database 日志中存储的是数据库数据的前镜像。


闪回数据库整个架构包括一个进程(rvmr),一段存储空间(flash recovery area),一种日志(flashback database log)。数据块的”前镜像“存储在闪回日志中(flashback database log)。


启用闪回数据库

要想使用Flashback Database, 必须使用Flash Recovery Area。 要配置的2个参数如下,一个是大小,一个是位置。如果数据库是RAC,flash recovery area 必须位于共享存储中。数据库必须处于archivelog 模式.参数db_flashback_retention_target控制闪回日志的保留时间,默认是1440,即24小时。


SQL> show parameter db_recovery

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      /u01/app/oraele/fast_recovery_
                                                 area
db_recovery_file_dest_size           big integer 4122M
SQL> show parameter flashback

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target        integer     1440

SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     5
Next log sequence to archive   7
Current log sequence           7
要开启闪回数据库功能,可以使用alter database flashback on;

在11g下,可以在mount和open模式来执行该命令:


SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE    11.2.0.3.0      Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production

SQL> alter database flashback on;

Database altered.

SQL> select status from v$instance;

STATUS
------------
OPEN

在10g下,需要在mount状态下,执行该命令

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production
CORE    10.2.0.5.0      Production
TNS for Linux: Version 10.2.0.5.0 - Production
NLSRTL Version 10.2.0.5.0 - Production

SQL> select flashback_on from v$database;

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

SQL> select status from v$instance;

STATUS
------------
OPEN

SQL> alter database flashback on;
alter database flashback on
*
ERROR at line 1:
ORA-38759: Database must be mounted by only one instance and not open.


创建实验表

SQL> truncate table test;

Table truncated.

SQL> insert into test values((select count(*) from test),(select current_scn from v$database));

1 row created.

SQL> commit;

Commit complete.

SQL>  insert into test values((select count(*) from test),(select current_scn from v$database));

1 row created.

SQL> commit;

Commit complete.

SQL>  insert into test values((select count(*) from test),(select current_scn from v$database));

1 row created.

SQL> commit;

Commit complete.

SQL> select * from test;

        ID SCN
---------- --------------------
         0 1121575
         1 1131647
         2 1142043

在执行完flashback database 命令之后,可以使用多种方式修复数据库:

1). 直接alter database open resetlogs 打开数据库,指定scn 或者timestamp 时间点之后产生的数据统统丢失。

2). 先执行alter database open read only 命令以read-only 模式打开数据库,查看恢复后的数据是否满足要求,如果满足要求,则通过resetlogs打开数据库,否则,重新执行flashback 操作。

3). 先执行al