Mardi 14 septembre 2010 2 14 /09 /Sep /2010 01:15

 

Comment annuler une transaction avec FLASHBACK TRANSACTION QUERY.

Comment récupérer l'instruction UNDO SQL qui permettra d'annuler une transaction ?.
Avec Logminer ( dbms_logmnr ) ? Non.

Pour voir les modifications réalisées par une transaction sur un intervalle Temps, nous pouvons interroger la vue FLASHBACK_TRANSACTION_QUERY.

Une demonstration dans laquelle je vais effectuer 1 mise à jour sur un champ de table et ensuite avec FLASHBACK VERSIONS et FLASHBACK TRANSACTION je vais récupérer l'UNDO SQL  à partir de la colonne VERSIONS_XID (Identifiant de la transaction).

Attention, vous devez avoir le privilège SELECT ANY TRANSACTION

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;

 

Interrogation avec FLASHBACK VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE.

 
SELECT soc_code,
       soc_raison_soc,
       VERSIONS_STARTTIME,
       VERSIONS_ENDTIME,
       VERSIONS_OPERATION DML,
       VERSIONS_XID 
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_XID
49 Update 1 14/09/2010 01:37:53.   U 0A000D00C7060000
49 DBACENTER   14/09/2010 01:37:53.    

Pour une interrogation par SCN utilisez : VERSIONS BETWEEN SCN xxxxx AND xxxx

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_OPERATION = Type d'opération DML de la version
VERSIONS_XID = Identifiant transaction

 

FLASHBACK TRANSACTION QUERY.

On récupère l'identifiant de la transaction ( VERSIONS_XID ) et on interroge la vue FLASHBACK_TRANSACTION_QUERY.

 
SELECT   operation, undo_sql, table_name
FROM   FLASHBACK_TRANSACTION_QUERY
WHERE  XID = HEXTORAW ('0A000D00C7060000');
OPERATION UNDO_SQL TABLE_NAME
UPDATE update "DBA"."SOCIETE" set "SOC_RAISON_SOC" = 'DBACENTER' where ROWID = 'AAANB6AAFAADmRsAAA'; SOCIETE
BEGIN    

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Oracle FLASHBACK VERSIONS QUERY
• Lire les REDO LOG Oracle avec LOGMINER (dbms_logmnr)
• 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