oracle 闪回

访客9年前oracle数据库3157

 Flashback query(闪回查询)原理

  Oracle根据undo信息,利用undo数据,类似一致性读取方法,可以把表置于一个删除前的时间点(SCN),从而将数据找回。

用途:

    

 短时间内数据恢复到前一段时间点或者SCN,表结构发生改变不支持 若alert drop 等等

 

用法:

    先查询是否符合闪回条件

 

SQL> show parameter undo;

NAME                                TYPE       VALUE

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

undo_management                     string     AUTO

undo_retention                        integer    1000

undo_tablespace                       string     UNDOTBS1

其中undo_management = auto,设置自动undo管理AUM),该参数默认设置为:auto

Undo_retention = n(),设置决定undo最多的保存时间,其值越大,就需要越多的undo表空间的支持。修改undo_retention的命令如下:

SQL> alter system set undo_retention = 3600;

System altered

 

 

闪回实现方式

1.      获取数据删除前的一个时间点或scn,如下:

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

 

2.      查询该时间点(或scn)的数据,如下:

SQL> select * from t as of timestamp to_timestamp('2015-06-29 22:57:47', 'yyyy-mm-dd hh24:mi:ss');

SQL> select * from t as of scn 1060174;

3.      将查询到的数据,新增到表中。也可用更直接的方法,如:

SQL>create table tab_test as select * from t of timestamp to_timestamp('2015-06-29 22:57:47', 'yyyy-mm-dd hh24:mi:ss');

        

注:推荐使用scn,由于oracle9i中,因为scn与时间点的同步需要5分钟,如果最近5分钟之内的数据需要Falshback query查询,可能会查询丢失,而scn则不存在这个问题。Oracle10g中这个问题已修正(scn与时间点的大致关系,可以通过logmnr分析归档日志获得)。

Falshback query查询的局限:

1. 不能Falshback5天以前的数据。

2. 闪回查询无法恢复到表结构改变之前,因为闪回查询使用的是当前的数据字典。

3. 受到undo_retention参数的影响,对于undo_retention之前的数据,Flashback不保证能Flashback成功。

4. drop,truncate等不记录回滚的操作,不能恢复。

5. 普通用户使用dbms_flashback包,必须通过管理员授权。 

相关文章

Oracle 错误代码总结及解决方案ora-0

 ORA-00001:违反唯一约束条件(主键错误)ORA-00028:无法连接数据库进程ORA-00900:无效sql语句ORA-00904:字段名写错或是建表时最后一个字段有逗号ORA-0...

oracel如何找回被删除的数据

---此sql是查询这个时间段前的数据select * from tableName as of timestamp to_timestamp('2011-05-21 11:40:00'...

oracle 函数function语法及简单实例

函数调用限制1、SQL语句中只能调用存储函数(服务器端),而不能调用客户端的函数2、SQL只能调用带有输入参数,不能带有输出,输入输出函数3、SQL不能使用PL/SQL的特有数据类型(boolean,...

linux下启动oracle实例

 启动数据库实例,分为两步:第一步,启动监听;第二步,启动数据库实例。 一、如何启动数据库实例  1.进入到sqlplus启动实例[root@localhost...

oracle 数据库乱码问题解决

一、什么是Oracle字符集        Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支...

oracle sql中如何判断是否含有中汉字

  使用函数length和lengthb来判别    使用函数length与lengthb来判别,是基于中文字符占用2~4个字节,而ASCII字符占用一个字节,...

评论列表

点我收录您
2015-10-15 11:55:38

不错的解决方案

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。