Rédacteur: V. Fenoll DBA Oracle Montreal & Oracle Doc.
Navigation temporelle et sur 3 niveaux
Temporelle :
– Flashback query : interroger toutes les données à un point dans le temps.
– Flashback versions query : afficher toutes les versions des lignes entre 2 instants, ainsi que les transactions qui ont modifié la ligne.
– Flashback transaction query : afficher toutes les modifications apportées par une transaction
Récupération à tous les niveaux :
– DB : Flashback database
– Table : Flashback table et Flashback drop
– Ligne: Flashback query (9i : restaurer des lignes)
Architecture
Utilise un nouveau type de fichier journal : les « journaux flashback » contiennent les images « avant » des blocs de données.
Nouveau processus : RVWR qui va puiser dans la nouvelle zone mémoire tampon flashback.
Lors d’une restauration :
– application des journaux flashbacks
– application des archives logs
Pour les bases volumineuses, il erst recommandé de positionner LOG_BUFFER = 8M pour garantir un flashback buffer de 16M.
Configurer Flashback Database
Dans EM, onglet maintenance + backup/recovery + recovery settings.
La base doit être en mode ARCHIVELOG et mount : activer la journalisation flashback.
Il est possible de faire un flashback DB à partir de EM.
SQL> ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=2880; (min)
SQL> ALTER DATABASE FLASHBACK ON | OFF;
Les 2880 minutes sont un objectifs uniquement et n’offre aucune garantie.
SELECT flashback_on from v$database ;
( Yes|no)
Flashback Database : exemples
Base en état mount.
Il est possible d’utiliser RMAN ou SQL*Plus, mais attention, les commandes ne sont pas exactement les mêmes.
SQL> FLASHBACK DATABASE to timestamp (sysdate-1/24) ;
SQL> to SCN 45678;
RMAN permet en plus la recuperation via SEQ:
RMAN> FLASHBACK DATABASE to sequence=223 thread=1;
RMAN> FLASHBACK DATABASE to scn=4153456;
RMAN> FLASHBACK DATABASE to time = to_date (___);
Surveiller la base de données flashback
V$FLASHBACK_DATABASE_LOG
– estimated_flashback_size : estimation
– flashback_size : taille réèlle
– oldest_flashback_scn, oldest_flashback_time: jusqu’à quand on peut remonter
V$FLASHBACK_DATABASE_STAT
Pour surveiller la surcharge liée à la journalisation ; 24h d’infos, chaque ligne représente un intervalle d’une heure.
Vue utile pour déterminer les changements de fréquence dans la génération des données flashback
Exclure un TS de flashback database
ALTER TABLESPACE test FLASHBACK OFF
Select flashback_on from v$tablespace ;
Avant de faire le flashback, il faudra mettre ce TS OFFLINE.
Flashback database : considérations
Après une opération de flashback, ouvrir la base en lecture seule pour vérifier l’heure ou le SCN, puis faire un resetlogs pour l’ouvrir en modification.
Flashback database ne peut pas être utilisé si :
– Le fichier de contrôle a été restauré ou recréé
– Un TS a été supprimé
– Un DF a fait l’objet d’une récupération d’espace
Flashback drop
Annule une instruction DROP TABLE.
Paramètre RECYCLEBIN = ON
La table et les contraintes sont renommées.
La corbeille est une table qui gère les correspondances entre les noms originaux et les noms générés par le système.
Depuis EM : Maintenance + backup/recovery + recovery + Table + Flashback dropped tables.
select USER | DBA_RECYCLEBIN original_name, type, droptime, space, …,
where can_undrop = ‘YES’;
SQL> show recyclebin
Restaurer des tables à partir de la corbeille
Restaure également les objets dépendants.
Si utilisation du nom d’origine, le système applique le principe LIFO pour déterminer la table à restaurer.
Il est également possible de modifier le nom d’origine.
FLASHBACK TABLE matable TO BEFORE DROP [RENAME TO table2];
Attention: Après restauration d’une table, les index et triggers gardent le nom unique (de la corbeille).
Corbeille : Stratégie de récupération de l’espace
Purge manuelle :
PURGE TABLESPACE ts1
PURGE [USER_ | DBA_] RECYCLEBIN
Purge automatique et allocation d’espace, dans ces ordre:
Espace libre ne correspondant pas à des objets de la corbeille
Objets de la corbeille dans l’ordre FIFO
Espace libre alloué par auto-extension
Contourner la corbeille
DROP TABLE t1 PURGE ;
DROP TS including contents ;
DROP user cascade ;
Les objets associés de la corbeille sont purgés automatiquement.
Interroger des tables supprimées
DBA_TABLES : DROPPED = YES
select name from dba_tables where dropped=’yes’
Lire les données de la table supprimée:
select * from “BIN$sfddfsc”;
SQL> desc dba_recyclebin
Name Null? Type
—————————————– ——– —————————-
OWNER NOT NULL VARCHAR2(30)
OBJECT_NAME NOT NULL VARCHAR2(30)
ORIGINAL_NAME VARCHAR2(32)
OPERATION VARCHAR2(9)
TYPE VARCHAR2(25)
TS_NAME VARCHAR2(30)
CREATETIME VARCHAR2(19)
DROPTIME VARCHAR2(19)
DROPSCN NUMBER
PARTITION_NAME VARCHAR2(32)
CAN_UNDROP VARCHAR2(3)
CAN_PURGE VARCHAR2(3)
RELATED NOT NULL NUMBER
BASE_OBJECT NOT NULL NUMBER
PURGE_OBJECT NOT NULL NUMBER
SPACE NUMBER
Il est impossible d’effectuer des opérations LMD ou LDD sur des objets se trouvant dans la corbeille.
Flashback drop : Considérations
Tables protégées :
– Autres que SYSTEM
– TS locally managed
– N’utilisent pas de stratégies FGA ou VPD
Dépendances non protégées :
– Index de jointure Bitmap
– Contraintes d’intégrité référentielles
– Index supprimés avant les tables
Les tables purgées ne peuvent pas faire l’objet d’un flashback.
Flashback versions Query
Interroger la base de données à un instant donné ou à un SCN donné : utilisation de la clause VERSIONS.
Les lignes renvoyées représentent l’historique des changements.
Dans EM : Onglet maintenance + Perform Recovery + Tables
Flashback versions Query : Syntaxe
SELECT [pseudo_columns]
FROM tables1
VERSIONS BETWEEN
{ SCN | TIMESTAMP { MINVALUE and MAXVALUE }
[AS OF {SCN | TIMESTAMP expr}]
WHERE [pseudo_columns]
Pseudo columns:
Limite inférieure de la plage de validité de la version
VERSIONS_STARTTIME
VERSIONS_STARTSCN
Limite supérieure de la plage de validité de la version
VERSIONS_ENDTIME
VERSIONS_ENDSCN
Identifiant de transaction ayant créé la version
VERSIONS_XID
Opération ayant généré la version
VERSIONS_OPERATION
Ex :
SELECT versions_XID, versions_startscn, versions_endscn,
versions_opérations,
First_name
FROM EMP
VERSIONS BETWEEN SCN MINVALUE and MAXVALUE
AS OF SCN 45889621 (MAXVALUE, si pas de AS OF: sysdate)
WHERE employee_id=5;
Operation = Insert
= Delete
= Update
Flashback versions Query : Considérations
VERSIONS ne peut pas être utilisée pour interroger :
– Tables externes
– Tables temporaires
– Vues V$
– Vues
On ne peut pas obtenir les versions de lignes après la date d’une opération LDD (on a tout même les lignes avant l’opération LDD).
Les opérations de récupération d’espace sont filtrées (supprimées de la liste des versions car les données n’ont pas changées).
Flashback Transaction Query
Utilisation de la vue FLASHBACK_TRANSACTION_QUERY pour déterminer toutes les instructions SQL nécessaires pouvant être utilisées pour annuler les modifications apportées par une transaction spécifique ou au cours d’une période particulière.
Flashback Transaction Query offre un moyen plus rapide que LogMiner pour générer les SQL d’annulation car il utilise également un chemin d’accès indexé pour annuler les données.
select operation, undo_sql, table_name from FLASHBACK_TRANSACTION_QUERY
where XID = … (numéro de transaction)
|
where start_timestamp >= … and commit_timestamp <= … (intervalle de temps)
order by undo_change#;
Privilège: SELECT ANY TRANSACTION
Dans EM: Recovery wizard + Perform object level recovery + SCN
Utilisation conjointe de Flashback Versions et Transaction Query
SELECT versions_XID, First_name
FROM EMP
VERSIONS BETWEEN SCN MINVALUE and MAXVALUE
AS OF SCN 45889621
WHERE employee_id=5;
Puis
SELECT operation, undo_sql, table_name from FLASHBACK_TRANSACTION_QUERY
where XID = hextoraw(‘8C545623684A54’);
Flashback Transaction Query : Considérations
Les opérations LDD sont considérées comme des opérations de mises à jour du dictionnaire.
Les update de clé primaire sur IOT : considérées comme Delete + Insert
Les objets supprimés apparaissent comme des numéros d’objets
Les utilisateurs supprimés apparaissent comme des identificateurs d’utilisateurs.
Il peut être nécessaire d’ajouter des « supplemental logs » (ALTER DATABASE ADD SUPPLEMENTAL LOG DATA) en particulier pour prendre en charge les lignes chainées ou les tables en cluster.
Flashback table
Récupération de tables jusqu’à un point dans le temps.
C’est une instruction atomique ; toutes les tables sont récupérées ou aucune.
EM : Maintenance + Perform recovery + Object type = Table + Operation type = Flashback existing table.
Il est nécessaire d’avoir “ENABLE ROW MOVEMENT” car Flashback table utilise des opérations LMD et ne préserve pas les ID de ligne.
FLASHBACK TABLE emp TO TIMESTAMP (sysdate-1);
FLASHBACK TABLE emp, dept TO SCN 54454 ENABLE TRIGGERS;
Il n’y a pas de rollback possible sur les opérations de flashback. Pour revenir en arrière il faut donc faire un nouveau Flashback en utilisant le SCN de la base d’origine (colonne CURRENT_SCN de V$DATABASE).
Flashback table : considérations
Transaction unique.
Des verrous externes LMD sont acquis.
Les stats ne sont pas soumises au flashback.
Les index actuels et les objets dépendants sont conservés.
L’opération est écrite dans l’alerte.
L’intégrité des données est conservée.
Ne fonctionne pas sur les tables externes.