加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flashback in 9i,10g,11g(翻译+测试修改)

发布时间:2020-12-15 18:42:11 所属栏目:百科 来源:网络整理
导读:? Oracle flashback Original http://www.oracle-base.com/articles/9i/flashback-query.php http://www.oracle-base.com/articles/10g/flashback-10g.php http://www.oracle-base.com/articles/11g/flashback-and-logminer-enhancements-11gr1.php Flashbac

?

Oracle flashback

Original

http://www.oracle-base.com/articles/9i/flashback-query.php

http://www.oracle-base.com/articles/10g/flashback-10g.php

http://www.oracle-base.com/articles/11g/flashback-and-logminer-enhancements-11gr1.php

Flashback in 9i

Flashback query (回闪查询)

回闪查询提供给用户一种查看数据库之前状态的一致性视图(consistent view)。有了这一功能,用户就可以和之前的报表做对比和恢复那些由于错误逻辑导致删除的数据。

n? 预备知识

n? 使用回闪查询

n? 数据恢复示例

n? 回闪的限制

预备知识

Oracle回闪查询仅适用于配置了Automatic Undo Management的数据库,对于传统的rollback segments不适用。在init.ora配置文件里面有一个参数UNDO_RETENTION,用于定义最大可回闪的时间。这个参数可以手动修改。

Alter system set undo_retention = <seconds>;

?

查看这个参数:

SQL> show parameter undo_retention

NAME???????????????????????????????? TYPE??????? VALUE

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

undo_retention?????????????????????? integer???? 900

表示最大回闪时间是900秒。

使用回闪查询

回闪查询使用DBMS_FLASHBACK包来控制有效或者失效。我们可以使用SCN或者时间戳来指定回闪时间点。

EXEC DBMS_FLASHBACK.enable_at_system_change_number(123);

EXEC DBMS_FLASHBACK.enable_at_time('28-AUG-01 11:00:00');

在回闪查询状态下数据库是只读的,所以当你完成只读操作后不要忘了关闭回闪查询

EXEC DBMS_FLASHBACK.disable;

如果没有明确调用disable关闭回闪查询,当当前session结束的时候系统将自动关闭。系统当前的scn号可以用函数dbms_flashback.get_system_change_number得到。

select dbms_flashback.get_system_change_number from dual;

或者从v$database里面查到

SELECT current_scn,TO_CHAR(SYSTIMESTAMP,'YYYY-MM-DD HH24:MI:SS') FROM v$database;

?

数据恢复示例

?--创建测试用表

create table flashback_emp as select * from scott.emp;

select count(1) from flashback_emp;

--获取当前的SCN和时间戳

SELECT current_scn,'YYYY-MM-DD HH24:MI:SS') FROM v$database;

--删除测试表里面的所有数据(模仿误删)

delete from flashback_emp;

commit;

--确认数据已经删除

select count(1) from flashback_emp;

declare

? type t_row is table of flashback_emp%rowtype;

? l_row t_row := t_row();

begin

? --开启回闪查询,在误删之前的时间点

? dbms_flashback.enable_at_time(to_date('2012-06-20 13:58:51','yyyy-mm-dd hh24:mi:ss'));

? --收集回闪状态的数据到bulk type

? select * bulk collect into l_row

from flashback_emp;

? --关闭回闪查询

? dbms_flashback.disable;

? --bulk type中取数据插入到回复表

? forall i in l_row.first .. l_row.last

??? insert into flashback_emp values l_row(i);

? commit;

end;

--检查恢复是否成功

select count(1) from flashback_emp;

回闪的限制

·db server必须配置为Automatic Undo Management

·回闪查询状态下DDLDML语句无法使用。(因为数据库为只读状态)

·回闪查询不支持DDL操作的恢复(如drop truncate),仅DML操作的数据可以恢复

  • ·Flashback Query does apply to code objects (Packages,Procedures,Function or Triggers). If invoked,the current definition will be executed against the flashback data.

这一句不是很理解

Flashback in 10g

--未完

?

Flashback in 11g

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读