Le FLASHBACK ARCHIVE

Les opérations « FLASHBACK QUERY » sont toutes tributaires du tablespace de type « UNDO » mais pas seulement, les modifications des tables sont également une source d’erreur. L’objet archive de données flashback permet le stockage des données d’annulation dans un ou plusieurs tablespaces. Le stockage indépendant des blocs « UNDO » est assuré par le processus d’arrière plan « FBDA »  et démarre automatiquement à la création de la première archive de données flashback.

en savoir

Une archive n’est rien d’autre qu’un ensemble des tablespaces que vous consacrez à l’enregistrement de toutes les modifications pour une ou plusieurs tables dans la base de données. Il est préférable de ne dédier les tablespaces que vous utilisez pour les archives de données flashback qu’à l’archive.

La syntaxe de création d’une archive de données flashback est :

{CREATE|ALTER} FLASHBACK ARCHIVE [DEFAULT] nom_archive

   [ADD] TABLESPACE nom [QUOTA valeur {K|M|G|T}]

            RETENTION valeur {YEAR|MONTH|DAY};

Vous ne pouvez pas spécifier plusieurs tablespaces à la fois, l’option « ADD » est uniquement utilisée pour la commande « ALTER ».

L’archive de données flashback ne stocke pas tous les blocs des segments « UNDO », mais seulement ceux des tables qui ont été attachées à l’aide de la syntaxe suivante :

{CREATE|ALTER} TABLE nom_table … [NO] FLASHBACK ARCHIVE nom_archive;

L’utilisation de l’archive de données flashback permet les « FLASHBACK QUERY » même si les tables sont modifiées. Les modifications autorisées sont :

L’ajout des colonnes.

L’effacement des colonnes et des partitions.

Le changement de nom des colonnes.

Le changement du nom de la table.

L’exécution de la commande « TRUNCATE » pour les tables ou les partitions.

Vous pouvez interroger les vues « DBA_FLASHBACK_ARCHIVE » et « DBA_FLASHBACK_ARCHIVE_TS » pour afficher les informations sur les archives de données flashback et respectivement les tablespaces utilisés par ces archives.

SYS@agate>create tablespace tbs_adf01 datafile

  2  size 2g autoextend on next 512M maxsize unlimited;

 

Tablespace créé.

 

SYS@agate>create tablespace tbs_adf02 datafile

  2  size 2g autoextend on next 512M maxsize unlimited;

 

Tablespace créé.

 

SYS@agate>create tablespace tbs_adf03 datafile

  2  size 2g autoextend on next 512M maxsize unlimited;

 

Tablespace créé.

 

SYS@agate>create flashback archive default adf01

  2  tablespace tbs_adf01 retention 2 year;

 

Archive Flashback créée.

 

SYS@agate>alter flashback archive adf01 add tablespace tbs_adf02;

 

Archive Flashback modifiée.

 

SYS@agate>alter flashback archive adf01 add tablespace tbs_adf03;

 

Archive Flashback modifiée.

 

SYS@agate>select owner_name, flashback_archive_name nom,

  2  retention_in_days jours, status, create_time

  3  from dba_flashback_archive;

 

OWNER_NA NOM           JOURS STATUS  CREATE_TIME

-------- -------- ---------- ------- ---------------------------

SYS      ADF01           730 DEFAULT 15/07/10 18:05:50,000000000

 

SYS@agate>select flashback_archive_name nom,

  2  tablespace_name tablespace, quota_in_mb

  3  from dba_flashback_archive_ts;

 

NOM      TABLESPACE                     QUOTA_IN_MB

-------- ------------------------------ ------------------------

ADF01    TBS_ADF01

ADF01    TBS_ADF02

ADF01    TBS_ADF03

Vous pouvez interroger la vue « DBA_FLASHBACK_ARCHIVE_TABLES » pour afficher les informations sur les tables qui sont gérées avec les archives de données flashback.

STAG@agate>create table dc_sav as

  2  select * from details_commandes;

 

Table créée.

 

STAG@agate>alter table dc_sav flashback archive adf01;

 

Table modifiée.

 

STAG@agate>select table_name nom, owner_name,

  2  archive_table_name a_nom,

  3  flashback_archive_name fa_nom, status

  4  from dba_flashback_archive_tables;

 

NOM      OWNER_NA A_NOM              FA_NOM   STATUS

-------- -------- ------------------ -------- --------

DC_SAV   STAG     SYS_FBA_HIST_80427 ADF01    ENABLED

 

STAG@agate>select current_scn from v$database;

 

CURRENT_SCN

-----------

   12540349

 

STAG@agate>truncate table dc_sav;

 

Table tronquée.

 

STAG@agate>truncate table details_commandes;

 

Table tronquée.

 

STAG@agate>select * from details_commandes as of scn 12540349

  2  where no_commande = 10747;

select * from details_commandes as of scn 12540349

              *

ERREUR à la ligne 1 :

ORA-01466: lecture des données impossible - définition de table modifiée

 

STAG@agate>insert into details_commandes select * from dc_sav

  2   as of scn 12540349;

 

2155 ligne(s) créée(s).

 

STAG@agate>commit;

 

Validation effectuée.

 

STAG@agate>select segment_name nom, tablespace_name tablespace,

  2  bytes/1024/1024 "Taille"

  3  from dba_segments

  4  where tablespace_name in ('TBS_ADF01','TBS_ADF02','TBS_ADF03');

 

NOM                              TABLESPACE                  Taille

-------------------------------- ------------------------ ----------

SYS_FBA_DDL_COLMAP_80427         TBS_ADF01                    ,0625

SYS_FBA_TCRV_80427               TBS_ADF01                    ,0625

SYS_FBA_HIST_80427               TBS_ADF01                     ,125

SYS_FBA_TCRV_IDX_80427           TBS_ADF01                    ,0625

La table « DC_SAV » créée à l’origine à partir de la table « DETAILS_COMMANDES » est gérée à l’aide de l’archive de données flashback « ADF01 ». L’opération « TRUNCATE » n’affecte pas les interrogations « FLASHBACK QUERY » de la table « DC_SAV », mais ce n’est pas le cas pour la table « DETAILS_COMMANDES ».