=====Oracle PL/SQL - Den Source Code eines überschriebenen Packages mit Flashback wieder herstellen=====
**Problem: **
Falsche Version eines Packages aus dem Git Repository eingespielt und damit die Änderung des Kollegen überschrieben. Dieser hatte den Code aus der DB noch nicht in das Repository übertragen.
**Lösung:**
Oracle speichert den Source Code der PL/SQL Objekte in der Tabelle **sys.source$** mit der Object ID als Schlüssel.
Mit einer Flashback Query ( as of timestamp ) kann mit etwas Glück der alten Datenbestand jeder Tabelle aus den Rollback Segmenten gelesen werden.
Im ersten Schritt die Object ID des betroffenen Packages ermitteln:
sqlplus / as sysdba
select object_id , object_type, object_name,owner
from dba_objects
where object_name='&CHANGED_PLSQL_OBJ'
/
Mit der ermittelten ID kann nun über die **sys.source$** die alte Version des Packages ausgelesen und in eine Datei gespoolt werden
set pagesize 0 linesize 240 newpage 0 space 0
set echo off
set verify off
set feedback off
set heading off
spool export_code.sql
select SOURCE
from sys.source$
as of timestamp to_timestamp('03.07.2019 12:00:00','DD.MM.YYYY hh24:MI:SS')
where obj#=&MY_OBJ_ID ;
spool off
set feedback on
set heading on
set echo on
set verify on
Mehr zu Flashback Database siehe [[dba:flashback|Flashback aktivieren und verwenden]]
----
==== Quellen ====
Oracle: Using Oracle Flashback Query (SELECT AS OF)
* https://docs.oracle.com/cd/E11882_01/appdev.112/e41502/adfns_flashback.htm#ADFNS01003
Web:
* https://www.oracle-scripts.net/flashback-procedure-function-package/