用flashback恢复存储过程


今天一个朋友问我,删除了一个存储过程是否可以恢复,想了想,恢复存储过程就相当于找到删除过程前SOURCE$表的数据,可以用flashback功能恢复。
下面的测试过程。


首先建立存储过程:
SQL> create or replace procedure p_test is
2 begin
3 null;
4 end p_test;
5 /

Procedure created

SQL> col sysdate format a20
SQL> select sysdate from dual;

SYSDATE
--------------------
2007-7-10 23:50:32

SQL> drop procedure p_test;

Procedure dropped

要恢复存储过程首先需要知道该过程在删除前对应的OBJECT_ID,这个同样也可以用flashback得到。

SQL> SELECT obj# FROM obj$ AS OF TIMESTAMP TO_TIMESTAMP('2007-7-10 23:50:32', 'YYYY-MM-DD HH24:MI:SS') WHERE NAME='P_TEST';

OBJ#
----------
7346

在实际中,为了更精确得到OBJ#,可能还需要限制所属用户等条件。

要恢复过程,时间就是恢复SOURCE$表在过程被删除前的数据,这个用flashback是可以轻松做到的:
SQL> SELECT * FROM source$ AS OF TIMESTAMP TO_TIMESTAMP('2007-7-10 23:50:32', 'YYYY-MM-DD HH24:MI:SS') where obj#=7346 order by line;

OBJ# LINE SOURCE
---------- ---------- --------------------------------------------------------------------------------
7346 1 procedure p_test is
7346 2 begin
7346 3 dbms_lock.sleep(60);
7346 4 Insert Into x Values(1);
7346 5 Commit;
7346 6 end p_test;

6 rows selected

从上面结果可以看到,存储过程已经恢复。
注意:
1、flashback是9i后才引起的,之前版本不能用这个方法恢复
2、从删除到恢复时的时间间隔不能超过undo_retention的设定值

转载出处:http://space6212.itpub.net/post/12157/306512

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值