数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
9i新特性之Flashback Query的应用-------------针对DML误操作的恢复(1)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

 

9i新特性之Flashback Query的应用-------------针对DML误操作的恢复

 

作者:刘颖博

时间:2003-12-29

mail[email protected],请指正

 

转载请注明出处及作者

 

9i之前,如果出现DML的误操作,只能通过备份来完成基于时间点的恢复,9i给提供了一个新的特性Flashback Query,我们可以应用此特性,可以很方便的实现恢复。但是要注意的是,Flashback Query 仅仅是一个查询的机制,不会真正的UNDO任何数据。

 

1.       什么是Flashback Query

利用Oracle 多版本读一致的特性通过undo 来提供所需的前镜像中的数据。通过这个功能,可以看到历史数据,甚至用历史数据来修复误操作引起的错误。可以通过指定时间或者SCN 来检索需要的数据。Uses Oracle's multiversion read-consistency capabilities to restore data by applying undo as needed. You can view and repair historical data, and you can perform queries on the database as of a certain wall clock time or user-specified system commit number (SCN).

可以理解成,Oracle在之前的版本中就已经存在了Flashback Query了,之前我们把它称为多版本的读一致性。(多版本特性提供跨多个用户会话的一致性视图,Oracle不执行dirty read

2.       准备工作

the best way:数据库处于Automatic Undo Management 状态(也有文章说必须,我查找了oracle文档应用了这个词Prerequisite<先决条件>,同时在AskTom上我也查找到相应的解释,指明最好是自动Undo管理,手动的Undo管理也是可以的,并且有例子)

最大可以闪回查询的时间段由UNDO_RETENTION 初始化参数(单位为秒)指定,参看下面执行命令

SQL> show parameter undo

 

NAME                              TYPE        VALUE

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

undo_management                    string      AUTO

undo_retention                       integer     600

undo_suppress_errors                 boolean     FALSE

undo_tablespace                      string      UNDOTBS1

SQL>

这是一个可以动态的修改的参数,可以通过ALTER SYSTEM SET UNDO_RETENTION =<seconds>;来修改参数值

比较显然的是,你设置了相对大的UNDO_RETENTION,就必须设置足够大的UNDO ROLLBACK SEGMENTS。

3.    如何使用Flashback Query

我们可以通过两种方式来使用Flashback Query:

SQL

使用SELECT 语句的AS OF 来进行闪回查询,语法如下:

as of  scn ( timestamp) expr

 

通过关键词 AS OF 可以对表,视图,物化视图 进行Flashback Query,可以制定SCN或者TIMESTAMP,其中TIMESTAMP9i中出现的,可以有毫秒的时间单位,如

SQL> select systimestamp from dual;

 

SYSTIMESTAMP

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

29-12-03 10.15.05.171000 下午 +08:00

 

下面,进行一个例子:

SQL> connect scott/tiger

已连接。

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

 

表已创建。

 

SQL> insert into test values (1);

 

已创建 1 行。

 

SQL> insert into test values (2);

 

已创建 1 行。

 

SQL> commit;

 

提交完成。

 

SQL> select * from test;

 

        ID

----------

         1

         2

 

SQL> delete from test where id=1;

 

已删除 1 行。

 

SQL> commit;

 

提交完成。

SQL> select * from test;

 

        ID

----------

         2

SQL> select * from test as of timestamp (systimestamp -interval'10'second);

 

        ID

----------

         1

         2

SQL> insert into test (select * from test as of timestamp (systimestamp -interva

l'10'second) where id =1);

 

已创建 1 行。

 

SQL> commit;

 

提交完成。

 

SQL> select * from test;

 

        ID

----------

         2

         1

现在,利用了Flashback Query 我们恢复了test表中被误删除的记录。当然我们可以通过一些其他的方法,类似于建立一个中间表等,进行这种少量数据的DML误操作的恢复.




 




相关文章

相关软件