Oracle 9i中的一个闪回查询操作实例

在利用闪回功能前需要确认:

1、用户有对dbms_flashback包有执行权限!

2、进行闪回查询必须设置自动回滚段管理,在init.ora设置参数UNDO_MANAGEMENT=AUTO,参数UNDO_RETENTION=n,决定了能往前闪回的最大时间,值越大就需要越多Undo空间。

Oracle 9i中闪回查询操作实例

查看Oracle中Delete和Commit操作的流程分析

例:Oracle 9i的Flashback Query操作。

(1)创建闪回查询用户

SQL> create user test identified by test;

SQL> grant connect, resource to test;

SQL> grant execute on dbms_flashback to test;

SQL> connect test/test;

(2)创建测试表,插入测试记录

SQL> create table test(id number(3));

SQL> insert into test values(1);

SQL> insert into test values(2);

SQL> commit;

注意:在执行步骤3或者步骤4之前,等待5分钟。

(3)删除记录

SQL> delete from test where id=1;

SQL> commit;

通过以上的操作,我们插入了两条记录,并删除了其中一条记录。在以下的操作中,我们将通过flashback query找到删除的记录

(4)闪回查询(分别通过timestamp和scn查询)

SQL> select * from test as of timestamp sysdate - 5/1440;

ID

----

1

2

SQL> select * from test as of scn 8173800;

ID

----

1

2

可以看出,虽然删除记录并提交,但是通过闪回操作,仍能查询到删除前的两条记录。需要注意Oracle每5分钟记录一次SCN到SMON_SCN_TIME,并将SCN和对应时间的映射进行纪录。如果原来插入的记录到做闪回操作的时间在5分钟之内,用基于时间的闪回查询可能得不到记录,因为基于时间点的查询实际上是转化为最近的一次SCN,然后从这个SCN开始进行恢复。因此,如果需要精确的查询可以采用基于SCN的闪回查询,可精确闪回到需要恢复的时间。可以通过DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER语句获取SCN。

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

时间: 2024-10-02 18:14:07

Oracle 9i中的一个闪回查询操作实例的相关文章

Oracle 10g中的闪回查询操作实例

与Oracle 9i相比Oracle 10g的Flashback有了非常大的改进,在Orcle 10g之前,SMON_SCN_TIME由SMON来获取和记录信息的,每5分钟记录一次,从Oracle 10g开始,LGWR首先会在SGA中记录SCN与时间的映射关系(由于LGWR至少每3秒就会被激活一次,所以现在SMON_SCN_TIME能够支持大于3秒的闪回),SMON则定期检查SGA是否内存中的映射大于磁盘上的,如果有就刷新纪录到磁盘, 而且从普通的Flashback Query发展到了多种形式,

Mybatis中的resultType和resultMap查询操作实例详解_java

resultType和resultMap只能有一个成立,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,resultMap解决复杂查询是的映射问题.比如:列名和对象属性名不一致时可以使用resultMap来配置:还有查询的对象中包含其他的对象等. MyBatisConfig.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configura

oracle 9i使用闪回查询恢复数据库误删问题_oracle

如果用户误删/更新了数据后,作为用户并没有什么直接的方法来进行恢复,他们必须求助DBA来对数据库进行恢复,到了Oracle9i,这一个难堪局面有所改善.Oracle 9i中提供了一项新的技术手段--闪回查询,用户使用闪回查询可以及时取得误操作前的数据,并可以针对错误进行相应的恢复措施,而这一切都无需DBA干预. 因为一时手贱,生产上的数据被我给delete掉了. 用的是delete语句,然后很迅速的还给commit了 下面这两个语句: ALTER TABLE tablename ENABLE r

Oracle Database 10g:最佳新特性(第一周:闪回查询)

oracle 第一周:闪回查询 得到电影而不是图片:闪回版本查询 不需要设置,立即识别对行的所有更改 在 Oracle9i Database 中,我们看到它推出了以闪回查询形式表示的"时间机器".该特性允许 DBA 看到特定时间的列值,只要在还原段中提供该数据块此前镜像的拷贝即可.但是,闪回查询只提供某时刻数据的固定快照,而不是在两个时间点之间被更改数据的运行状态表示.某些应用程序,如涉及到外币管理的应用程序,可能需要了解一段时期内数值数据的变化,而不仅仅是两个时间点的数值.由于闪回版

oracle中关于flashback闪回的介绍

1.必须设定undo保留时间足够大以能够重构需要闪回的数据 ALTER SYSTEM SET UNDO_RETENTION=; seconds值是undo数据保持的秒数. Flashback view是由undo retention interval来限制的. 2.包DBMS_FLASHBACK提供了需求接口 call dbms_flashback.enable_at_time('2010-10-19:11:00:00'); call dbms_flashback.disable(); ----

巧用闪回查询来分析事务延迟的问题

   前段时间有个开发的同事向我咨询一个问题,     开发同事:Oracle会存在一个用户插入数据,已经提交了:但是另外一个用户还查询不到吗?都是同一张表     jeanron:   不会的.     开发同事: 我们现在一个用户写入,程序日志是说已经写入:可是读取的用户还读取不到,在线延迟5分钟可能的问题在哪儿?或者你帮忙监控一下?     jeanron:   是Oracle吗,MySQL还可能有这种情况     开发同事: Oracle,MySQL是什么情况下会这样?     jean

使用闪回查询备份数据

今天在生产环境中,开发人员提交了一个脚本,是做update操作的,但是update操作的时候过滤条件有些大,本来预计修改的数据只有5000条,结果这个语句运行下来更改了500万条数据.对生产系统来说算是一个数据灾难,赶紧和开发确认了问题发生的时间,结果说是在半夜11点多,刚好在后半夜才开始做数据备份,这样这个变更也同时影响了备份,就算做紧急的数据恢复也是没有任何效果的.目前采用的备份都是全量的按天备份,备份收到影响,恢复还是比较困难的. 这个问题就在紧急的讨论中分为了两个步骤,我来尝试恢复昨天备

两种闪回查询的使用实验

SQL>select * from test; 1 2 一.按照SCN进行恢复 SQL>select * from sys.smon_scn_time order by time_dp desc; 30970780 scn 与时间的对应关系:每隔5分钟,系统产生一次系统时间标记与scn的匹配并存入sys.smon_scn_time表 SQL>delete from test; SQL>select * from test as of scn 30970780 1 2 可以看到在这个

oracle 可以做闪回的操作有哪些

问题描述 请问下ORACLE可以做闪回的操作有哪些? 解决方案 闪回数据库闪回表(一种是删除表,一种是执行了错误的操作)闪回查询