oracle 11g 闪回技术,ORACLE 11G闪回技术概述2

3.Oracle Flashback Query(SELECT AS

OF)

Example 13–1 retrieves the state of the record for Chung at

9:30AM, April 4, 2004:

Example 13–1 Retrieving a Lost Row with Oracle Flashback

Query

SELECT * FROM employees

AS OF TIMESTAMP

TO_TIMESTAMP('2004-04-04 09:30:00', 'YYYY-MM-DD

HH:MI:SS')

WHERE last_name = 'Chung';

Example 13–2 restores Chung's information to the employees

table:

Example 13–2 Restoring a Lost Row After Oracle Flashback

Query

INSERT INTO employees

(SELECT * FROM employees

AS OF TIMESTAMP

TO_TIMESTAMP('2004-04-04 09:30:00', 'YYYY-MM-DD

HH:MI:SS')

WHERE last_name = 'Chung');

闪回查询可以用到DDL语句中:

CREATE VIEW hour_ago AS

SELECT * FROM employees

AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '60'

MINUTE);

闪回查询也可以用到集合操作符中:

INSERT INTO employees((SELECT *FROM employees AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '60' MINUTE)) MINUSSELECT * FROM employees);

4.Oracle

Flashback Version Query

ORACLE闪回版本查询是用于获取行在一段时间间隔里的不同版本。当每发布一次COMMIT,就产生一个新的行版本。语法:

VERSIONS {BETWEEN {SCN | TIMESTAMP} start

AND end}

下面是闪回版本查询的伪列:

VERSIONS_STARTSCN:行版本创建时的开始SCN,如果为NULL,表示行版本是在START之前创建的。

VERSIONS_STARTTIME:行版本创建时的开始时间戳,如果为NULL,表示行版本是在START之前创建的。

VERSIONS_ENDSCN:行版本期满SCN, 如果为NULL,表示行版本是在查询时是当前的或对应一个DELETE操作

VERSIONS_ENDTIME:行版本期满时间戳,如果为NULL,表示行版本是在查询时是当前的或对应一个DELETE操作

VERSIONS_XID:创建行版本的事务ID

VERSIONS_OPERATION:事务所做的操作:I代表INSERT,D代表DELETE,U代表UPDATE,行版本是INSERT操作之后产生的,在DELETE之前产生的,或行版本是受UPDATE操作的影响而产生的。如果用户更新一个索引键,Oracle

Flashback Version Query会把UPDATE看成是两个操作:DELETE加INSERT,在VERSIONS_OPERATION中会有两行,一个D和一个I。

一个行版本在ERSIONS_START*至VERSIONS_END*(但不包括VERSIONS_END*本身)期间是有效的。也就是说在时间t有效:VERSIONS_START* <= t

< VERSIONS_END*

举个例子:

VERSIONS_START_TIME VERSIONS_END_TIME

SALARY

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

------

09-SEP-2003 25-NOV-2003

10243

行版本SALARY=10243在09-SEP-2003到25-NOV-2003但不包括25-NOV-2003本身(也就是25-NOV-2003 00:00:00之前)期间有效。

Oracle Flashback Version Query的例子:

SELECT versions_startscn,versions_starttime,versions_endscn,versions_endtime,versions_xid,versions_operation,name,salaryFROM employees VERSIONS BETWEEN

TIMESTAMP TO_TIMESTAMP('2003-07-18 14:00:00', 'YYYY-MM-DD HH24:MI:SS')

AND TO_TIMESTAMP('2003-07-18 17:00:00', 'YYYY-MM-DD HH24:MI:SS')WHERE name = 'JOE';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值