ITPub博客

首页 > 数据库 > Oracle > 函数存储过程被误删恢复步骤

函数存储过程被误删恢复步骤

Oracle 作者:yuntui 时间:2016-11-03 20:18:27 0 删除 编辑
刚接到同事一个电话反应10分钟之前误删了一个存储过程,看能不能找回来?


大家都知道存储过程、函数等的源代码都是保存在dba_source里,当drop某个存储过程或函数时,oracle会在源表删除对象对应的记录,
既然知道了是保存的源表,那就好办了啦,闪回查询即可。不过千万要注意查询时间不要距离现在时间过长,否则会因为undo
被覆盖而永远丢失。


dba_source保存的对象类型如下:
PACKAGE
PACKAGE BODY
TYPE BODY
FUNCTION
JAVA SOURCE
PROCEDURE
LIBRARY
TRIGGER
TYPE
以上任一类型的对象都可以通过该方法找回.


找回存储过程SQL:
select text from dba_source as of timestamp to_timestamp('2014-11-25 17:20:00', 'YYYY-MM-DD HH24:MI:SS') 
where owner='DB_T' and name='P_LOAD_001' and type='PROCEDURE' order by line;


以下是找回存储过程详细步骤:
一、查询被删的存储过程文本
SQL> select text from dba_source as of timestamp to_timestamp('2014-11-25 14:00:00', 'YYYY-MM-DD HH24:MI:SS') where owner='DB_T' and name= 'P_LOAD_001' order by line;
select text from dba_source as of timestamp to_timestamp('2014-11-25 14:00:00', 'YYYY-MM-DD HH24:MI:SS') where owner='DB_T' and name= 'P_LOAD_001' order by line
                 *
ERROR at line 1:
ORA-01555: snapshot too old: rollback segment number 35 with name "_SYSSMU35_1925328261$" too small


SQL> select text from dba_source as of timestamp to_timestamp('2014-11-25 17:20:00', 'YYYY-MM-DD HH24:MI:SS') where owner='DB_T' and name= 'P_LOAD_001' order by line;


TEXT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PROCEDURE P_LOAD_001(V_EPARCHY_CODE IN VARCHAR2,
                        V_SETT_MONTH   IN VARCHAR2,
                        V_BACK_ID      OUT NUMBER,
                        V_BACK_MSG     OUT VARCHAR2) IS
.....


273 rows selected.
(保密原则,源代码删除,你懂得!)


2、重新创建就OK了啦。

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

请登录后发表评论 登录
全部评论

注册时间:2015-12-14

  • 博文量
    150
  • 访问量
    70818