闪回功能是oracle 9i引出的一个功能。

闪回技术是基于undo表空间来实现的,与闪回有联系的参数有:

SQL> show parameter undo;

NAME                                   TYPE                                  VALUE

------------------------------------ ----------------------------------  -----------------------------
undo_management             string                                   AUTO
undo_retention                     integer                                900
undo_tablespace                 string                                  UNDOTBS1
这三个参数分别代表的意思是:

undo_management:表示的undo表空间是自动管理

undo_retention:表示的是undo表空间数据保留时间为900S

undo_tablespace:表示的是undo表空间名

要启动闪回数据库要有闪回恢复区,与闪回恢复区有关参数:

show parameter db_recover;
db_recovery_file_dest_size :表示设置的闪回区大小 ,尽量把这个参数设置大。

修改方法:alter parameter db_recovery_file_dest_size xx;

db_recovery_file_dest :表示闪回恢复区的路径

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

要用闪回功能还要启动闪回功能,默认是不启动的,这样会影响I/O,消耗大量的资源。

首先查看是否启动闪回功能:

select flashback_on from v$database;

FLASHBACK_ON

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

NO

 

闪回功能有:闪回数据库、闪回删除、闪回查询、闪回表

 

---闪回数据库是基于undo的,属于不完全恢复

启动闪回闪回数据库

看下数据库是否运行在归档模式下:

archive log list;

如果是则用shutdown immediate;关闭数据库,如果不是则启动归档然后关闭数据库

然后startup mount;启动到mount状态下

接着启动闪回功能:alter database flashback on;

然后打开数据库:alter database open;

然后再查看:select flashback_on from v$database;

FLASHBACK_ON

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

YES

这时就启动了闪回数据库功能。

闪回数据库有基于时间的闪回、有基于SCN值的闪回

基于时间的闪回:

flashback database to timestamp('xxxx','YY-MM-DD HH24:MI:SS');

基于SCN值的闪回:

flashback database to scn xxxxxx;

 

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

闪回删除是基于表空间回收站的,每个表空间都有数据自己的回收站,但是sys用户不支持闪回,system表空间下的对象删除也不进回收站,所以system表空间下的回收站没有东西。

与回收站有关的参数命令:

1). purge tablespace tablespace_name : 用于清空表空间的Recycle Bin

2). purge tablespace tablespace_name user_name: 清空指定表空间的Recycle Bin中指定用户的对象

3). purge recyclebin: 删除当前用户的Recycle Bin中的对象

4). purge dba_recyclebin: 删除所有用户的Recycle Bin中的对象,该命令要sysdba权限 

5). drop table table_name purge:  删除对象并且不放在Recycle Bin中,即永久的删除,不能Flashback恢复。

 PS:回收站默认是关闭的,打开方面:

10g system级别:

alter system set recyclebin=off; 
alter system set recyclebin=on;
11g system级别:

alter system set recyclebin=off deferred;
alter system set recyclebin=on deferred;

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

闪回查询:

可以利用查询出来之前的数据
select count(1) from fra as of timestamp to_timestamp('2013-08-21 

21:26:51','YYYY-MM-DD hh24:mi:ss');

把之前的数据插入到之前的表中

Insert into fra select * from fra as of timestamp to_timestamp('2013-08-21 

21:26:51','YYYY-MM-DD hh24:mi:ss');

 

SELECT text
 FROM dba_source
     AS OF TIMESTAMP TO_TIMESTAMP ('XXXXX', 'YYYY-MM-

DD HH24:MI:SS')
   WHERE owner = 'XXXX' AND name = '你删除的对象名'
ORDER BY line;       

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

查看一个参数是不是立即生效:

 

看v$parameter视图 ISSES_MODIFIABLE 参数 值

false:表示是静态参数,只要当instance重新启动时才会生效;
immediate:表示修改参数后立即生效
deferred:表示修改后要等下一个session才能生效,修改时已经连接的session是不会生效的

.