当前位置:数据库 > Oracle >>

Oracle闪回flashback总结

Oracle闪回flashback总结
 
1.说明:
Ø  采用的技术。
使用的是多个技术。
 
1.      闪回日志
 
2.      回收站
 
3.      回滚段
 
无法使用回收站的操作
 
Drop table xxx purge;
 
Drop tablespace xxx
 
Drop user xxx cascade;
 
Truncate一个表
 
Truncate不会有回滚数据,不会有回收站,所以不能使用闪回表的方式回收,只能使用闪回数据库的方式恢复。
 
回收站逻辑上是一个,实际上是多少,每个表空间有自己的回收站,可以单独清空。
 
Ø  关于数据闪回的几点说明
     1、系统表空间数据不得闪回
 
     2、实体在数据库保存时间不可保证,保留时间取决于系统运行状况,可能是几秒钟,也可能是几个月。
 
     3、基表闪回时,建立在表上的约束不可保证。
 
Ø 记录当前时间或SCN
为了以防万1,最好在数据库变动前记录时间或SCN
 
SQL> selectto_char(sysdate,'YYYY-MM-DD HH24:mi:ss') from dual;
 
SQL> selectcurrent_scn from v$database;
 
 
 
2.开启闪回
开启闪回需要数据库在归档模型下,所以首先需要开启归档。并且在mount状态下。
 
首先查看是否开启闪回:
 
SQL> select flashback_on fromV$database;
 
FLASHBACK_ON
 
------------------
 
NO
 
如果已经开启了闪回,无须执行下面的操作。
 
SQL> alter system set db_recovery_file_dest_size=30Gscope=both;
 
SQL> alter system setdb_recovery_file_dest='/u01/flashback' scope=both;
 
SQL> shutdown immediate
 
SQL> startup mount
 
SQL> alter database archivelog;
 
SQL> alter database flashback on;
 
SQL> alter database open;
 
再进行确认:
 
SQL> select flashback_on fromV$database;
 
FLASHBACK_ON
 
------------------
 
YES
 
 
 
3.闪回操作
Ø 闪回数据库。
可以有下面3个不同的方法,按实际需要,任选其一
 
SQL> flashback database totimestamp(sysdate-1/24);
 
SQL> flashback database to timestamp
 
to_timestamp('2013-09-1016:00:00','YYYY-MM-DD HH24:mi:ss');
 
SQL> flashback database to scn 463954;
 
Ø 闪回表:
闪回表可以分为两种情况,一种是drop闪回,一种是闪回到指定时间或SCN
 
先要开启row movement
 
SQL>alter table emp enable row movement;
 
 
 
闪回到指定时间或SCN
 
 
 
SQL>flashback table emp to timestampto_timestamp
 
('2013-09-12 08:00:00','yyyy-mm-ddhh24:mi:ss');
 
SQL>flashback table emp to scn 4354761;
 
DROP闪回:
 
如果误对表做了drop操作,可用下面的方法闪回
 
SQL>flashback table s_emp1 to before drop;
 
可以以下面的方法闪回
 
SQL>flashback table flashbacktable to before drop rename to a;
 
SQL>flashback table "回收站实体名"to before drop;
 
 
 
--闪回表后表的索引也会回来,但是索引名还是在recyclebin中显示的名字,所以使用 alterindex“ bin$xxx” rename to xxxx 命令修改索引名称。
 
SQL>alter index "BIN$s6TKiw4uafDgRAAVF3jtoA==$0"
 
rename to PK_PC_STIM_INJ_ENHANCE_MON
 
 
 
Ø  查询闪回(flashbackquery)
delete数据库里的数据都删除了以后,还commit, 采用下面的方法实现数据的还原
 
·查询过去某指定时间点数据库中的数据。
 
SQL>select* from emp as of timestamp to_timestamp('2013-07-05 08:00:00','yyyy-mm-ddhh24:mi:ss');
 
·删除表后将数据添加到原表中    
 
SQL>insertinto emp select * from emp
 
as of timestamp to_timestamp
 
('2013-07-05 08:00:00','yyyy-mm-ddhh24:mi:ss');
 
Ø 9i的闪回查询
9i的flashback 是基于undo的,9i根本没有recycle bin,想闪回表和库是不可能的,只能闪回查询
 
SQL>SELECTCOUNT(*) FROM class_daily as of timestamp to_timestamp('2013-03-21 14:58:00','yyyy-mm-ddhh24:mi:ss');
 
 
 
Ø  删除闪回(flashbackdrop)
闪回被dropped的基表,
 
·显示回收站信息
 
     SQL>show recyclebin
 
--select* from user_recyclebin
 
·彻底删除基表
 
     SQL>drop table s_emp1 purge ;
 
----彻底删除一个表用PURGE,这样的删除的表不能闪回。
 
·清除回收站
 
     SQL>purge recyclebin;
 
·查数据库选项产品:
 
     SQL>select * from V$option;
 
· truncate删除后不保留存储空间,而Delete删除后,保留存储空间,如果要删掉这些存储空间,以释放空间,可以执行以下命令:
 
SQL>alterttable emp deallocate unused;
 
·如果还要保留一部分,可以用:
 
SQL>alterttable emp deallocate unused 200k;
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,