oracleFlashback详解.doc

上传人:仙人指路1688 文档编号:2394945 上传时间:2023-02-17 格式:DOC 页数:12 大小:51KB
返回 下载 相关 举报
oracleFlashback详解.doc_第1页
第1页 / 共12页
oracleFlashback详解.doc_第2页
第2页 / 共12页
oracleFlashback详解.doc_第3页
第3页 / 共12页
oracleFlashback详解.doc_第4页
第4页 / 共12页
oracleFlashback详解.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《oracleFlashback详解.doc》由会员分享,可在线阅读,更多相关《oracleFlashback详解.doc(12页珍藏版)》请在三一办公上搜索。

1、oracle Flashback详解 分类: RDBMS 2011-01-25 17:05 430人阅读 评论(0) 收藏 举报 使用oracle数据库时,难免会碰到一些问题.例:1.如何回滚已经commit了的数据 2.如何查询已经被覆盖掉的数据update,或者被delete了的数据 3.如何将数据恢复到某个时间点 我们就可以使用Flashback相关语句解决相关问题了关于Flashback回闪:从9i到10g到最新的11.2g,oracle对Flashback功能进行了进一步的扩展,利用Flashback我们可做到1.flashback query闪回查询,并不实际修改表的数据2.fla

2、shback table闪回表格,可恢复表格的数据 3.flash database闪回数据库,可恢复db的数据:关于Flashback Query: 1.Flash Query通过undo数据表空间数据,利用一致性的方法来查找用户需要的数据 2.作用范围:查找指定时间点被(delete,update)的数据 只是做查找操作,如果设计恢复那么就要使用flashback table了 3.相关参数: 1.查询出来的数据存活时间受 undo_retention(默认为900秒)影响目标值,该变量(秒)可以影响undo表空间产生的data存活时间,时间一到,即死亡(消失) 2.闪回时间受undo表空

3、间大小影响 关于undo表空间的操作,另一片文章会有讲解 3.查询的仅仅是快照,并不能修改当前状态 4.基本语法两种方式,使用时间片或scn号 使用时间片的情况比较多 1.select* from 你要查询表的名字 as of timestamp 查询某一时间该表的数据 2.select* from 你要查询表的名字 as of scn具体scn号 关于scn号,另一篇文章会讲解 4.原理: 简单的说就是将以前被修改,删除了的数据,通过开启Flashback 模式,回到我们需要回到的时间来查看数据, 在undo_retention该变量设置的时间过后,该镜像数据会自动被清除.相当于查看的是一个

4、镜像数据.一种方式是利用scn号来查看镜像数据,另一种是通过查找时间片来查询镜像数据 案例1:-创建测试flashQuery表格 主要由scn号和系统日期组成 create table testQuery( id number, scn number, time varchar2(20), mydate varchar2(20) );-插入测试数据begin for i in 1.16 loop insert into testQuery values(i,dbms_flashback.get_system_change_number(),to_char (sysdate,yyyy-mm-dd

5、 hh24:mi:ss),你好|i); -插入scn号和sysdate为方便后续查询 commit; -如果不实时commit,那么会在循环完后,批量提交,时间点是一样的 dbms_lock.sleep(2); -使用dbms_lock.sleep 方法和java的thread睡眠是一个意思 参数以秒为单位 end loop;end;-查询未修改的数据 result:133035522011-01-25 11:51:33你好1 233035562011-01-25 11:51:35你好2 333035582011-01-25 11:51:37你好3 433035602011-01-25 11:

6、51:39你好4 533035622011-01-25 11:51:41你好5 633035642011-01-25 11:51:43你好6 733035662011-01-25 11:51:45你好7 833035682011-01-25 11:51:47你好8 933035702011-01-25 11:51:49你好9 1033035722011-01-25 11:51:51你好10 1133035742011-01-25 11:51:53你好111233035762011-01-25 11:51:55你好12 1333035782011-01-25 11:51:57你好13 14330

