`

Oracle 11G 闪回技术 使用Oracle闪回查询

阅读更多

使用带有AS OF子句的SELECT语句进行闪回查询。闪回查询获取之前的时间点的数据。

语句通过时间戳或SCN显示地引用过去的时间。返回在那个时间点当时已经提交的数据。

闪回查询的使用包括:

1. 恢复丢失的数据、撤销不正确的且已经提交的改变。例如,如果你错误地删除或更新了行并且提交了,可以立即撤销这个错误。

2. 比较当前的数据和早些时候的数据。例如,可以运行一个日报表,来显示数据从昨天到今天的变化。

可以比较单独的行;也可以查看行集合的交集和并集。

3. 查看事务数据在特定的时间的状态。例如,可以验证某一天的帐户余额。

4. 通过消除存储一些类型的临时数据所需要,简化应用程序的设计。Oracle允许你直接从数据库获取过去的数据。

5. 对过去的数据应用打包的应用,例如报告产生工具。

6. 为应用提供了错误改正的自我服务,允许用户undo和改变他们的错误。

示例A. 检查和还原过去的数据
假设12:30 PM发现员工Chung所对应的数据行被从employees表中删除了。并且你知道在9:30 AM时,Chung的数据在数据库中是正常的。可以使用闪回查询来查看在9:30 AM时表中的内容,来找到丢失的数据。如果需要,可以还原数据。

-- 使用闪回查询获取丢失的行

SELECT*FROM employees

ASOFTIMESTAMP TO_TIMESTAMP('2004-04-04 09:30:00','YYYY-MM-DD HH:MI:SS')

WHERE last_name ='Chung';

 

--使用闪回查询还原丢失的行

INSERTINTO employees (

  SELECT*FROM employees

  ASOFTIMESTAMP TO_TIMESTAMP('2004-04-04 09:30:00','YYYY-MM-DD HH:MI:SS')

  WHERE last_name ='Chung'

);


Oracle闪回查询指导

1. 可以对每个表指定或省略AS OF子句,对不同的表指定不同的次数。

注意:如果一个表是闪回数据归档,并且指定了时间比它创建的时间还要早,则查询会返回0行,而不会引起错误。

2. 可以在查询中使用AS OF子句来执行DDL操作(例如创建和截断表),

也可以用来在和闪回查询相同的会话中执行DML操作(INSERTDELETE)。

3. 在影响数据库当前状态的DDL语句或DML语句中使用闪回查询的结果,

可以在INSERTCREATE TABLE AS SELECT语句中使用AS OF子句。

4. 如果在应用中,这种3秒钟的误差对于闪回查询是重要的,则使用SCN而不是时间戳。

5. 可以使用创建视图引用过的数据,即在视图定义的SELECT语句中使用AS OF子句。

如果指定一个相对时间,即从数据库主机的当前时间减去,则对于每个查询,时间要重新计算。

CREATEVIEW hour_ago AS

  SELECT*FROM employees ASOFTIMESTAMP(SYSTIMESTAMP -INTERVAL'60'MINUTE);

6. 可以在自连接或集合操作中使用AS OF子句,来提取和比较来自于不同时间的数据。

可以通过在闪回查询之前加上CREATE TABLE AS SELECTINSERT INTO TABLE SELECT,来存储闪回查询的结果。

INSERTINTO employees

(SELECT*FROM employees ASOFTIMESTAMP(SYSTIMESTAMP -INTERVAL'60'MINUTE))

MINUS

SELECT*FROM employees);

 

 

 

原文:    http://blog.itpub.net/17013648/viewspace-1167134/

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics