2010-06-04 12 views
10

我已經創建了一個包含頭文件和一個包含大量代碼的正文的Oracle PL/SQL包。我可以使用較新的代碼替換舊版本的Oracle pl/sql源代碼

後來,我用不同的源代碼(實際上我打算保存在不同的包名下)重新編寫CREATE OR REPLACE PACKAGE BODY...聲明後意外刪除了該代碼。

有沒有什麼辦法可以從包中恢復舊的替換源代碼?

+4

CVS/etc怎麼樣? – 2010-06-04 18:20:35

回答

4

除非您已經啓用日誌記錄/ DDL命令的審計或數據庫的備份,那麼答案是幾乎可以肯定不是

數據庫定義,包括存儲過程,應該始終像對待源代碼,並維持在代碼庫中

+3

源代碼管理是任何和所有代碼必須的,包括數據庫的東西。小增量更改和頻繁簽入是確保順利進行軟件開發的關鍵。 – 2010-06-04 21:10:32

+0

感謝您的意見 - 不幸的是,我很難學會這一點。實際上,當我完成之後,我幾乎可以使用SQL Developer中的「Export DDL」選項保存一份代碼的硬拷貝 - 但是出現了一些問題,我失去了它的蹤跡。無論如何 - 這一集確保我不會再次忘記它。 – VVP 2010-06-04 23:14:57

+0

它發生在我們所有人身上。只有兩種類型的人:那些做備份/使用源代碼管理的人,以及從未有過數據丟失的人 – 2010-06-05 07:54:47

15

您可能可以通過在all_source上使用閃回查詢來將其恢復。

例如我的包體目前是2.0版本,執行這個查詢作爲標準用戶:

SQL> select text 
    2 from all_source 
    3 where name = 'CARPENTERI_TEST' 
    4 and type = 'PACKAGE BODY'; 

TEXT 


package body carpenteri_test 
is 

procedure do_stuff 
is 
begin 
    dbms_output.put_line('version 2'); 
end do_stuff; 

end carpenteri_test; 

10 rows selected. 

我知道我這樣的連接作爲SYSDBA用戶後改變了這一9:30左右今天晚上我跑這個查詢:

SQL> select text 
    2 from all_source 
    3 as of timestamp 
    4 to_timestamp('04-JUN-2010 21:30:00', 'DD-MON-YYYY HH24:MI:SS') 
    5 where name = 'CARPENTERI_TEST' 
    6 and type = 'PACKAGE BODY'; 

TEXT 
---------------------------------------------------------------------------- 

package body carpenteri_test 
is 

procedure do_stuff 
is 
begin 
    dbms_output.put_line('version 1'); 
end do_stuff; 

end carpenteri_test; 

10 rows selected. 

關於閃回的更多信息可以參考here。 Tom Kyte也演示瞭如何使用閃回與all_source here

+0

謝謝 - 我嘗試了第一種一個(沒有時間戳),它給了我最新的代碼。然後我添加了時間戳,並得到「權限不足」的錯誤。將它轉發給可能爲我做的dba。 – VVP 2010-06-04 23:13:06

+0

DBA說「all_source不能用於閃回」。 – VVP 2010-06-07 18:39:14

+0

將您的DBA從Tom Kyte鏈接到此鏈接: http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:6135698985750#13932884772332 – 2010-06-07 18:51:12

相關問題