Dieser Artikel bringt Ihnen relevantes Wissen über Oracle, in dem vor allem die damit verbundenen Probleme beim versehentlichen Löschen von Daten in der Oracle-Datenbank vorgestellt werden und wie Sie die Daten schnell wiederherstellen können, ohne die vollständige Datenbanksicherung und Archivprotokollauslastung zu berücksichtigen Wenn ich es zusammenstelle, hoffe ich, dass es für alle hilfreich sein wird.
Empfohlenes Tutorial: „Oracle-Video-Tutorial“
Wie kann ich die Daten in der Oracle-Datenbank schnell wiederherstellen, ohne die vollständige Datenbanksicherung und Archivprotokollauslastung zu berücksichtigen?
Hier sind 3 Methoden.
Ermitteln Sie zunächst den Zeitpunkt der gelöschten Daten:
select * from v$sql where sql_text like '%table_name%' ; 1
Entsprechend dem Inhalt von sql_textcode> Suchen Sie im Ergebnis nach <code>delete
. Führen Sie den sql_text
内容,找到delete
执行语句对应的删除时间点,执行下面语句查询出删除的数据。
select * from table_name as of timestamp to_timestamp(‘删除时间点’,‘yyyy-mm-dd hh24:mi:ss’) where (删除时的条件) 12
检查数据无误后,执行下面操作,将数据插回原表中。注意主键不重复
insert into table_name select * from from table_name as of timestamp to_timestamp(‘删除时间点’,‘yyyy-mm-dd hh24:mi:ss’) where (删除时的条件) 123
原理是因为oracle数据库在删除表时会将删除信息存放于某虚拟回收站中而非直接清空,在此种状态下数据库标记该表的数据库为可以复写,所以在该块未被重新使用前依然可以恢复数据。该方法多用于drop删除。
首先查询user_table
视图,找到被删除的表:
select table_name,dropped from user_tables; select object_name,original_name,type,droptime from user_recyclebin; 12
注意此时的,object_name
和original_name
就是回收站存放的表名和原来删除的表名,如果表名没有被重新命名,可以通过下面语句进行恢复:
flashback table original_name to before drop; 1
如果不知道源表名,或者需要重新命名新的表名存放数据,则可以通过回收站中的object_name
进行恢复,命令如下:
flashback table object_name to before drop new_table_name; 1
注意,此时是整库恢复,具体语法如下:
SQL>alter database flashback on SQL>flashback database to scn SCNNO; SQL>flashback database to timestamp to_timestamp(‘frombyte 2021-09-02 23:59:59’,‘yyyy-mm-dd hh24:mi:ss’); 123
如果确定需要删除的数据又不想无谓的占用空间,我们可以使用以下3种方式:
drop table table_name purge
recyclebin
区域来永久性删除表 ,drop table table_name cascade constraints purge table table_name;
删除当前用户回收站
purge recyclebin;
删除全体用户在回收站的数据
purge dba_recyclebin;
Löschzeitpunkt
Achten Sie darauf, dass der Primärschlüssel nicht wiederholt wird virtueller Papierkorb, anstatt ihn hier direkt zu leeren. In diesem Zustand markiert die Datenbank die Tabelle als
kann überschrieben werden
user_table
ab, um die gelöschte Tabelle zu finden: 🎜rrreee🎜Beachten Sie, dass zu diesem Zeitpunkt object_name
und original_name
gespeichert sind Der Papierkorb Der Tabellenname und der ursprünglich gelöschte Tabellenname. Wenn der Tabellenname nicht umbenannt wurde, können Sie ihn mit der folgenden Anweisung wiederherstellen: 🎜rrreee🎜Wenn Sie den Quelltabellennamen nicht kennen oder ihn umbenennen müssen Neuer Tabellenname zum Speichern der Daten. Sie können den Papierkorb object_name
in object_name
zum Wiederherstellen verwenden. Der Befehl lautet wie folgt: 🎜rrreee🎜🎜3 Verwenden Sie die Flashback-Funktion der Oracle-Datenbank, um die Datenbank auf einen bestimmten Zustand in der Vergangenheit wiederherzustellen🎜🎜🎜Beachten Sie, dass es sich um eine 🎜Gesamtdatenbankwiederherstellung🎜 handelt. Die spezifische Syntax lautet wie folgt: 🎜rrreee🎜🎜4. Daten vollständig löschen 🎜🎜🎜Wenn Sie sicher sind Damit die Daten gelöscht werden müssen und keinen unnötigen Speicherplatz belegen, können wir die folgenden drei Methoden verwenden: 🎜drop table table_name purge
🎜recyclebin
löschen. drop table table_name Cascade Constraints purge table table_name;
🎜🎜🎜🎜5. Informationen zum Leeren des Papierkorbs🎜🎜purge recyclebin; 🎜🎜<li>🎜Alle Benutzerdaten im Papierkorb löschen🎜🎜<code>purge dba_recyclebin;
🎜🎜🎜🎜Empfohlenes Tutorial: „🎜Oracle Video Tutorial🎜“🎜🎜Das obige ist der detaillierte Inhalt vonDrei Methoden zur schnellen Wiederherstellung versehentlich gelöschter Oracle-Datenbanken. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!