恢復被覆蓋的儲存過程 oracle

bfc99發表於2014-05-04
以下轉自:http://blog.csdn.net/shushugood/article/details/8649447 作者:shushugood

很多時候,儲存過程一不小心就被覆蓋掉了。很焦急的我們,無手可入,不知道如何恢復,google,百度,問同事啊,都沒有辦法解決。

這裡介紹一下恢復的過程,2個步驟就搞定。

 

--登入到sys使用者下,建立臨時表(600表示600秒之前的,最後一個儲存過程)

  1. SQL> create table ML_TEST_PROTEMP  
  2.   2  as  
  3.   3  select * from all_source  as of timestamp (systimestamp -interval'600'second)  
  4.   4  where TYPE = 'PROCEDURE' And owner = 'MOSS_V4'  
  5.   5  And Name = 'SP_DD' ;  
  6.    
  7. Table created  


 

--檢視被覆蓋的儲存過程

  1.   
  1. SQL> select text from ML_TEST_PROTEMP    
  2.   2  where  name like upper('%sp_dd%'and owner ='MOSS_V4'    
  3.   3  order by line;      
  4. TEXT    
  5. --------------------------------------------------------------------------------    
  6. PROCEDURE sp_dd(    
  7.                        i_username1       VARCHAR2,    
  8.                        i_top_username    VARCHAR2 DEFAULT NULL    
  9.                       )    
  10. AS    
  11. BEGIN    
  12.     EXECUTE IMMEDIATE 'ALTER SESSION SET current_schema='||i_top_username;    
  13.     FOR v_cur IN (SELECT * from all_tables WHERE owner=i_top_username  )    
  14.     LOOP    
  15.         BEGIN    
  16.         EXECUTE IMMEDIATE 'GRANT ALL ON ' || i_top_username||'.'||v_cur.table_na    
  17.         EXCEPTION    
  18.         WHEN OTHERS THEN    
  19.           k_log.sp_error('賦權異常:'||v_cur.table_name);    
  20.           RAISE;    
  21.           END;    
  22.     END LOOP;    
  23.     k_log.sp_error('賦權成功');    
  24.      
  25. TEXT    
  26. --------------------------------------------------------------------------------    
  27.     EXCEPTION    
  28.       WHEN OTHERS THEN    
  29.         k_log.sp_error('賦權異常');    
  30.         RAISE;    
  31. END sp_dd;    
  32.      
  33. 25 rows selected    
  34.      
  35. SQL>   


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22207394/viewspace-1153285/,如需轉載,請註明出處,否則將追究法律責任。

相關文章