所属类别:信息化
摘要内容: Flashback在开发环境(有时生产环境的特殊情况下)是很有用的一个工具。
文章作者: Elise IT专家网
特别推荐:免费发布信息 承包关键词~~抢爆了!HOT!
Flashback 简介
1 原理
当数据 update 或 delete 时,原来的数据会保存在 undo 表空间中,保存的最少时间是 UNDO_RETENTION。实际的保存时间与 undo表空间的大小和数据更改的繁忙程度相关。 UNDO_RETENTION 的参数(单位为秒)指定 Oracle保存用于 flashback查询的 undo映像 的时间。一般你可以将这个值设为一整天(864000秒),这样你就能看到前一天全天的映像。 当然,你的在线 undo日志必须足够大,大到足以能保存一整天的 undo日志数据,对于繁忙
的 Oracle系统,这个数值可以达到很大。
5.1.2 一些限制
服务器必须配置成使用自动 undo管理。
在使用 Flashback查询时不能使用 DDL或者 DML。
Flashback 不取消 DDL操作,例如 DROP命令。 数据库管理员做一些必要的设置之后,一般用户才能使用 Flashback查询功能: SQL> ALTER SYSTEM SET UNDO_MANAGEMENT=AUTO SQL> ALTER SYSTEM SET UNDO_RETENTION=86400
SQL> GRANT EXECUTE ON DBMS_FLASHBACK TO USERNAME;
3 获得SCN或时间点
在 Flashback 时,可以尝试多个 SCN,获取最佳值。
如果能得知具体时间,那么可以获得准确的数据闪回。 SQL> alter session set nls_date_format="YYYY-MM-DD HH24:MI:SS"; SQL> select sysdate from v$database;
捕捉提交的 SCN: // 不知为什么,两种方法获得的 SCN不一样
SQL> select dbms_flashback.get_system_change_number scn from dual;
SQL> select max(ktuxescnw * power(2,32) + ktuxescnb) SCN from x$ktuxe;
4 启用或禁用flashback查询
使用系统改变数(SCN)或者真实时间来指定 flashback 的时间点来获取数据映象。
方法一: SQL> select * from [TABLE] as of scn 129292;
SQL> select * from [TABLE] as of timestamp to_timestamp("时间", ’时间格式");
SQL> select * from saflog as of timestamp to_timestamp("2007-12-18 08:40:00",
"YYYY-MM-DD HH24:MI:SS"); 方法二:
启用: SQL> exec dbms_flashback.enable_at_system_change_number(112112); SQL> exec dbms_Flashback.enable_at_time("28-AUG-02 11:00:00");
启用后看到的只是闪回的结果,实际上并未恢复数据。且闪回状态下不能做
DML操作。可以先恢复到一个临时表中。见示例。
禁用: SQL> execute dbms_flashback.disable();
5 示例: declare
cursor c1 is select * from scott.emp_temp;
r_c1 scott.e%rowt ype;
begin
loop
dbms_flashback.enable_at_system_change_number(49570);
if c1%isopen=false then open c1;end if;
fetch c1 into r_c1;
dbms_flashback.disable();
exit when c1%notfound;
update scott.emp_temp set sal=r_c1.sal where empno=r_c1.empno;
commit;
end loop;
exec dbms_flashback.disable();
close c1;
end;
相关信息· 乘客手机藏黄片被罚:执法产生荒谬结果
· 和记黄埔进军手机市场 主推200美元3.5G机种
· 携号转网本月恐难试点 运营商拟出"惩罚性"方案
· 51.com推休闲游戏平台 欲挑战业界龙头腾讯
78805
93376
