lundi 9 janvier 2012

Effectuer un FLASHBACK TRANSACTION QUERY

Rappel :
Le FLASHBACK TRANSACTION QUERY nous permet de voir les modifications réalisées par une ou plusieurs transactions sur un certain intervalle de temps.

Utilisation de la vue FLASHBACK_TRANSACTION_QUERY


Exemple pour interroger la vue FLASHBACK TRANSACTION QUERY :
SQL> SELECT TO_CHAR (START_TIMESTAMP, 'DD/MM/YYYY HH24:MI'), OPERATION,
LOGON_USER, UNDO_SQL

FROM FLASHBACK_TRANSACTION_QUERY

WHERE TABLE_OWNER='Propriétaire_de_la_table' AND TABLE_NAME='Table' ;

Effectuer un FLASHBACK VERSION QUERY

Rappel :
Le FLASHBACK VERSION QUERY nous permet de voir toutes les versions d’une ligne sur un certain intervalle de temps.

Syntaxe du FLASHBACK VERSION QUERY :
Nom_de_la_table VERSIONS BETWEEN {TIMESTAMP | SCN} {expression 1 | MINVALUE} AND {expression2 | MAXVALUE}

Les colonnes disponibles sont :


Exemple d’interrogation du FLASHBACK VERSION QUERY sur la table ‘DEPT’ :
SQL> SELECT VERSIONS_STARTTIME, VERSIONS_ENDTIME, VERSIONS_OPERATION,
DEPTNO, DNAME, LOC

FROM DEPT

VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE

WHERE DEPTNO=10

ORDER BY VERSIONS_STARTSCN ;

Effectuer un FLASHBACK QUERY

Rappel :
Le FLASHBACK QUERY nous permet de lire les données telles qu’elles étaient à un instant donné du passé.

Exemple d’une interrogation basée sur un numéro SCN :
SQL> SELECT * FROM ma_table
AS OF SCN numéro_SCN ;

Exemple de création d’une table à partir d’anciennes données :
SQL> CREATE TABLE nouvelle_table AS
SELECT * FROM ma_table
AS OF SCN numéro_SCN ;

Exemple d’une interrogation basée sur TIMESTAMP :
SQL> SELECT * FROM
AS OF TIMESTAMP SYSTIMESTAMP – INTERVAL ‘10’ MINUTE ;

SQL> SELECT * FROM ma_table
AS OF TIMESTAMP TO SYSTIMESTAMP (‘23/03/2010 07:00:00’, ‘DD/MM/YYYY
HH24:MI:SS’)

FLASHBACK niveau ligne

Rappel :
Le FLASHBACK niveau ligne possède trois variantes :
  • Requête (FLASHBACK QUERY) : Nous permet de lire les données telles qu’elles étaient à un instant donné du passé.
  • Version (FLASHBACK VERSION QUERY) : Nous permet de voir toutes les versions d’une ligne sur un certain intervalle de temps.
  • Transaction (FLASHBACK TRANSACTION QUERY) : Permet de voir les modifications réalisées par une ou plusieurs transactions sur un certain intervalle de temps.

Effectuer un FLASHBACK DROP

Rappel :
La variante du FLASHBACK DROP nous permet de récupérer une table avant sa suppression.

Syntaxe du FLASHBACK DROP :
FLASHBACK TABLE nom_de_la_table TO BEFORE DROP [RENAME TO nouveau_nom];

La corbeille se matérialise par une table du dictionnaire de données USER_RECYCLEBIN ou DBA_RECYCLEBIN qu’on peut interroger par un : SHOW RECYCLEBIN dans SQL Plus.

Attention : Les espaces des tables supprimées ne sont pas récupérés si on ne purge pas la corbeille.

La syntaxe du purge :
PURGE {INDEX | TABLE} nom_de_l_objet ;
PURGE TABLESPACE nom_du_tablespace [USER nom_de_l_utilisateur] ;
PURGE DBA_RECYCLEBIN ;

Effectuer un FLASHBACK TABLE

Rappel :
Le FLASHBACK niveau table (FLASHBACK TABLE) nous permet de restaurer une table à un état antérieur.

Syntaxe du FLASHBACK TABLE :
FLASHBACK TABLE nom_de_la_table TO {TIMESTAMP | SCN} expression [ENABLE TRIGGERS] ;

Pour pouvoir effectuer cette opération, il faut :
  • Avoir le privilège objet FLASHBACK sur la table ou bien le privilège système FLASHBACK ANY TABLE.
  • Activer l’option ENABLE ROW MOVEMENT de la table (la prise en charge des mouvements de lignes sur la table). [ALTER TABLE nom_de_la_table ENABLE ROW MOVEMENT]

Exemple d’un FLASHBACK TABLE :
SQL> DELETE FROM nom_de_la_table;
SQL> COMMIT;
SQL> FLASHBACK TABLE nom_de_la_table TO TIMESTAMP
SYSTIMESTAMP – INTERVAL ‘15’ MINUTE;

Suppression des points de restauration

Si vous souhaitez supprimer un point de restauration la syntaxe est très simple.

Exemple de suppression de notre point de restauration :
SQL> DROP RESTORE POINT AV_MOD;
Point de restauration supprimé.

Afficher les points de restauration

La vue V$RESTORE_POINT, nous renseignera sur tous nos points de restauration :

Exemple pour afficher tous nos points de restauration :
SQL> SELECT NAME, SCN, TIME, DATABASE_INCARNATION#
GUARANTEE_FLASHBACK_DATABASE,STORAGE_SIZE

FROM V$RESTORE_POINT;


Exemple pour afficher uniquement les points de restauration garantis :
SQL> SELECT NAME, SCN, TIME, DATABASE_INCARNATION#,
GUARANTEE_FLASHBACK_DATABASE, STORAGE_SIZE

FROM V$RESTORE_POINT

WHERE GUARANTEE_FLASHBACK_DATABASE='YES';

Utilisation des points de restauration garantis

Pour rappeler les points de restauration la syntaxe est très simple.

Exemple de rappel en FLASHBACK DATABASE :
SQL> FLASHBACK DATABASE TO RESTORE POINT AVANT_MODIFICATION;

Exemple de rappel en FLASHBACK TABLE :
SQL> FLASHBACK TABLE TO RESTORE POINT AVANT_MODIFICATION;

Création de points de restauration garantis

Les points de restaurations garantis ont pour but d’expliciter un point de sauvegarde qu’on peut rappeler avec un FLASHBACK DATABASE ou bien avec FLASHBACK TABLE.

Exemple de création d’un point de restauration normal :
SQL> CREATE RESTORE POINT AVANT_MODIFICATION;
Point de restauration crée.


Exemple de création d’un point de restauration garantis :
SQL> CREATE RESTORE POINT AV_MOD GUARANTEE FLASHBACK DATABASE;
Point de restauration crée.

Effectuer un FLASHBACK DATABASE

Afin d’effectuer une restauration complète de notre base de données en remontant simplement dans le temps (par exemple : 10 minutes avant l’incident), nous allons utiliser la fonctionnalité FLASHBACK DATABASE.

Pour cela, nous devons d’abord monter la base de données avec un STARTUP MOUNT, ensuite exécuter l’ordre SQL : FLASHBACK DATABASE TO TIMESTAMP … Puis, démarrer notre base de données avec l’ordre SQL : ALTER DATABASE OPEN RESETLOGS

Exemple :