Flashback Database (FRA), Die Zeitreise
Funktionsweise Flashback Database
Um einen älteren Stand der Datenbank wiederherstellen zu können, ermittelt die Datenbank die notwendigen Flashback Logs vor den gewünschten Wiederherstellungszeitpunk und die Flashback Logs werden entsprechend zurückgeschrieben.
Wurden die Daten zwischen dem gewünschten Wiederherstellungszeitpunkt und den Flashback Logs verändert, wurden diese Änderungen in den Redo Logs aufgezeichnet. Die Flashback Database werden mit diesem Informationen erweitert.
Für die Wiederherstellung müssen sowohl die Flashback Logs als auch die archivierten Redo Logs für diesen Zeitraum vorhanden sein.
Für das schreiben der Flashback Logs wird unterschieden, ob Flashback Database eingeschaltet wurde, oder ob es implizit durch das setzen eines GRP (Guaranteed Restore Point) eingeschaltet wurde. Dadurch haben die unterschiedliche Flashback Logs unterschiedliche Informationen und die Größe ist unterschiedlich.
Mit einen garantieren Rücksetzpunkt (Guaranteed Restore Point kurz GRP) kann die Datenbank zu einem bestimmten Restore Point zurückzusetzen werden. Guaranteed Restore Point (GRP) kann auch ohne eingeschalteten Flashback Database genutzt werden.
Ermittelung von den benötigten Platz für die Flashback Logs in der FRA
Für die Ermittelung von dem benötigen Platz in der FRA, kann in der Statistik V$FLASHBACK_DATABASE_STAT nachgeschaut werden. Man schaltet Flashback Database ein und nach ca. 2-3 Stunden werden die Statistiken angezeigt.
SQL> select * from V$FLASHBACK_DATABASE_STAT order by begin_time;
BEGIN_TIM END_TIME FLASHBACK_DATA DB_DATA REDO_DATA ESTIMATED_FLASHBACK_SIZE --------- --------- -------------- ---------- ---------- ------------------------ 06-MAY-14 06-MAY-14 6553600 7184384 2455552 119144448 06-MAY-14 06-MAY-14 3784704 3776512 1281536 119046144 06-MAY-14 06-MAY-14 3407872 4325376 1241600 118923264
Column | Datatype | Description |
---|---|---|
BEGIN_TIME |
DATE |
Beginn des Zeitintervalls |
END_TIME |
DATE |
Ende des Zeitintervalls |
FLASHBACK_DATA |
NUMBER |
Anzahl der Bytes vom flashback data, die in dem Interwall geschrieben wurden |
DB_DATA |
NUMBER |
Anzahl der Bytes vom database data, die in dem Interwall geschrieben wurden |
REDO_DATA |
NUMBER |
Anzahl der Bytes vom redo data, die in dem Interwall geschrieben wurden |
ESTIMATED_FLASHBACK_SIZE |
NUMBER |
Geschätzer Wert in Bytes, die am ende von dem Interwall geschrieben wurden |
Vorbereitung der Datenbank
Für den Einsatz von Flashback Databse sind folgende Schritte notwendig:
- Archivlog-Modus der Database aktivieren.
- Fast Recovery Area konfigurieren
- Flashback Logging aktivieren
Archivlog-Modus der Database aktivieren.
Die Datenbank muss im "Archive-Mode" betrieben werden. In den Archive Logs werden die Redo Log Dateien (Informationen) gesichert, bevor diese überschrieben werden. Die Redo Log Dateien speichern die Änderungen der Datenbank und ermöglichen die Wiederherstellung. Für einschalten von dem "Archive-Mode" sind folgende Schritte notwendig:
- Festellen, ob die Datenbank im Archive-Mode betrieben wird
- Festlegen log_archive_dest_1
- Database startup im "mount" Modus
- enable archivelog
- Database open Mode starten
- Überprüfung "Archive Mode" Parameter
Festellen, ob die Datenbank im Archive-Mode betrieben wird:
SQL> SELECT LOG_MODE FROM SYS.V$DATABASE;
LOG_MODE ------------ NOARCHIVELOG
alter system set log_archive_dest_1='LOCATION=+ARCHIVE' scope = both;
Database startup im "mount" Modus
startup mount
alter database archivelog;
alter database open;
Überprüfung "Archive Mode" Parameter
archive log list;
Database log mode Archive Mode Automatic archival Enabled Archive destination +ARCHIVE Oldest online log sequence 17 Next log sequence to archive 18 Current log sequence 18
Fast Recovery Area konfigurieren
Für das Flashback Database werden die Flashback Log benötigt. Diese Logs werden in der Fast Recovery Area (FRA) geschrieben. In diesen Logs werden noch weitete zusätzliche Daten gespeichert. Das sind unter anderm RMAN Backups, Archived Redo Logs, Kopien von Online Redo Log files und Control Files.
Soll Flashback Database genutzt werden, so muss die Fast Recovery Area (FRA) konfiguriert werden. Hier werden die Flashback Logs abgerlegt.
Für die FRA müssen zwei Initialisierungsparameter gesetzt werden:
- DB_RECOVERY_FILE_DEST
- DB_RECOVERY_FILE_DEST_SIZE
Mit DB_RECOVERY_FILE_DEST wird der Pfad zur FRA gesetzt und mit DB_RECOVERY_FILE_DEST_SIZE wird die Gesamtgröße der FRA definiert.
SQL> alter system set db_recovery_file_dest_size=4G;
SQL> alter system set db_recovery_file_dest='<Pfad zur FRA>';
Flashback Database benötigt spezielle Logs, die Flashback Logs. Die Datenbank schreibt diese Logs in ein Verzeichnis auf der Festplatte namens Fast Recovery Area (FRA). Zusätzlich zu den Flashback Logs werden in der FRA auch andere Dateien gespeichert, die für die Wiederherstellung der Oracle-Datenbank notwendig sind, darunter RMAN Backups, Archived Redo Logs, Kopien von Online Redo Log files und Control Files. Es ist dem Datenbankadministrator überlassen, ob er eine FRA für seine Datenbanken konfiguriert, oder die Recovery-Dateien selber verwaltet. Für Datenbankadministratoren, die Flashback Database nutzen möchten, ist die FRA ein Muss, denn Flashback Logs können nur hier abgelegt werden.
FRA ist vorhanden, wenn die 2 Initialisierungsparameter DB_RECOVERY_FILE_DEST und DB_RECOVERY_FILE_DEST_SIZE gesetzt sind. DB_RECOVERY_FILE_DEST ist der Pfad zur FRA und DB_RECOVERY_FILE_DEST_SIZE ist die Gesamtgröße der FRA.
Flashback Logging aktivieren
Flashback Logging muss explizit eingeschaltet werden. Ab Oracle 11G kann das Flashback Logging im laufenden Betrieb aktiviert werden.
alter database flashback on;
Überprüfung:
select name, flashback_on from v$database;
NAME FLASHBACK_ON --------- ------------------ JUG14DB YES
Ab diesem Zeitpunkt werden in der Datenbank Flashback Logs erzeugt. Die Logs werden in der FRA gespeichert.
Flashback Database Einsatz
Flashback Database wurde wie oben beschrieben eingerichtet. Unerwünschte Aktionen können nun leicht rückgängig gemacht werden.
Erstellen der Tablle t:
SQL> create table t as select * from all_objects;
SQL> select count(*) from t;
COUNT(*) ---------- 13319
und ermitteln die current_scn
SQL> select current_scn from v$database;
CURRENT_SCN ----------- 713451
Das dient uns als Ausgangspunkt
Löschen von dem Inhalt der Tabelle t
SQL> delete from t;
13319 rows deleted.
SQL> commit;
Wiederherstellen von dem Inhalt der Tabelle t mit Flashback
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
shutdown immediate;
startup mount;
flashback database to scn 713451;
alter database open resetlogs;
select count(*) from t;
END_OF_SQL_SCRIPT
COUNT(*) ---------- 13319
Die Tabelle wurde wieder vollständig wiederhergestellt.
Löschen der ganzen Tabelle t
wir dropen jetzt die ganze Tabelle.
drop table t;
Table dropped.
Die Tabelle kann jetzt wieder wie oben beschrieben, wieder hergestellt werden.
Wiederherstellung ab einer bestimmten Zeit
Sollte die SCN nicht bekannt sein, so ist es möglich , einen Zeitpunkt anzugeben:
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
shutdown immediate;
startup mount;
flashback database to timestamp to_date ('06-05-2014:06:30:00' , 'DD-MM-YYYY:HH24:MI:SS');
alter database open read only;
select count(*) from t;
END_OF_SQL_SCRIPT
Flashback recovery ohne Datenverlust
Nach einem Flashback recovery muss die Datenbank mit "restlogs" geöffnet werden. Dadurch entsteht ein neue Inkarnation der Datenbank. Alle Änderungen vor dem recovery gehen verloren.
Mit Data Pump und dem recovery können frühere Inhalte gesichert und wieder zurück gespielt werden.
Schema vorbereiten und erzeugen der Tabelle myuser.t
Wir legen ein Schema an und erzeugen eine neue Tabellen myuser..t:
create user myuser identified by Jug01;
grant create session to myuser;
grant create table to myuser;
grant unlimited tablespace to myuser;
sqlplus myuser/Jug01 << END_OF_SQL_SCRIPT
create table t as select * from all_objects;
select 'Tabelle t '|| count(*) from t;
END_OF_SQL_SCRIPT
und ermitteln die current_scn
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
select current_scn from v\$database;
END_OF_SQL_SCRIPT
CURRENT_SCN ----------- 729032
Das dient uns als Ausgangspunkt
Erstellen einer weiteren der Tabelle s:
sqlplus myuser/Jug01 << END_OF_SQL_SCRIPT
create table s as select * from all_objects;
select 'Tabelle s '|| count(*) from s;
END_OF_SQL_SCRIPT
COUNT(*) ---------- 5656
Es sind jetzt zwei Tabellen vorhanden:
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
select OWNER,TABLE_NAME from ALL_ALL_TABLES where TABLE_NAME in ('S','T' ) and owner = 'MYUSER';
END_OF_SQL_SCRIPT
OWNER TABLE_NAME ------------------------------ ------------------------------ MYUSER S MYUSER T
und ermitteln wieder die current_scn
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
select current_scn from v\$database;
END_OF_SQL_SCRIPT
CURRENT_SCN ----------- 729135
Löschen der ganzen Tabelle myuser.t
wir dropen jetzt die ganze Tabelle.
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
drop table myuser.t;
END_OF_SQL_SCRIPT
Table dropped.
Es steht nur noch die Tabelle myuser.s zu Verfügung:
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
select OWNER,TABLE_NAME from ALL_ALL_TABLES where TABLE_NAME in ('S','T' ) and owner = 'MYUSER';
END_OF_SQL_SCRIPT
OWNER TABLE_NAME ------------------------------ ------------------------------ MYUSER S
Recovery mit Flashback und öffnen read only
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
shutdown immediate;
startup mount;
flashback database to scn 729032;
alter database open read only;
END_OF_SQL_SCRIPT
Die Datenbank wurde auf den ursprüngliche Ausgangspunkt zurückgeschoben. Es steht jetzt nur noch die Tabelle myuser..t zu Verfügung myuser..s ist nicht mehr vorhanden
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
select OWNER,TABLE_NAME from ALL_ALL_TABLES where TABLE_NAME in ('S','T' ) and owner = 'MYUSER';
END_OF_SQL_SCRIPT
OWNER TABLE_NAME ------------------------------ ------------------------------ MYUSER T
Exportieren der Tabelle T nach den Recovery
exp \'/ as sysdba\' TABLES=myuser.T LOG=/tmp/myuser.Tt.log FILE=/tmp/myuser.T.dmp
Nach dem Export von der Tabelle myuser.t wird die Datenbank wieder im mount Status gebracht und es wird ein vollständiges Recovery druchgeführt. Die Datenbank wird in die Gegenwart versetzt. Die Tabelle myuser..t wird fehlen und myuser..s ist wieder vorhanden.
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
shutdown immediate;
startup mount;
recover database;
alter database open;
select OWNER,TABLE_NAME from ALL_ALL_TABLES where TABLE_NAME in ('S','T' ) and owner = 'MYUSER';
END_OF_SQL_SCRIPT
OWNER TABLE_NAME ------------------------------ ------------------------------ MYUSER S
Import der Tabelle myuser.t
Im letzten Schritt importieren wir die Tabelle myuser.t von dem export wieder zurück.
Als letzten Schritt importiert er die Tabelle aus dem Export-Dump.
imp \'/ as sysdba\' TABLES=T FROMUSER=myuser LOG=/tmp/myuser.Tt.log FILE=/tmp/myuser.T.dmp
Export file created by EXPORT:V11.02.00 via conventional path import done in WE8MSWIN1252 character set and AL16UTF16 NCHAR character set import server uses US7ASCII character set (possible charset conversion) . importing SYS's objects into SYS . importing MYUSER's objects into MYUSER . . importing table "T" 5655 rows imported Import terminated successfully without warnings.
Es stehen jetzt wieder bei Tabelle wieder zu Verfügung:
OWNER TABLE_NAME ------------------------------ ------------------------------ MYUSER T MYUSER S
Guaranteed Restore Point (kurz GRP)
Erstellen der Tabelle t:
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
create table t as select * from all_objects;
select 'Tabelle t '|| count(*) from t;
END_OF_SQL_SCRIPT
Setzen eines GRP:
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
create restore point POIT_GRP guarantee flashback database;
END_OF_SQL_SCRIPT
Restore point created.
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
drop table t;
END_OF_SQL_SCRIPT
Anzeige Guaranteed Restore Point (GRP)
Funktionsweise Flashback Database
Der Recovery Writer speichert die veränderten Datenblöcke in den Flashback Logs
Um einen älteren Stand der Datenbank wiederherstellen zu können, ermittelt die Datenbank die notwendigen Flashback Logs vor den gewünschten Wiederherstellungszeitpunk und die Flashback Logs werden entsprechend zurückgeschrieben.
Wurden die Daten zwischen dem gewünschten Wiederherstellungszeitpunkt und den Flashback Logs verändert, wurden diese Änderungen in den Redo Logs aufgezeichnet. Die Flashback Database werden mit diesem Informationen erweitert.
Für die Wiederherstellung müssen sowohl die Flashback Logs als auch die archivierten Redo Logs für diesen Zeitraum vorhanden sein.
Für das schreiben der Flashback Logs wird unterschieden, ob Flashback Database eingeschaltet wurde, oder ob es implizit das das setzen eines GRP (Guaranteed Restore Point) eingeschaltet wurde. Dadurch haben die unterschiedliche Flashback Logs unterschiedliche Informationen und die Größe ist unterschiedlich
Mit einen garantieren Rücksetzpunkt (Guaranteed Restore Point kurz GRP) kann die Datenbank zu einem bestimmten Restore Point zurückzusetzen werden.
Ermittelung von den benötigten Platz für die Flashback Logs in der FRA
Für die Ermittelung von dem benötigen Platz in der FRA, kann in der Statistik V$FLASHBACK_DATABASE_STAT nachgeschaut werden. Das schaltet man Flashback Database ein und ca. 2-3 Stunden werden die Statistiken angezeigt.
SQL> select * from V$FLASHBACK_DATABASE_STAT order by begin_time;
BEGIN_TIM END_TIME FLASHBACK_DATA DB_DATA REDO_DATA ESTIMATED_FLASHBACK_SIZE --------- --------- -------------- ---------- ---------- ------------------------ 06-MAY-14 06-MAY-14 6553600 7184384 2455552 119144448 06-MAY-14 06-MAY-14 3784704 3776512 1281536 119046144 06-MAY-14 06-MAY-14 3407872 4325376 1241600 118923264
Column | Datatype | Description |
---|---|---|
BEGIN_TIME |
DATE |
Beginn des Zeitintervalls |
END_TIME |
DATE |
Ende des Zeitintervalls |
FLASHBACK_DATA |
NUMBER |
Anzahl der Bytes vom flashback data, die in dem Interwall geschrieben wurden |
DB_DATA |
NUMBER |
Anzahl der Bytes vom database data, die in dem Interwall geschrieben wurden |
REDO_DATA |
NUMBER |
Anzahl der Bytes vom redo data, die in dem Interwall geschrieben wurden |
ESTIMATED_FLASHBACK_SIZE |
NUMBER |
Geschätzer Wert in Bytes, die am ende von dem Interwall geschrieben wurden |
Vorbereitung der Datenbank
Für den Einsatz von Flashback Databse sind folgende Schritte notwendig:
- Archivlog-Modus der Database aktivieren.
- Fast Recovery Area konfigurieren
- Flashback Logging aktivieren
Archivlog-Modus der Database aktivieren.
Die Datenbank muss im "Archive-Mode" betrieben werden. In den Archive Logs werden die Redo Log Dateien (Informationen) gesichert, bevor diese überschrieben werden. Die Redo Log Dateien speichern die Änderungen der Datenbank und ermöglichen die Wiederherstellung. Für einschalten von dem "Archive-Mode" sind folgende Schritte notwendig:
- Festellen, ob die Datenbank im Archive-Mode betrieben wird
- Festlegen log_archive_dest_1
- Database startup im "mount" Modus
- enable archivelog
- Database open Mode starten
- Überprüfung "Archive Mode" Parameter
Festellen, ob die Datenbank im Archive-Mode betrieben wird:
SQL> SELECT LOG_MODE FROM SYS.V$DATABASE;
LOG_MODE ------------ NOARCHIVELOG
alter system set log_archive_dest_1='LOCATION=+ARCHIVE' scope = both;
Database startup im "mount" Modus
startup mount
alter database archivelog;
alter database open;
Überprüfung "Archive Mode" Parameter
archive log list;
Database log mode Archive Mode Automatic archival Enabled Archive destination +ARCHIVE Oldest online log sequence 17 Next log sequence to archive 18 Current log sequence 18
Fast Recovery Area konfigurieren
Für das Flashback Database werden die Flashback Log benötigt. Diese Logs werden in der Fast Recovery Area (FRA) geschrieben. In diesen Logs werden noch weitete zusätzliche Daten gespeichert. Das sind unter anderm RMAN Backups, Archived Redo Logs, Kopien von Online Redo Log files und Control Files.
Soll Flashback Database genutzt werden, so muss die Fast Recovery Area (FRA) konfiguriert werden. Hier werden die Flashback Logs abgerlegt.
Für die FRA müssen zwei Initialisierungsparameter gesetzt werden:
- DB_RECOVERY_FILE_DEST
- DB_RECOVERY_FILE_DEST_SIZE
Mit DB_RECOVERY_FILE_DEST wird der Pfad zur FRA gesetzt und mit DB_RECOVERY_FILE_DEST_SIZE wird die Gesamtgröße der FRA definiert.
SQL> alter system set db_recovery_file_dest='<Pfad zur FRA>';
SQL> alter system set db_recovery_file_dest_size=4G;
Flashback Database benötigt spezielle Logs, die Flashback Logs. Die Datenbank schreibt diese Logs in ein Verzeichnis auf der Festplatte namens Fast Recovery Area (FRA). Zusätzlich zu den Flashback Logs werden in der FRA auch andere Dateien gespeichert, die für die Wiederherstellung der Oracle-Datenbank notwendig sind, darunter RMAN Backups, Archived Redo Logs, Kopien von Online Redo Log files und Control Files. Es ist dem Datenbankadministrator überlassen, ob er eine FRA für seine Datenbanken konfiguriert, oder die Recovery-Dateien selber verwaltet. Für Datenbankadministratoren, die Flashback Database nutzen möchten, ist die FRA ein Muss, denn Flashback Logs können nur hier abgelegt werden.
FRA ist vorhanden, wenn die 2 Initialisierungsparameter DB_RECOVERY_FILE_DEST und DB_RECOVERY_FILE_DEST_SIZE gesetzt sind. DB_RECOVERY_FILE_DEST ist der Pfad zur FRA und DB_RECOVERY_FILE_DEST_SIZE ist die Gesamtgröße der FRA.
Flashback Logging aktivieren
Flashback Logging muss explizit eingeschaltet werden. Ab Oracle 11G kann das Flashback Logging im laufenden Betrieb aktiviert werden.
alter database flashback on;
Überprüfung:
select name, flashback_on from v$database;
NAME FLASHBACK_ON --------- ------------------ JUG14DB YES
Ab diesem Zeitpunkt werden in der Datenbank Flashback Logs erzeugt. Die Logs werden in der FRA gespeichert.
Flashback Database Einsatz
Flashback Database wurde wie oben beschrieben eingerichtet. Unerwünschte Aktionen können nun leicht rückgängig gemacht werden.
Erstellen der Tablle t:
SQL> create table t as select * from all_objects;
SQL> select count(*) from t;
COUNT(*) ---------- 13319
und ermitteln die current_scn
SQL> select current_scn from v$database;
CURRENT_SCN ----------- 713451
Das dient uns als Ausgangspunkt
Löschen von dem Inhalt der Tabelle t
SQL> delete from t;
13319 rows deleted.
SQL> commit;
Wiederherstellen von dem Inhalt der Tabelle t mit Flashback
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
shutdown immediate;
startup mount;
flashback database to scn 713451;
alter database open resetlogs;
select count(*) from t;
END_OF_SQL_SCRIPT
COUNT(*) ---------- 13319
Die Tabelle wurde wieder vollständig wiederhergestellt.
Löschen der ganzen Tabelle t
wir dropen jetzt die ganze Tabelle.
drop table t;
Table dropped.
Die Tabelle kann jetzt wieder wie oben beschrieben, wieder hergestellt werden.
Wiederherstellung ab einer bestimmten Zeit
Sollte die SCN nicht bekannt sein, so ist es möglich , einen Zeitpunkt anzugeben:
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
shutdown immediate;
startup mount;
flashback database to timestamp to_date ('06-05-2014:06:30:00' , 'DD-MM-YYYY:HH24:MI:SS');
alter database open read only;
select count(*) from t;
END_OF_SQL_SCRIPT
Flashback recovery ohne Datenverlust
Nach einem Flashback recovery muss die Datenbank mit "restlogs" geöffnet werden. Dadurch entsteht ein neue Inkarnation der Datenbank. Alle Änderungen vor dem recovery gehen verloren.
Mit Data Pump und dem recovery können frühere Inhalte gesichert und wieder zurück gespielt werden.
Schema vorbereiten und erzeugen der Tabelle myuser.t
Wir legen ein Schema an und erzeugen eine neue Tabellen myuser..t:
create user myuser identified by Jug01;
grant create session to myuser;
grant create table to myuser;
grant unlimited tablespace to myuser;
sqlplus myuser/Jug01 << END_OF_SQL_SCRIPT
create table t as select * from all_objects;
select 'Tabelle t '|| count(*) from t;
END_OF_SQL_SCRIPT
und ermitteln die current_scn
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
select current_scn from v\$database;
END_OF_SQL_SCRIPT
CURRENT_SCN ----------- 729032
Das dient uns als Ausgangspunkt
Erstellen einer weiteren der Tabelle s:
sqlplus myuser/Jug01 << END_OF_SQL_SCRIPT
create table s as select * from all_objects;
select 'Tabelle s '|| count(*) from s;
END_OF_SQL_SCRIPT
COUNT(*) ---------- 5656
Es sind jetzt zwei Tabellen vorhanden:
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
select OWNER,TABLE_NAME from ALL_ALL_TABLES where TABLE_NAME in ('S','T' ) and owner = 'MYUSER';
END_OF_SQL_SCRIPT
OWNER TABLE_NAME ------------------------------ ------------------------------ MYUSER S MYUSER T
und ermitteln wieder die current_scn
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
select current_scn from v\$database;
END_OF_SQL_SCRIPT
CURRENT_SCN ----------- 729135
Löschen der ganzen Tabelle myuser.t
wir dropen jetzt die ganze Tabelle.
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
drop table myuser.t;
END_OF_SQL_SCRIPT
Table dropped.
Es steht nur noch die Tabelle myuser.s zu Verfügung:
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
select OWNER,TABLE_NAME from ALL_ALL_TABLES where TABLE_NAME in ('S','T' ) and owner = 'MYUSER';
END_OF_SQL_SCRIPT
OWNER TABLE_NAME ------------------------------ ------------------------------ MYUSER S
Recovery mit Flashback und öffnen read only
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
shutdown immediate;
startup mount;
flashback database to scn 729032;
alter database open read only;
END_OF_SQL_SCRIPT
Die Datenbank wurde auf den ursprüngliche Ausgangspunkt zurückgeschoben. Es steht jetzt nur noch die Tabelle myuser..t zu Verfügung myuser..s ist nicht mehr vorhanden
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
select OWNER,TABLE_NAME from ALL_ALL_TABLES where TABLE_NAME in ('S','T' ) and owner = 'MYUSER';
END_OF_SQL_SCRIPT
OWNER TABLE_NAME ------------------------------ ------------------------------ MYUSER T
Exportieren der Tabelle T nach den Recovery (kein support mit exp) (network link)
exp \'/ as sysdba\' TABLES=myuser.T LOG=/tmp/myuser.Tt.log FILE=/tmp/myuser.T.dmp
Nach dem Export von der Tabelle myuser.t wird die Datenbank wieder im mount Status gebracht und es wird ein vollständiges Recovery druchgeführt. Die Datenbank wird in die Gegenwart versetzt. Die Tabelle myuser..t wird fehlen und myuser..s ist wieder vorhanden.
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
shutdown immediate;
startup mount;
recover database;
alter database open;
select OWNER,TABLE_NAME from ALL_ALL_TABLES where TABLE_NAME in ('S','T' ) and owner = 'MYUSER';
END_OF_SQL_SCRIPT
OWNER TABLE_NAME ------------------------------ ------------------------------ MYUSER S
Import der Tabelle myuser.t (kein support mit imp) (network link)
Im letzten Schritt importieren wir die Tabelle myuser.t von dem export wieder zurück.
Als letzten Schritt importiert er die Tabelle aus dem Export-Dump.
imp \'/ as sysdba\' TABLES=T FROMUSER=myuser LOG=/tmp/myuser.Tt.log FILE=/tmp/myuser.T.dmp
Export file created by EXPORT:V11.02.00 via conventional path import done in WE8MSWIN1252 character set and AL16UTF16 NCHAR character set import server uses US7ASCII character set (possible charset conversion) . importing SYS's objects into SYS . importing MYUSER's objects into MYUSER . . importing table "T" 5655 rows imported Import terminated successfully without warnings.
Es stehen jetzt wieder beide Tabellen zu Verfügung:
OWNER TABLE_NAME ------------------------------ ------------------------------ MYUSER T MYUSER S
Guaranteed Restore Point (kurz GRP)
Erstellen der Tabelle t:
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
create table t as select * from all_objects;
select 'Tabelle t '|| count(*) from t;
END_OF_SQL_SCRIPT
Setzen eines GRP:
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
create restore point POIT_GRP guarantee flashback database;
END_OF_SQL_SCRIPT
Restore point created.
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
drop table t;
END_OF_SQL_SCRIPT
Anzeige Guaranteed Restore Point (GRP)
select TO_CHAR(TIME, 'YYYY-MM-DD HH24:MI:SS')as TIME,SCN,STORAGE_SIZE,PRESERVED,NAME from v$restore_point;
TIME SCN STORAGE_SIZE PRE NAME ------------------- ---------- ------------ --- ----------- 2014-05-07 10:34:25 772256 104857600 YES POIT_GRP
Löschen der ganzen Tabelle t
wir dropen jetzt die ganze Tabelle.
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
drop table t;
END_OF_SQL_SCRIPT
Wiederherstellen von der Tabelle t zu den GRP
Das Wiederherstellen der Tabelle zu den GRP "POIT_GRP" kann nur im mount Status erfolgen
sqlplus "/ as sysdba" << END_OF_SQL_SCRIPT
shutdown immediate;
startup mount;
flashback database to restore point POIT_GRP;
alter database open resetlogs;
select count(*) from t;
END_OF_SQL_SCRIPT
Löschen Guaranteed Restore Point (GRP)
Das Löschen von einem Guaranteed Restore Point erfolgt mit einem drop
drop restore point POIT_GRP;
Überwachung Database Flashback
Informationen über Logfiles und möglichen SCNs zum Zurücksetzten.
select * from v$flashback_database_logfile;
NAME LOG# THREAD# SEQUENCE# BYTES FIRST_CHANGE# FIRST_TIM TYPE -------------------------------------------- ---------- ---------- ---------- ---------- ------------- --------- --------- +JUG14/jug14db/flashback/log_2.275.845811951 2 1 14 104857600 748764 06-MAY-14 NORMAL +JUG14/jug14db/flashback/log_3.271.845892345 3 1 15 104857600 729333 06-MAY-14 NORMAL +JUG14/jug14db/flashback/log_4.269.845960427 4 1 12 104857600 678985 04-MAY-14 RESERVED +JUG14/jug14db/flashback/log_5.270.846848649 5 1 16 104857600 757543 07-MAY-14 NORMAL
select * from v$flashback_database_log;
OLDEST_FLASHBACK_SCN OLDEST_FL RETENTION_TARGET FLASHBACK_SIZE ESTIMATED_FLASHBACK_SIZE -------------------- --------- ---------------- -------------- ------------------------ 713453 06-MAY-14 1440 419430400 121085952
Artikelaktionen