Panoramica sulla tecnologie Flashback di Oracle

lunedì 13 ottobre 2008 alle 13:24 | Pubblicato su Backup and Recovery, Installation and Configuration | 1 commento
Tag: , , ,

Nel mio percorso di studio e ripasso per l’OCP oggi scrivo un post di introduzione alle tecnologie di flashback implementate e disponibili nella versione 10gR2 del database Oracle.

Comincio con il spiegare di cosa si tratta: in sostanza si tratta di una serie di strumenti che ha come obbiettivo principale quello di facilitare le operazioni di ripristino di dati corrotti a causa di errori umani logici, ad esempio un drop table sbagliato o peggio errori applicativi che hanno fatto transazioni sbagliate. Questi strumenti vanno tutti sotto la categoria “flashback” in quanto permettono o di vedere come erano i dati nel passato, o come sono cambiati o di ripristinare i dati o l’intero database com’era nel passato.

Le tecnologie flashback sono cinque:

  1. Flashback Database (solo enterprise edition)
  2. Flashback Drop
  3. Flashback Versions (forse anche in standard, ma devo verificare)
  4. Flashback Transaction (solo enterprise edition)
  5. Flashback table (solo enterprise edition)

Flashback Database (Rif. Manuale: Concepts, Backup and Recovery Basics)

Va attivata esplicitamente, a database in stato mounted. Quando è attivata questa modalità un processo di background, chiamato “flashback writer (RVWR)” scrive nella flash recovery area (FRA) dei log che in sostanza registrano le modifiche al blocchi (tipo l’UNDO). La conservazione di questi log è basata sul parametro DB_FLASHBACK_RETENTION_TARGET che deve essere obbligatoriamente settato e serve ad indicare un obbiettivo (target) di tempo di flashback da manterenerein FRA. Quindi settando ad esempio DB_FLASHBACK_RETENTION_TARGET=1440 (il default, in minuti, pari a un giorno) si chiede al RVWR di aver come obbiettivo il mantenimento su disco dei log per poter riportare indietro il database fino al giorno prima.

Le possibilità di flashback hanno dei limiti, specificati nel manuale, però la potenzialità di questo strumento è alta. E’ da capire il reale impatto di questa caratteristica sulle prestazioni,  di sicuro non nullo.

Flashback DROP

Questa funzionalità implementa un cestino delle tabelle. Da oracle 10g quando si fa DROP TABLE X; la tabella non viene realmente droppata ma viene messa in un cestino che funziona a livello di tablespace (ogni tablespace ha un suo cestino). Per eliminare direttamente una tabella la sintassi SQL di oracle è stata estesa e si deve scrivere DROP TABLE X PURGE; Il cestino è consultabile con le viste USER/DBA_RECYCLEBIN dove si vede che le tabelle vengono rinominati con nomi strani. Il cestino può essere svuotato con comandi come “PURGE RECYCLEBIN”. Vi sono poi varianti del comando purge come “PURGE TABLE x”, PURGE TABLESPACE y” ecc.

Flashback Transaction Query (Rif. Man. “Administrators Guide“)

Questa funzionalità si basa sul gia esistente UNDO e permette con una semplice estensione dell’SQL di interrogare i dati indietro nel tempo. La disponibilità di questi dati dipende dal’UNDO, quindi dai parametri UNDO_RETENTION ed eventualmente dal fatto che sulla tablespace di UNDO utilizzata sia configurato il “retention guarantee“. Un esempio di utilizzo di questa funzionalità, direttamente dal manuale è:

SELECT versions_startscn, versions_starttime,
       versions_endscn, versions_endtime,
       versions_xid, versions_operation,
       name, salary
  FROM employees
  VERSIONS BETWEEN TIMESTAMP
      TO_TIMESTAMP('2003-07-18 14:00:00', 'YYYY-MM-DD HH24:MI:SS')
  AND TO_TIMESTAMP('2003-07-18 17:00:00', 'YYYY-MM-DD HH24:MI:SS')
  WHERE name = 'JOE';

Come si vede dall’esempio oltre all’estensione della select con la parte … VERSIONS, ci sono anche delle pseudocolonne (versions_%) che danno informazione sulla “versione” del dato.

Flashback Transaction Query (Rif. Man. “Application Developers“)

Questa funzionalità permette di interrogare una vista di sistema, FLASHBACK_TRANSACTION_QUERY, dalla quale si ottengono tutte le informazioni relative alle ultime transazioni eseguite (i cui dati si trovano ancora nell’UNDO) compreso l’istruzione SQL per “annullare” ogni singola istruzione di ogni transazione (UNDO). Riporto sono un piccolo esempio di utilizzo, per maggiori approfondimenti rimando al manuale:

SELECT xid, logon_user FROM flashback_transaction_query
     WHERE xid IN (SELECT versions_xid FROM employees VERSIONS BETWEEN TIMESTAMP
      TO_TIMESTAMP('2003-07-18 14:00:00', 'YYYY-MM-DD HH24:MI:SS') AND
      TO_TIMESTAMP('2003-07-18 17:00:00', 'YYYY-MM-DD HH24:MI:SS'));

Flashback Query
Nel manuale su cui studio per l’OCP non se ne parla perchè evidentemente non fa parte del manuale, vi è però un’altra funzionalità di backup, già introdotto con Oracle 9, flashback query. Effettivamente forse non se ne parla perchè le nuove funzionalità l’hanno sorpassata, questa funzionalità è simile alla “flashback versions” in quanto permette di vedere i dati come erano nel passato con la sintassi SQL “SELECT… AS OF”, ad esempio:

SELECT * FROM employees AS OF TIMESTAMP
   TO_TIMESTAMP('2004-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS')
   WHERE last_name = 'Chung';

Conclusioni

Devo confessare che non ho mai avuto necessità di utilizzare veramente nessuna di tutte queste belle funzionalità. Quella più interessante mi pare quella di Flashback Database per la quale a dire il vero intravedo una possibilità di uso reale, ma sono perplesso su due aspetti, uno quello delle prestazioni, due quello della gestione dei log. Tempo fa su una installazione di test attivai la funzionalità di flashback database e mi trovai un po’ in difficoltà perchè non riuscivo a liberare rapidamente lo spazio occupato da questi log nella flash recovery area. Tramite RMAN è possibile salvarli solo su nastro e se non ricordo male non era possibile cancellarli se non erano stati salvati prima (era una 10.1, con ASM, poi non ho più provato). Quindi probabilmente il modo più veloce di fare spazio è abbassare drasticamente il parametro FLASHBACK_RETENTION_TARGET e lasciare che Oracle automaticamente liberi lo spazio che gli serve.

1 commento »

RSS feed for comments on this post. TrackBack URI

  1. E’ veramente ottimo come altri tuoi articoli. Mi serve per implementare la FRA in oracle 11g e come impostazioni generali va benissimo.
    saluti


Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Crea un sito o un blog gratuitamente presso WordPress.com.
Entries e commenti feeds.

%d blogger cliccano Mi Piace per questo: