`

oracle flashback(闪回)

阅读更多
数据库很多表被误删,利用数据库的闪回进行恢复,本文大量采用网上的例子,大部分来自http://blog.csdn.net/tianlesoftware/archive/2009/10/16/4677378.aspx
步骤:
1. 配置Flash Recovery Area

  要想使用Flashback Database, 必须使用Flash Recovery Area,因为Flashback Database Log只能保存在这里。 要配置的2个参数如下,一个是大小,一个是位置。如果数据库是RAC,flash recovery area 必须位于共享存储中。数据库必须处于archivelog 模式.

启用Flash Recovery Area:
SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=20G SCOPE=BOTH;

SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/DBA/FB' SCOPE=BOTH;




禁用Flash Recovery Area:
SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='' ;

注意:
对于Flash Recovery Area,Oracle 是这样建议的,flash recovery area 设置的越大,flashback database 的恢复能力就越强,因此建议flash recovery area 能够放的下所有的数据文件,增量备份,以及所有尚未备份的归档文件,当然还有它自己产生的flashback logs。

在数据库运行过程中,oracle 自动向该区域写入文件,当剩余空间不足15%的时候,它就会在alert 中增加警告,提示你空间不足。但此时不会影响数据库的正常运转,直到所有空间统统被用掉之后,oracle 首先尝试删除寻些过期的文件,冗余文件或备份过的文件,如果这些做完了,还是没有空闲空间的话,数据库就被hang 住了。


对于因Flash Recovery Area导致的数据库hang的处理,请参考:

http://blog.csdn.net/tianlesoftware/archive/2009/10/14/4668991.aspx
查看是否启用:
show parameter db_recovery_file

2.检查是否启用了归档日志
SQL> archive log list;

数据库日志模式      存档模式

自动存档            启用

存档终点            USE_DB_RECOVERY_FILE_DEST

最早的联机日志序列  9

下一个存档日志序列  11

归档日志操作:
1)、开启归档
  a. 关闭数据库shutdown immediate
  b. startup mount
  c. alter database archivelog
  d. alter database open
  2)、禁止归档
  a. 关闭数据库shutdown immediate
  b. startup mount
  c. alter database noarchivelog
  d. alter database open
操作完后查看
SQL> archive log list


3.启用数据库flashback
1). 数据库启动到mount状态
SOL>shutdown immediate
SQL> startup mount;

2). 检查Flashback 功能, 缺省时功能是关闭的。

SQL> select name, current_scn, flashback_on from v$database;

NAME    CURRENT_SCN  FLASHBACK_ON

--------    -----------          ------------------

DBA      945715          NO

 

3). 启动Flashback功能

SQL>  alter database flashback on;

数据库已更改。


SQL>  select name, current_scn, flashback_on from v$database;

NAME      CURRENT_SCN FLASHBACK_ON

--------- ----------- ------------------

DBA                 0 YES


4). 设置初始化参数:DB_FLASHBACK_RETENTION_TARGET:


SQL>alter system set db_flashback_retention_target=1440 scope=both;
5)启动数据库
SQL> alter database open


该参数用来控制flashback log 数据保留的时间,或者说,你希望flashback database 能够恢复的最早的时间点。默认值是1440,单位是minute,即24 小时,需要注意的是该参数虽然未直接指定flash recovery area大小,但却受其制约,举个例子假如数据库每天有10%左右的数据变动的话,如果该初始化参数值设置为1440,则flash recovery area 的大小至少要是当前数据库实际容量的10%,如果该初始化参数设置为2880,则flash recovery area 的大小就至少是数据库所占容量的20%。

对数据进行flashback
SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup mount

ORACLE 例程已经启动。




SELECT CURRENT_SCN FROM V$DATABASE;
560586

进行闪回:
Flashback database ryctest to timestamp to_timestamp('2011-05-10 13:40:05','yyyy-mm-dd hh24:mi:ss');
或者:
Flashback database to scn 947921;
启动数据库
alter database open resetlogs;

Flashback 不支持sys用户. system表空间下的对象,也不能从回收站里拿到。故使用SYS 或者SYSTEM用户登陆时, show recyclebin 为空。
某个表被drop
1. Tablespace Recycle Bin

从Oracle 10g 开始, 每个表空间都会有一个叫作回收站的逻辑区域,当用户执行drop命令时, 被删除的表和表的关联对象( 包括索引, 约束,触发器,LOB段,LOB index 段) 不会被物理删除, 这些对象先转移到回收站中,这就给用户提供了一个恢复的可能。


初始化参数recyclebin 用于控制是否启用recyclebin功能,缺省是ON, 可以使用OFF关闭。

SQL> show parameter recycle

NAME                    TYPE        VALUE
------------------------------------ ----------- ------------------------------
buffer_pool_recycle            string
db_recycle_cache_size         big integer 0
recyclebin                    string      on

禁用该功能:
SQL> alter system set recyclebin=off;
SQL> alter system set recyclebin=on;

SQL> alter session set recyclebin=off;
SQL> alter session set recyclebin=on;

某个表被drop后,
1.	show recyclebin
2.	flashback table a to before drop;
Flashback query
Insert into A select * from A as of timestamp to_timestamp('2009-10-15 19:04:16','YYYY-MM-DD hh24:mi:ss');

或者
insert into A select * from A as of scn 1095782;


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics