闪回

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

闪回查询,由一个新的包DBMS_FLASH来实现。用户使用闪回查询可以及时取得误操作DML(Delete、Update、Insert)前某一时间点数据库的映像视图,用户可以利用系统时间或系统改变号(SCN:System Change Number)来指定这个只读视图,并可以针对错误进行相应的恢复措施。闪回查询功能完全依赖于自动回滚段管理(AUM),对于Drop等误操作不能恢复。


闪回的本质是利用空间来换取过去的时间,将undo信息进行整理和"归档",按照时间片进行整理闪回日志,用户闪回到相应的时间点,剩余的数据是由redo日志和归档日志文件进行前滚,因而闪回提供了to before resetlogs选项,开启闪回功能前数据库必须运行在归档模式,开启数据库闪回后将会产生rvwr进程.

查看系统闪回功能

SQL> select FLASHBACK_ON from v$database;

(系统默认没有开闪回功能)


设置闪回

SQL> shutdown immediate

SQL> startup mount;

SQL> alter database archivelog;(闪回必须运行在归档模式)


SQL>  alter database FLASHBACK on;(闪回启动)

SQL> alter database open;

SQL> select FLASHBACK_ON from v$database;


查看恢复路径

SQL> show parameter recover

db_recovery_file_dest (恢复的路径)

db_recovery_file_dest_size (区域里的配额)


闪回日志的位置

[oracle@sq123 ~]$ cd /oracle/app/flash_recovery_area/TEST/flashback/


闪回保留时间(默认1天)

SQL> show parameter flashback


============================================

闪回数据库(恢复到时间点,后的数据丢失)


查看时间点

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

2012-03-12 06:36:30

SQL> drop user scott cascade;(删除scott用户)


查看最早可以恢复到的时间点

SQL> select to_char(OLDEST_FLASHBACK_TIME,'yyyy-mm-dd hh24:mi:ss') from v$flashback_database_log;

2012-03-12 05:49:59


SQL> shutdown abort

SQL> startup mount


恢复到删除用户前的时间点

SQL> flashback database to timestamp to_timestamp('2012-04-24 05:40:51','yyyy-mm-dd hh24:mi:ss');


SQL> alter database open resetlogs;


scott用户又可以登陆了


===================================================

监视flashback database


最早可以恢复到那个时间点

SQL> select to_char(OLDEST_FLASHBACK_TIME,'yyyy-mm-dd hh24-mi-ss') from v$flashback_database_log;


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

使用 闪回数据库

SQL> shutdown abort

SQL> startup mount;


SQL> flashback database to timestamp to_timestamp('2012-03-12 02:22:22','yyyy-mm-dd hh24:mi:ss');



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

管理 闪回


SQL> show parameter recover


更改闪回目录

SQL> alter system set db_recovery_file_dest='/home/oracle/flash';


===============================

flashback drop 使用


drop表时,等于把表放到回收站中(默认情况下,Oracle是将此功能开启的。)

查看回收站

SQL> show parameter recyclebin

SQL> show recyclebin; (没有内容,sysdba的drop操作是不会送到recyclebin)


scott下

SQL> create table ttttt(d int);

SQL> drop table tt;

SQL> commit;


scott下

SQL> show recyclebin;(有数据了)

SQL> select object_name,original_name from recyclebin;


scott下

SQL> flashback table tt to before drop;


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


什么时候是闪回不回来的


SQL> create tablespace tbs_test01 datafile '/oracle/app/oradata/TEST/tbs_test01.dbf' size 10M;


scott下

SQL> create table tab_aaa tablespace tbs_test01 

  2  as select * from emp;


SQL> drop table tab_aaa;


SQL> flashback table tab_aaa to before drop(现在还可以闪回,再次删除)


SQL> drop table tab_aaa;


创建tab_bbb表大于 tab_aaa表

SQL> create table tab_bbb tablespace tbs_test01

  2  as select * from emp;


SQL> insert into tab_bbb select * from tab_bbb;

SQL> / (多执行几次写满表空间)

闪回不了

(只要这个表里有一个字节被覆盖了,那么整个表也就恢复不会来了)

(或 清空回收站也不能闪回)


删除表时 不放到回收站中

SQL> drop table tab_bbb purge;

(purge 为不放进回收站)

SQL> show recyclebin;(没有删除记录)


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

回收回收站

SQL> purge recyclebin;

SQL> show recyclebin;(没内容了)


=============================================

flashback query

(Flashback Query 是利用多版本读一致性的特性从UNDO 表空间读取操作前的记录数据)

SQL> create table t(id int); 

SQL> insert into t values(11);

SQL> commit;

SQL> drop table t;

SQL> show recyclebin;


闪回并重命名

SQL> flashback table t to before drop rename to haha; 

SQL> select * from haha;

SQL> delete from haha;

SQL> commit;


SQL> show recyclebin;(没内容,undo也不能恢复)


显示当前时间

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;


显示38分这个时间点上的数据

SQL> select * from haha as of timestamp to_timestamp('2012-03-12 01:38:00','yyyy-mm-dd hh24:mi:ss');

no rows selected(没有数据)


显示36分这个时间点上的数据

SQL> select * from haha as of timestamp to_timestamp('2012-03-12 01:36:00','yyyy-mm-dd hh24:mi:ss');

        ID

----------

        11

(有数据)


创建个新表装haha里的数据

SQL> create table hehe as  select * from haha as of timestamp to_timestamp('2012-03-12 01:36:00','yyyy-mm-dd hh24:mi:ss');


(前提条件是,undo表空间不能被覆盖)






     本文转自陈继松 51CTO博客,原文链接:http://blog.51cto.com/chenjisong/1737592,如需转载请自行联系原作者

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
Oracle 关系型数据库 数据库
一个Oracle数据库,一天归档日志3T多
Oracle数据库一体机,Oracle linux7,看看归档日志大小
|
SQL 存储 数据库
19闪回
19闪回
287 0
|
SQL Oracle 关系型数据库
|
SQL 存储 Oracle
PostgreSQL WAL解析与闪回的一些想法
最近在walminer基础做了不少修改,以支持我们的使用场景。详细参考 如何在PostgreSQL故障切换后找回丢失的数据 修改也花了不少精力和时间,这个过程中有些东西想记录下来,方便以后查阅。
1620 0
|
SQL 存储 NoSQL
DM7闪回与闪回查询
闪回当用户操作不慎导致错误的删改数据时,非常希望有一种简单快捷的方式可以恢复数据。闪回技术,就是为了用户可以迅速处理这种数据逻辑损坏的情况而产生的。 闪回技术主要是通过回滚段存储的UNDO记录来完成历史记录的还原。
827 0
|
SQL Oracle 关系型数据库
Oracle闪回drop和闪回查询
        Oracle提供了7种闪回技术,分别为:闪回drop、闪回查询、闪回数据归档、闪回表、闪回版本查询、闪回事务、闪回数据库。此次验证下Oracle数据库闪回drop和闪回查询。 一、闪回DROP         又名闪回删除。
11215 0
|
Oracle 关系型数据库 数据库