2010-06-04 2 views
10

Ich hatte ein Oracle PL/SQL-Paket mit einer Kopfzeile und einem Körper mit viel Code erstellt.Kann ich älteren Oracle pl/sql-Quellcode aus einem Paketkörper wiederherstellen, nachdem ich durch neueren Code ersetzt habe

Später habe ich versehentlich den Code aus diesem Körper gelöscht nach Reran die CREATE OR REPLACE PACKAGE BODY... Anweisung mit anderen Quellcode (die eigentlich wollte ich unter einem anderen Paketnamen speichern).

Gibt es eine Möglichkeit, wie ich meinen älteren ersetzten Quellcode aus dem Paket wiederherstellen kann?

+4

Was ist mit CVS/etc? –

Antwort

4

Es sei denn, Sie haben die Protokollierung/Überwachung von DDL-Befehle aktiviert oder ein Backup der Datenbank, dann ist die Antwort an Sicherheit grenzender Wahrscheinlichkeit nicht

Datenbankdefinitionen, einschließlich Stored Procedures, sollte immer wie Quellcode behandelt und gepflegt in einem Code-Repository

+3

Source Control ist ein Muss für jeden Code, einschließlich DB-Zeug. Kleine inkrementelle Änderungen und häufige Check-ins sind der Schlüssel für eine reibungslose Softwareentwicklung. –

+0

Danke für deine Kommentare - leider habe ich das auf die harte Tour gelernt. Eigentlich hatte ich fast eine Kopie des Codes mit der Option "Export DDL" in SQL Developer gespeichert, als ich fertig war - aber etwas kam heraus und ich verlor den Überblick. Wie auch immer - diese Folge sorgt dafür, dass ich es nicht wieder vergesse. – VVP

+0

Es ist uns allen passiert. Es gibt nur 2 Arten von Menschen: diejenigen, die Backups/verwenden Quellcodeverwaltung, und diejenigen, die noch nie einen Datenverlust –

15

Sie können möglicherweise zurück, indem Sie eine Flashback-Abfrage auf all_source verwenden.

z.B. mein Paket Körper ist derzeit in der Version 2, um diese Abfrage als Standardbenutzer ausführen:

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. 

Ich weiß, dass ich das heute abend um 09.30 Uhr geändert, so, nachdem er als SYSDBA Benutzer verbinden lief ich diese Anfrage:

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. 

Weitere Informationen zum Thema Rückblende finden Sie unter here. Tom Kyte zeigt auch, wie man Flashback mit all_source here verwendet.

+0

Danke - Ich habe das erste Mal versucht eins (ohne Zeitstempel) und es gab mir den neuesten Code. Dann habe ich den Zeitstempel hinzugefügt und Fehler "unzureichende Berechtigungen" erhalten. Wird es an die dba weiterleiten, die es vielleicht für mich tun kann. – VVP

+0

Der DBA sagt, dass "all_source nicht mit Flashback verwendbar ist". – VVP

+0

zeigen Sie Ihren DBA zu diesem Link von Tom Kyte: http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:6135698985750#13932884772332 –

Verwandte Themen