Oracle操作----闪回策略

1、开启、关闭闪回策略
开启闪回需要数据库在归档模型下,所以首先需要开启归档。并且在mount状态下。

所有操作不能再PLSQL中操作,需要在SQL Plus中连接系统管理员角色后操作
首先查看是否开启闪回:select flashback_on from V$database;
如果已经开启了闪回,无须执行下面的操作。
设置闪回区大小:
SQL> alter system set db_recovery_file_dest_size=30G scope=both;
设置闪回区位置:
SQL> alter system set db_recovery_file_dest='/相对地址'  scope=both;
设置闪回目标为5天,以分钟为单位,每天为1440分钟:
SQL> alter system set db_flashback_retention_target=7200 scope=spfile;
关闭数据库
SQL> shutdown immediate;
启动到mount方式
SQL> startup mount;
如果归档没有打开,打开归档[因为flashback依赖Media recovery,所以在打开flashback之前必须先启用归档]
SQL> alter database archivelog;
打开闪回策略
SQL> alter database flashback on;
打开数据库
SQL> alter database open;
再进行确认:
SQL> select flashback_on from V$database;
二、关闭闪回数据库特性:
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database flashback off;
SQL> alter database open;
Oracle操作----闪回策略_第1张图片
开启闪回策略.png
Oracle操作----闪回策略_第2张图片
关闭闪回策略.png
Oracle操作----闪回策略_第3张图片
闪回策略操作.png

注意:不开启闪回策略,不能进行数据库级别的闪回,但是可以进行基于回收站的表级的闪回,例如:1、闪回drop后的表:flashback table 表名 to before drop [rename to 表名2];
2、闪回删掉的数据:先要开启row movement:alter table emp enable row movement;然后闪回:flashback table 表名 to timestamp(systimestamp - interval '1' hour) 如果不开启row movement,则可以:insert into 表名 select * from 表名 as of timestamp(systimestamp - interval '1' hour)

3.1闪回数据库
SQL >flashback database to time to_date(xxx);
SQL >flashback database to time TO_TIMESTAMP (xxx);
SQL >flashback database to scn xxx
SQL >flashback database to sequence xxx thread 1
SQL>flashback database to timestamp(sysdate-1/24)

3.2闪回表
先要开启row movement
SQL>alter table emp enable row movement;
SQL >FLASHBACK TABLE tablename TO TIMESTAMP (JUL-07-2013, 02:33:00)
SQL >FLASHBACK TABLE employee TO SCN 133456;
SQL >FLASHBACK TABLE t1 TO TIMESTAMP '2013-03-03 12:05:00' ENABLE TRIGGERS;
闪回表可以分为两种情况,一种是闪回到指定时间或SCN,一种是drop闪回
闪回到指定时间或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 11064241;
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

3.3查询闪回(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');

3.4 删除闪回(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;

4.关于数据闪回的几点说明[系统]表空间数据不得闪回实体在数据库保存时间不可保证,保留时间取决于系统运行状况,可能是几秒钟,也可能是几个月。*基表闪回时,建立在表上的约束不可保证

你可能感兴趣的:(Oracle操作----闪回策略)