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; |
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 |