7、35802011-01-25 11:51:59你好14 1533035822011-01-25 11:52:01你好15 1633035842011-01-25 11:52:03你好16-查询最新的scn号类似于check point,该scn号在每次commit时,都会自动变化使用scn号来开启Flashback Query模式 select dbms_flashback.get_system_change_number from dual;result:3307628-该scn号可以理解成为一个check point点.我们可以借助这个标记来回退到该scn号查询当前的数据-修改第十条,和第

8、十一条的数据:update testQuery tq set tq.mydate=新年快乐 where scn=3303572;commit; update testQuery tq set tq.mydate=万事如意 where scn=3303574;commit;select * from testQueryresult:133035522011-01-25 11:51:33你好1 233035562011-01-25 11:51:35你好2 333035582011-01-25 11:51:37你好3 433035602011-01-25 11:51:39你好4 5330356220

9、11-01-25 11:51:41你好5 633035642011-01-25 11:51:43你好6 733035662011-01-25 11:51:45你好7 833035682011-01-25 11:51:47你好8 933035702011-01-25 11:51:49你好9 1033035722011-01-25 11:51:51新年快乐1133035742011-01-25 11:51:53万事如意1233035762011-01-25 11:51:55你好12 1333035782011-01-25 11:51:57你好13 1433035802011-01-25 11:51

10、:59你好14 1533035822011-01-25 11:52:01你好15 1633035842011-01-25 11:52:03你好16-使用scn号来进行闪回查询 1.不开启Flashback模式,仅使用Flashback query语句做查询select * from testQuery as of scn 3307628result:133035522011-01-25 11:51:33你好1 233035562011-01-25 11:51:35你好2 333035582011-01-25 11:51:37你好3 433035602011-01-25 11:51:39你好4

11、533035622011-01-25 11:51:41你好5 633035642011-01-25 11:51:43你好6 733035662011-01-25 11:51:45你好7 833035682011-01-25 11:51:47你好8 933035702011-01-25 11:51:49你好9 1033035722011-01-25 11:51:51你好10 1133035742011-01-25 11:51:53你好111233035762011-01-25 11:51:55你好12 1333035782011-01-25 11:51:57你好13 1433035802011-

12、01-25 11:51:59你好14 1533035822011-01-25 11:52:01你好15 1633035842011-01-25 11:52:03你好16 2.开启Flashback模式做查询,整个db将会产生某个scn号所在时间点的镜像数据. 使用dbms包开启Flashback模式:exec DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(3307628); 现在查看表的数据:select * from testQuery as of scn 3307628;result:133035522011-01-25 11:51:33你好1

13、 233035562011-01-25 11:51:35你好2 333035582011-01-25 11:51:37你好3 433035602011-01-25 11:51:39你好4 533035622011-01-25 11:51:41你好5 633035642011-01-25 11:51:43你好6 733035662011-01-25 11:51:45你好7 833035682011-01-25 11:51:47你好8 933035702011-01-25 11:51:49你好9 1033035722011-01-25 11:51:51你好10 1133035742011-01-2

14、5 11:51:53你好111233035762011-01-25 11:51:55你好12 1333035782011-01-25 11:51:57你好13 1433035802011-01-25 11:51:59你好14 1533035822011-01-25 11:52:01你好15 1633035842011-01-25 11:52:03你好16注:此时整个DB为镜像数据. 如果单独再开启个链接,那么看到的还是真实数据而不是镜像数据; 如果中途要退出Flashback模式请使用:exec DBMS_FLASHBACK.DISABLE;退出Flashback 模式:exec DBMS_F

15、LASHBACK.DISABLE;select * from testQueryresult:133035522011-01-25 11:51:33你好1 233035562011-01-25 11:51:35你好2 333035582011-01-25 11:51:37你好3 433035602011-01-25 11:51:39你好4 533035622011-01-25 11:51:41你好5 633035642011-01-25 11:51:43你好6 733035662011-01-25 11:51:45你好7 833035682011-01-25 11:51:47你好8 93303

