Über das FLASHBACK-Konzept und seine Anwendung haben wir Sie bereits in früheren Tipps ausführlich informiert. Hier und jetzt soll Ihnen noch eine weitere Möglichkeit vorgestellt werden, die bislang noch gar nicht erwähnt wurde und ab Version 10.2 verfügbar ist: RESTORE POINTS.
Basierend auf der SAVEPOINT-Funktionalität haben Sie nun die Möglichkeit für einzelne Tabellen oder für die gesamte Datenbank die Uhr zurückzustellen. Durch das Erzeugen eines Restore Points definiert man sich einen (Zeit-)Punkt („Bookmark“), auf den - auch nach einem COMMIT oder einem Neustart der Instanz - zurückgesetzt werden kann, um damit fehlerhafte Anweisungen zurückzurollen. Dies bietet sich an z.B. vor dem Einspielen von Upgrade- oder umfangreichen Batch-Skripten.
Restore Points werden unter ihrem Namen in den Controldateien in Verbindung mit einer bestimmten Zeit bzw. SCN abgespeichert. Beim Zurücksetzen einer Tabelle oder der Datenbank dient der Name des Restore Points als Aufsatzpunkt. Es werden zwei Arten von Restore Points unterschieden:
1) Normale Restore Points
Der SPFILE-Parameter db_flashback_retention_target gibt an, wie weit die Datenbank zurückgesetzt werden kann. Wenn die maximale Anzahl (2048) an Restore Points erreicht worden ist, wird der älteste automatisch gelöscht. Ein FLASHBACK DATABASE … TO RESTORE POINT-Kommando ist nur bei aktiviertem FLASHBACK-Feature zulässig.
2) Garantierte Restore Points
Garantierte Restore Points sind unabhängig vom Parameter db_flashback_retention_target und müssen manuell gelöscht werden. Ein FLASHBACK DATABASE … TO RESTORE POINT-Kommando ist auch ohne eingeschaltetem FLASHBACK-Feature möglich.
Voraussetzungen für das Anlegen von Restore Points
Der Benutzer muss über notwendige Systemprivilegien verfügen:
GRANT SELECT ANY DICTIONARY TO <user>;
-- oder
GRANT FLASHBACK ANY TABLE TO <user>;
Für das Erzeugen von garantierten Restore Points ist die SYSDBA-Rolle notwendig und die Archivierung muss laufen. Falls FLASHBACK nicht aktiviert wurde, muss der erste garantierte Restore Point in der MOUNT-Phase erzeugt werden. Darüber hinaus muss die Flash Recovery Area eingerichtet worden sein.
Damit einzelne Tabellen über FLASHBACK TABLE zurückgesetzt werden können, muss das Feature ROW MOVEMENT aktiviert worden sein:
ALTER TABLE <tab> ENABLE ROW MOVEMENT;
Anlegen von Restore Points
CREATE RESTORE POINT res_point01 GUARANTEE FLASHBACK DATABASE;
CREATE RESTORE POINT res_point02;
Übersicht über Restore Points im Data Dictionary
SELECT * FROM v$restore_point;
SCN … GUA STORAGE_SIZE TIME NAME
------ … --- ------------ --------------------------- -----------
402019 YES 3981312 22.05.18 12:44:04,000000000 RES_POINT01
402240 NO 0 22.05.18 12:46:42,000000000 RES_POINT02
Zurücksetzen auf den definierten Restore Point
FLASHBACK TABLE <tab> TO RESTORE POINT res_point02;
Das Zurücksetzen der gesamten Datenbank ist in der MOUNT-Phase mit anschließendem OPEN RESETLOGS durchzuführen:
SHUTDOWN IMMEDIATE
STARTUP MOUNT
FLASHBACK DATABASE TO RESTORE POINT res_point01;
ALTER DATABASE OPEN RESETLOGS;
Löschen von Restore Points
DROP RESTORE POINT res_point01;
DROP RESTORE POINT res_point02;