2016-10-21 5 views
-1

Ich habe eine Webanwendung und ich bezweifle, dass einige andere Datensätze manuell gelöscht haben. Auf Nachfrage gibt niemand die Fehler zu. Wie finde ich heraus, zu welcher Zeit diese Datensätze gelöscht wurden? Ist es möglich, die Historie von Löschabfragen zu erhalten?Wie bekomme ich die neuesten Abfragen in Oracle DB

+1

Sie wollen würde Log Miner verwenden, um durch die archivierten Protokolle zu gehen, um die Delete-Anweisungen zu finden, die Sie interessiert sind. Das kann sehr zeitaufwendig sein, wenn Sie nicht sicher sind, wenn die Löschen ist passiert. Es ist möglich, dass sie immer noch in v $ sql zwischengespeichert werden, aber das ist nicht sicher. Und wenn die Abfragen keine Literale verwenden, würden Sie die Bindungswerte, die bei der Ausführung der Abfragen verwendet wurden, nicht kennen. –

Antwort

3

Wenn Sie Zugriff auf v $ view haben, können Sie die folgende Abfrage verwenden, um es zu erhalten. Es enthält die Uhrzeit als Spalte FIRST_LOAD_TIME.

select * 
from v$sql v 
where upper(sql_text) like '%DELETE%'; 
1

Wenn Rückblende Abfrage für die Datenbank aktiviert ist (versuchen Sie es mit select * from table as of timestamp sysdate - 1), dann kann es möglich sein, die genaue Zeit zu bestimmen, die Datensätze gelöscht wurden. Verwenden Sie die Klausel as of timestamp, und passen Sie den Zeitstempel nach Bedarf an, um auf ein Fenster zu schließen, in dem die Datensätze noch vorhanden und nicht mehr vorhanden waren.

Zum Beispiel

select * 
from table 
as of timestamp to_date('21102016 09:00:00', 'DDMMYYYY HH24:MI:SS') 
where id = XXX; -- indicates record still exists 

select * 
from table 
as of timestamp to_date('21102016 09:00:10', 'DDMMYYYY HH24:MI:SS') 
where id = XXX; -- indicates record does not exist 

-- conclusion: record was deleted in this 10 second window 
Verwandte Themen