Dimanche 12 septembre 2010 7 12 /09 /Sep /2010 02:12

 

Oracle FLASHBACK VERSIONS QUERY.

Comment connaitre la valeur d'un champs de table il y a de cela 10 minutes ?.
Comment connaitre l'historique des versions de lignes modifiées ?.

FLASHBACK QUERY et FLASHBACK VERSIONS QUERY permettent d'interroger les différentes versions d'une ligne dans une table dans un intervalle de temps.

FLASHBACK VERSIONS QUERY :

• est un mécanisme d'interrogation uniquement.
• n'indique pas ce qui a changé.
• ne fonctionne pas si des opérations DDL ont eu lieu dans la table.
• ne peut pas interroger au delà de la valeur de UNDO_RETENTION.

Une demonstration dans laquelle je vais effectuer 5 mises à jour sur un champ d'une table et ensuite afficher les versions par temps et SCN.

Valeur initiale du champ.

 

SQL> SELECT soc_code, soc_raison_soc FROM societe WHERE soc_code=49;

soc_code soc_raison_soc
49 DBACENTER

 

Update de la ligne.

 

SQL> UPDATE societe SET soc_raison_soc='Update 1' WHERE soc_code=49;
SQL> commit;
SQL> UPDATE societe SET soc_raison_soc='Update 2' WHERE soc_code=49;
SQL> commit;
SQL> UPDATE societe SET soc_raison_soc='Update 3' WHERE soc_code=49;
SQL> commit;
SQL> UPDATE societe SET soc_raison_soc='Update 4' WHERE soc_code=49;
SQL> commit;
SQL> UPDATE societe SET soc_raison_soc='Update 5' WHERE soc_code=49;
SQL> commit;

 

Interrogation avec VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE.

 
SELECT soc_code,
       soc_raison_soc,
       VERSIONS_STARTTIME,
       VERSIONS_ENDTIME,
       VERSIONS_OPERATION DML,
       VERSIONS_STARTSCN 
FROM societe 
VERSIONS BETWEEN TIMESTAMP
systimestamp - INTERVAL '11' MINUTE
AND systimestamp - INTERVAL '1' MINUTE
WHERE soc_code = 49;
soc_code soc_raison_soc VERSIONS_STARTTIME VERSIONS_ENDTIME DML VERSIONS_STARTSCN
49 Update 5 12/09/2010 02:56:33.   U 3957445
49 Update 4 12/09/2010 02:56:21. 12/09/2010 02:56:33. U 3957434
49 Update 3 12/09/2010 02:56:12. 12/09/2010 02:56:21. U 3957430
49 Update 2 12/09/2010 02:56:03. 12/09/2010 02:56:12. U 3957426
49 Update 1 12/09/2010 02:55:33. 12/09/2010 02:56:03. U 3957415
49 DBACENTER 12/09/2010 02:54:56. 12/09/2010 02:55:33. U 3957397

Pour une interrogation par SCN utilisez : VERSIONS BETWEEN SCN 3957397 AND 3957445

Description des pseudos colonnes.

VERSIONS_STARTTIME = Premier timestamp de la version
VERSIONS_STARTSCN = Premier SCN de la version
VERSIONS_ENDTIME = Fin timestamp de la version
VERSIONS_ENDSCN = Dernier SCN de la version
VERSIONS_OPERATION = Type d'opération DML de la version

 

FLASHBACK QUERY.

Autre variante d'interrogation unique, qu'elle était la version en cours il y 5 minutes avec AS OF TIMESTAMP.

 
SELECT * 
FROM societe 
AS OF TIMESTAMP systimestamp - INTERVAL '5' MINUTE
WHERE soc_code=49;

ou

 
SELECT * 
FROM societe 
AS OF SCN 3957426
WHERE soc_code=49;

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Oracle FLASHBACK TRANSACTION QUERY
• SCN System Change Number Oracle
• FLASHBACK et DROP TABLE avec RECYCLEBIN
Par Daniel Roesch - Publié dans : TABLES - INDEX
Ecrire un commentaire - Voir les 0 commentaires
Retour à l'accueil

Rechercher Articles Oracle SQL sur ce Site.

Loading

À lire aussi…

Download PDF Oracle

Rechercher sur le site

Oracle 10G - DBA -

Syndication

  • Flux RSS des articles
Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus - Articles les plus commentés