16、5702011-01-25 11:51:49你好9 1033035722011-01-25 11:51:51新年快乐1133035742011-01-25 11:51:53万事如意1233035762011-01-25 11:51:55你好12 1333035782011-01-25 11:51:57你好13 1433035802011-01-25 11:51:59你好14 1533035822011-01-25 11:52:01你好15 1633035842011-01-25 11:52:03你好16 以上就是使用scn号来做闪回查询了;-使用时间点来进行闪回查询 select * from

17、 testQuery as of timestamp to_timestamp(2011-01-25 13:25:55,yyyy-mm-dd hh24:mi:ss); 做此查询要确保没有对原有表结构进行修改,如果有的话可能引发异常;select * from testQuery;result:133035522011-01-25 11:51:33你好1 233035562011-01-25 11:51:35你好2 333035582011-01-25 11:51:37你好3 433035602011-01-25 11:51:39你好4 533035622011-01-25 11:51:41你好

18、5 633035642011-01-25 11:51:43你好6 733035662011-01-25 11:51:45你好7 833035682011-01-25 11:51:47你好8 933035702011-01-25 11:51:49你好9 1033035722011-01-25 11:51:51你好10 1133035742011-01-25 11:51:53你好111233035762011-01-25 11:51:55你好12 1333035782011-01-25 11:51:57你好13 1433035802011-01-25 11:51:59你好14 1533035822

19、011-01-25 11:52:01你好15 1633035842011-01-25 11:52:03你好16关于scn号和这个timeStamp的转换这个可能会出问题(undo表空间过小,无法查询到过早的数据) scntimeStamp: select SCN_TO_TIMESTAMP(SCN号) as ts from dual; timeStampscnselect TIMESTAMP_TO_SCN(25-1月-11 01.05.29.046000 下午) from dual;:关于Flashback Table: 1.闪回表格,可将表格的数据闪回到某个时间点 2.需要开启行移动模式 en

20、able row movement 3.原理:Flashback Table也是利用Undo数据来恢复对象到指定时间点 4.使用范围:恢复当前表及其相关对象到某个时间点5.注意点: 1).闪回时间受参数undo_retention影响 2).闪回时间受undo表空间大小影响 3).和flashback query有差别,恢复表到以前的时间点 真实闪回,而不是镜像 6.语法: 1).flashback table table_name to timestamp . 根据时间点闪回 2).flash table table_name to scn . 根据scn号回退,实际操作基本上不会用到3).

21、flashback table table_name to timestamp . enable triggers. 创建表,开启行移动模式,用的不多 4).flashback table testFlashTable to TIMESTAMP systimestamp - interval 5 minute; 回退到几分钟之前,用的多例:将第一条数据更新,然后进行闪回表格,得到我们以前的数据;创建新的表格测试:create table testFlashTable( id number, mydata varchar2(60);插入测试数据:insert into testFlashTabl

22、e values(1,一帆风顺);commit;select * from testQuery;result:1 一帆风顺-等待5分钟-让scn号飞一会,不然可能会出错删除数据:delete from testFlashTable;commit; select * from testQuery;result:无;开启行移动模式:alter table testFlashTable enable row movement;使用flashBack:这种方法用的比较多,不小心删除了,马上就可以闪回闪回到5分钟以前flashback table testFlashTable to TIMESTAMP

23、systimestamp - interval 5 minute;或者: 闪回到时间点flashback table t to timestamp to_timestamp(2011-01-26 11:35:40,yyyy-mm-dd hh24:mi:ss);:关于Flashback Database: 1.闪回DB,可将数据库闪回到某个时间点需要事先配置,让oracle处于Flashback 状态 在真实环境中使用Flashback Database的场景是较少的,更多的是使用rman技术来做恢复还原 需要单独开启后台进程Recover WriterRVWR,会额外增大oracle的开销 这里就不对其做描述了.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号