ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 闪回查询恢复过程

闪回查询恢复过程

原创 Linux操作系统 作者:yangtingkun 时间:2009-07-07 22:53:10 0 删除 编辑

今天在ITPUB上有人问如何恢复误删除的一个过程,如果通过备份来进行恢复不但代价大,而且恢复速度慢,其实用闪回查询就可以恢复。

 

 

看一个简单的例子:

SQL> SELECT TEXT             
  2  FROM DBA_SOURCE
  3  WHERE WNER = 'YANGTK'
  4  AND NAME = 'P_TEST';

TEXT
-----------------------------------------------------------------------------------------
PROCEDURE P_TEST AS
BEGIN
 INSERT INTO T VALUES (1, 'A');
 COMMIT;
END;

SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

Session altered.

SQL> SELECT SYSDATE FROM DUAL;

SYSDATE
-------------------
2009-07-07 17:28:07

SQL> SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;

GET_SYSTEM_CHANGE_NUMBER
------------------------
              6258680436

SQL> CONN YANGTK/YANGTK
Connected.
SQL> CREATE OR REPLACE PROCEDURE P_TEST AS
  2  BEGIN
  3  NULL;
  4  END;
  5  /

Procedure created.

SQL> CONN / AS SYSDBA
Connected.
SQL> SELECT TEXT        
  2  FROM DBA_SOURCE
  3  WHERE NAME = 'P_TEST'
  4  AND WNER = 'YANGTK'
  5  ORDER BY LINE;

TEXT
----------------------------------------------------------------------------------------
PROCEDURE P_TEST AS
BEGIN
NULL;
END;

SQL> SELECT TEXT
  2  FROM DBA_SOURCE AS OF SCN 6258680436
  3  WHERE NAME = 'P_TEST'
  4  AND WNER = 'YANGTK'
  5  ORDER BY LINE;

TEXT
----------------------------------------------------------------------------------------
PROCEDURE P_TEST AS
BEGIN
 INSERT INTO T VALUES (1, 'A');
 COMMIT;
END;

SQL> SELECT TEXT  
  2  FROM DBA_SOURCE AS OF TIMESTAMP (TO_TIMESTAMP ('2009-07-07 17:28:07', 'YYYY-MM-DD HH24:MI:SS'))
  3  WHERE NAME = 'P_TEST'
  4  AND WNER = 'YANGTK'
  5  ORDER BY LINE;

TEXT
---------------------------------------------------------------------------------------
PROCEDURE P_TEST AS
BEGIN
 INSERT INTO T VALUES (1, 'A');
 COMMIT;
END;

SQL> SELECT * FROM V$VERSION;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE    10.2.0.3.0      Production
TNS for Linux: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production

在10.2和9.2版本上,是可以用这个方法来恢复过程、函数、包和触发器的。

也许有人有这样的疑问,闪回查询是不支持DDL的。闪回查询确实不支持DDL,如果查询的表执行了DDL,则不能闪回查询DDL以前的表的数据。而CREATE OR REPLACE或DROP PRCOEDURE也确实是DDL语句。但是过程的创建虽然是DDL,实际上是对后台数据字典表做的DML修改,而这些数据字典表是可以闪回查询的。

最后提一句,DBA、ALL、USER开头的视图由于基表是CLUSTER表,因此可以执行闪回查询,而V$、GV$开头的动态性能视图所依赖的并不是真正的数据库中的表,而是Oracle通过C程序实现的伪表,因此这些视图无法利用闪回查询的功能。

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-608556/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1964
  • 访问量
    11077339