Flash Back Any Error

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.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.