ORACLE闪回功能开启和使用

闪回功能在ORACLE中默认是关闭的,需要按照下面的方式开启:

Sql>startup mount

Sql>alter database flashback on;

Sql>alter database open;

此时已经开启了闪回功能,可以通过v$database中的flashback_on来确定:

ORACLE闪回功能开启和使用 - elica - elica的博客

建立一个表格验证闪回功能:

Sql>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'

Sql>create table test(x int);

Sql>insert into test values(1);

Sql>commit;

Sql>select * from test;

1、闪回数据库

Sql>select sysdate from dual;

Sql>truncate table test;

Sql>shutdown immediate

Sql>startup mount

Sql>flashback database to timestamp to_date(‘先前查出来的系统时间’,’yyyy-mm-dd hh24:mi:ss’);

Sql>alter database open resetlogs;

进入数据库后查看先前的表,可以看到记录恢复:

ORACLE闪回功能开启和使用 - elica - elica的博客

2、闪回DROP

Sql>drop table test;

Sql>show recyclebin;

Sql>flashback table test to before drop;

ORACLE闪回功能开启和使用 - elica - elica的博客

查询表已经被还原,使用purge命令可以删除回收站,或者删除表的时候直接删除不进回收站(purge recyclebin/drop table test purge

3、通过SCN闪回表

Sql>select dbms_flashback.get_system_change_number from dual;

Sql>delete from test;

Sql>commit;

Sql>alter table test enable row movement;(闪回表的过程中不能保证rowid不变,因此要启动行移动功能)

Sql>flashback table test to scn xxxx;

ORACLE闪回功能开启和使用 - elica - elica的博客
ORACLE闪回功能开启和使用 - elica - elica的博客

查看闪回区使用情况:

SQL>select name,space_limit/1024/1024/1024 all_G,space_used/1024/1024/1024 useD_G from v$recovery_file_dest;

如果闪回区已快满,调大闪回区的大小:

SQL>alter system set db_recovery_file_dest_size=80G;


你可能感兴趣的:(oracle)