Inhaltsverzeichnis
Flashback aktivieren
DB:10g
Aufgabe: Auf einer 10g Cluster Datenbank soll Flashback aktiviert werden. Die Datenspeicherung erfolgt über eine Oracle ASM Instance. Bisher wurde die Recovery Area Parameter nicht verwendet. Die Platte für die Archivelogs und RMAN Backups ist gross aber langsam, die Flashback Logs soll auf einer schnellen 100GB Lun abgelegt werden. Die Flashback Logs lassen sich aber nicht einzeln konfigurieren.
Lösung für die Produktion:
- Archive werden per festen Pfad auf die ASM Platte für das Recovery RECO geschrieben
- Backups werden per festen Pfad auf die ASM Platte für das Recovery RECO geschrieben
- Flashback Log wird mit Parameter db_recovery_file_dest au fdie ASM FLASH Platte geschrieben (schnellere Platte als die ORARECO)
1. Parameter anpassen auf allen Knoten
Paramter für Flashback Log vorbereiten in der init.ora
log_archive_dest_1='location=+RECO' db_recovery_file_dest='+FLASH' db_recovery_file_dest_size=100GB retention_target=1440 ##entspricht 24h
2. Datenbank komplett stoppen
srvctl stop database -d mydb
3. Instance 1 im mount stadium starten
sys@sql> startup mount
4. Flashback einschalten
5. Datenbank stoppen
Sqlplus> shutdown IMMEDIATE
6. Cluster wieder zusammen starten
srvctl start database -d mydb
7. testen
Sqlplus>ALTER system archive LOG CURRENT; Sqlplus>SELECT name FROM v$archived_log; Sqlplus>SELECT name FROM GV$FLASHBACK_DATABASE_LOGFILE;
Restore Point setzen
Restore Point setzen
sqlplus / AS sysdba sql>ALTER system checkpoint ; # Falls RAC auf jeder Instance anmelden und durchführen sql>ALTER system switch logfile; sql>ALTER system archive log CURRENT; # Restore Point anlegen mit (mit guarantee werden alle Logs aufbewahrt!) sql>CREATE restore point my_name_yyyy_dd_mm_hh24_mi guarantee flashback DATABASE; oder mit (falls dann kein Platz ist, kann es passieren das Logs gelöscht werden!: sql>CREATE restore point my_name_yyyy_dd_mm_hh24_mi;
Datenbank zurück setzen
Beispiel für ein Cluster:
# Umgebung setzen # Cluster Datenbank stoppen srvctl stop database -d GPIDB #Mit RMAN auf den restore point zurücksetzen rman target / nocatalog rman>startup mount rman>list restore point all; rman>flashback database to restore point 'point my_name_yyyy_dd_mm_hh24_mi'; rman>alter database open resetlogs; rman>shutdown immediate; rman>quit # Cluster DB starten srvctl start database -d GPIDB
Optional um etwas Plattenplatz freizugeben und einen aktuelleren Namen zu haben:
- Alten Restore Point löschen
DROP restore point my_name_yyyy_dd_mm_hh24_mi;
- Neuen Restore Point setzen
CREATE restore point my_name_yyyy_dd_mm_hh24_mi guarantee flashback DATABASE;
Fehler: ORA-38766
Da der Plattenplatz nicht ausreichte, wurde versucht zwischen durch mit „alter database datafile .. resize ..“ die DB zu verkleinern.
Ergebnis:
RMAN> flashback DATABASE TO restore point GPI_NOW; RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure OF flashback command at 06/05/2014 16:19:16 ORA-38766: cannot flashback DATA file 3; file resized smaller ORA-01110: DATA file 3: '/u01/oracle/oradata/GPIDB/undotbs01.dbf'
Hier hilft dann nur ein Restore der DB aus dem Backup!
Flashback ohne aktiviertes Flashback
11g
Wird ein „CREATE restore point my_name_yyyy_dd_mm_hh24_mi guarantee flashback DATABASE;“ abgesetzt muss zuvor die Datenbank nicht im Flashback Modus sein!
Wird der Befehl abgesetzt wird der Modus automatisch aktiviert.
Überwachungsscipt
- flash.sql
SET linesize 130 pagesize 300 recsep OFF ttitle "Report Flashback Feature of the Database" SKIP 2 - column FLASHBACK_ON format A20 SELECT FLASHBACK_ON FROM V$DATABASE / column INST_ID format A4 column RETENTION_TARGET format A20 column FLASH_SIZE format A20 column ESTIMATED_SIZE format A20 ttitle "Report Flashback Size of the Database" SKIP 2 - SELECT TO_CHAR(INST_ID) AS inst_id , RETENTION_TARGET ||' Minuten' RETENTION_TARGET , ROUND((FLASHBACK_SIZE)/1024/1024) ||' MB' FLASH_SIZE , ROUND((ESTIMATED_FLASHBACK_SIZE)/1024/1024)||' MB' ESTIMATED_SIZE FROM GV$FLASHBACK_DATABASE_LOG / ttitle "Report Flashback Logs of the Database" SKIP 2 - column last_first_time format A20 column maxsize format A10 SELECT TO_CHAR(INST_ID) AS inst_id ,MAX(LOG#) AS last_logid ,TO_CHAR(MAX(FIRST_TIME),'dd.mm.yyyy hh24:mi') AS last_first_time ,ROUND(MAX(BYTES)/1024/1024)||' MB' AS maxsize FROM GV$FLASHBACK_DATABASE_LOGFILE GROUP BY inst_id / ttitle " Flashback Restore Points" column scn format 99999999999999999 column RESTORE_POINT_TIME format a18 heading "RS P Time" column TIME format a18 heading "Time" column name format a30 heading "Name" column GUARANTEE_FLASHBACK_DATABASE format a6 heading "Garant." SELECT scn , TO_CHAR(RESTORE_POINT_TIME,'dd.mm.yyyy hh24:mi') AS RESTORE_POINT_TIME , TO_CHAR(TIME,'dd.mm.yyyy hh24:mi') AS TIME , NAME , GUARANTEE_FLASHBACK_DATABASE FROM V$RESTORE_POINT; ttitle "Oldest possible time to flashback" SKIP 2 - SELECT TO_CHAR(oldest_flashback_time,'dd-mon-yyyy hh24:mi:ss') AS "Oldest possible time" FROM v$flashback_database_log / ttitle "Oldest possible SCN to flashback" SKIP 2 - column oldest_flashback_scn format 99999999999999999999999999 heading "Oldest possible SCN" SELECT oldest_flashback_scn FROM v$flashback_database_log / ttitle "Report Flashback Logs Buffer" SKIP 2 - column name format A40 SELECT * FROM v$sgastat WHERE name LIKE 'flashback%'; ttitle off
Quellen
Metalink:
- Space issue in Flash Recovery Area( FRA ) (Doc ID 829755.1)
- Db Hangs Because Archive Logs Get Not Deleted Although Enough Reclaimable Space (Doc ID 434049.1)
- Archiver Hung On Ora-15041, FRA not Cleaning Files Automatically. (Doc ID 316281.1)
- How is the space pressure managed in the Flash Recovery Area - An Example. (Doc ID 315098.1)
Blogs: