Direkt zum Inhalt | Direkt zur Navigation

Benutzerspezifische Werkzeuge

This is SunRain Plone Theme

Sektionen

Sie sind hier: Startseite / DB / Oracle / Flashback Database (FRA), Die Zeitreise

Flashback Database (FRA), Die Zeitreise

Flashback Database. Die Zeitreise. Kassettenrecorder FRA

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:

  1. Archivlog-Modus der Database aktivieren.
  2. Fast Recovery Area konfigurieren
  3. 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:

  1. Festellen, ob die Datenbank im Archive-Mode betrieben wird
  2. Festlegen log_archive_dest_1
  3. Database startup im "mount" Modus
  4. enable archivelog
  5. Database open Mode starten
  6. Ü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

Festlegen log_archive_dest_1

alter system set log_archive_dest_1='LOCATION=+ARCHIVE' scope = both;

Database startup im "mount" Modus

startup mount

enable archivelog

alter database archivelog;

Database open Mode starten

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:

  1. DB_RECOVERY_FILE_DEST
  2. 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:

  1. Archivlog-Modus der Database aktivieren.
  2. Fast Recovery Area konfigurieren
  3. 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:

  1. Festellen, ob die Datenbank im Archive-Mode betrieben wird
  2. Festlegen log_archive_dest_1
  3. Database startup im "mount" Modus
  4. enable archivelog
  5. Database open Mode starten
  6. Ü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

Festlegen log_archive_dest_1

alter system set log_archive_dest_1='LOCATION=+ARCHIVE' scope = both;

Database startup im "mount" Modus

startup mount

enable archivelog

alter database archivelog;

Database open Mode starten

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:

  1. DB_RECOVERY_FILE_DEST
  2. 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

Kommentieren

Sie können einen Kommentar abgeben, indem Sie das untenstehende Formular ausfüllen. Nur Text. Web- und E-Mailadressen werden in anklickbare Links umgewandelt. Kommentare werden moderiert.

Enter the word