oracle 闪回简介

1、闪回技术

闪回技术通常用于快速简单恢复数据库中出现的认为误操作等逻辑错误,从闪回的方式可以分为基于数据库级别闪回、表级别闪回、事务

级别闪回,根据闪回对数据的影响程度又可以分为闪回恢复,闪回查询。闪回恢复将修改数据,闪回点之后的数据将全部丢失。而闪回查询则可

以查询数据被DML的不同版本,也可以在此基础之上确定是否进行恢复等

2、分类

闪回分为表级别,数据库级别,事物等级别。这里只介绍表和数据库常用的。

其中表闪回可以在线操作,而数据库需要在mount状态下了

并且闪回之后的工作全部丢失,其中flash batabase利用了闪回buffer,并且启用了一个单独的进程rwr,flashbacklog并不是记录所有的快的改变,所以使用这个特性的时候,数据库必须是在archivelog模式下

3、设置

1)        闪回表

SQL>show parameter undo;

 

NAME                                 TYPE        VALUE

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

undo_management                      string      AUTO

undo_retention                       integer     900

undo_tablespace                      string     UNDOTBS1

需要保证undo_management = auto 另外还有就是wndo_retention的值说明了闪回查询恢复的时间保留值,我这是15分钟,这个是默认值,另外可以设置

Alter system set undo_retention= 3600是一小时

这样可以通过如下方法查询修改之前的数据,
select * from table1 as of timestamp (systimestamp - interval '60' second);
select * from table1 as of timestamp to_timestamp('2012-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS');
select current_scn from v$database;
select * from table1 as of scn 66631220;

这里还有另外一种查询闪回数据的方式

1,使用sys登陆授权闪回的账户,grant execute on sys.dbms_flashback to xxx

2,可以使用基于时间的闪回或者scn的闪回,execute dbms_flashback.enable_at_time(sysdate-10/1440);然后使用一个查询语句即可查询10分钟前的数据

或者使用execute dbms_flashback.enable_at_system_change_number(current_scn); -- 需要查询当前的scn: select current_scn from v$database;或者select dbms_flashback.get_system_change_number() from dual;
3,使用,execute dbms_flash.disable()取消闪回即可;


2)        闪回数据库

查看数据库是否归档,并且是否开启闪回特性

SQL>select log_mode,open_mode,flashback_on from v$database;

 

LOG_MODE     OPEN_MODE FLASHBACK_ON

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

ARCHIVELOG   READWRITE YES

如果没有启用的话使用alter database flashback on

查看闪回目录和闪回空间

SQL>show parameter db_recovery

 

NAME                                 TYPE        VALUE

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

db_recovery_file_dest                string      D:\oracle\product\10.2.0\db_1/

                                                flash_recovery_area

db_recovery_file_dest_size           big integer 8G

查看闪回保留时间,可以自己增大

SQL>  show parameter db_flashback

 

NAME                                 TYPE        VALUE

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

db_flashback_retention_target        integer     1440

查看sga中闪回区大小

SQL>select * from v$sgastat where name like 'flashback%';

 

POOL         NAME                            BYTES

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

shared pool  flashbackgeneration buff     3981204

 

4、应用

使用格式

FLASHBACK[STANDBY] DATABASE [<database_name>] TO [BEFORE] SCN <system_change_number>   --基于SCN闪回

            FLASHBACK [STANDBY] DATABASE[<database_name>]  TO [BEFORE]TIMESTMP <system_timestamp_value>--基于时间戳闪回

            FLASHBACK [STANDBY] DATABASE[<database_name>]  TO [BEFORE]RESTORE POINT <restore_point_name>--基于时点闪回

1)  使用基于时间戳闪回

SQL>create table a(id number);

 

表已创建。

 

SQL>insert into a values(1);

 

已创建 1 行。

 

SQL>commit

  2  /

 

提交完成。

 

SQL>drop table a;

 

表已删除。

SQL>shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL>startup mount

ORACLE 例程已经启动。

 

TotalSystem Global Area  293601280 bytes

FixedSize                  1248600 bytes

VariableSize              96469672 bytes

DatabaseBuffers          188743680 bytes

RedoBuffers                7139328 bytes

数据库装载完毕。

SQL>flashback database to timestamp

  2 to_timestamp('2013-12-30 19:13:20','yyyy-mm-dd hh24:mi:ss');

 

闪回完成。

 

SQL>alter database open resetlogs;

 

数据库已更改。

然后查询数据库,将会是之前的状态

2)  基于SCN的闪回

SQL> select current_scn from v$database;   --获取当前的SCN号

然后操作一样

SQL> flashback database to scn   XXX

打开数据库

3)  基于闪回点的

create restore point point1;    --先创建闪回点

然后操作一样

最后

flashback database to restore point point1;

打开数据库

3、回收站

在使用过程中遇到一个现象,我觉得有必要记录下,就是回收站的

查看开启状态

Show parameter recyclebin

NAME                                 TYPE        VALUE

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

recyclebin                           string      on

另外注意如果创建的对象在系统表空间的时候,你drop一个表等操作之后是不妨到回收站的,

 

另外以下情况将不使用回收站

1、  drop user username cascade

2、   drop table table1 purge

3、  Drop  tablespace  ts_name including contents

4、  使用flashback命令---清空回收站


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朝闻道-夕死可矣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值