Introduction
Imaginez une situation où vous avez besoin d’archiver toutes les données d’une seule table de votre base de données. Par exemple, vous travaillez à l’immigration et vous avez besoin d’historiser toutes les adresses où a habité les citoyens pour contrôler lors d’une demande de résidence permanente.
Comment vous envisagez de faire les choses ? Faire une seconde table identique à la vôtre et via votre application, faire un insert dans votre table clônée avec l’ancienne valeur. Un trigger qui se déclenche lors d’un UPDATE de votre table originale ?
Oubliez tout ça et adoptez la technologie native Oracle qui permet de le faire : Oracle Total Recall.
Présentation de Oracle Total Recall
Oracle Total Recall permet d’historiser toutes les valeurs d’une table durant sa vie. Grâce à la technologie Flashback, Oracle peut vous montrer l’état d’une ligne à un instant T que vous décidez.
Plus spécifiquement, les flashbacks version query vont vous permettre de consulter toutes les modifications apportées à vos données sur une table / tablespace bien précis.
Mise en place de Oracle Total Recall
Dans notre exemple, nous allons archiver les changements de valeur de la table departments dans le schéma hr. Ce dernier est situé dans le table EXAMPLE. Commencons par ouvrir un SQLPlus en tant que SYSDBA :
$ sqlplus / as sysdba
Une fois dans notre SQLPlus, nous allons créer une flashback archive et dire à notre table d’utiliser cette archive :
CREATE FLASHBACK ARCHIVE fla_arc_1 TABLESPACE EXAMPLE QUOTA 20M RETENTION 1 YEAR; ALTER TABLE HR.DEPARTMENTS FLASHBACK ARCHIVE fla_arc_1;
Test de Oracle Total Recall
Prenons par exemple le département portant l’ID 20;
SELECT department_name FROM hr.departments WHERE department_id=20; DEPARTMENT_NAME ----------------------------- Marketing
Un utilisateur révolté modifie volontairement le champ :
UPDATE hr.departments SET department_name='Escrocs' WHERE department_id=20; COMMIT;
On vérifie la nouvelle valeur :
SELECT department_name FROM hr.departments WHERE department_id=20; DEPARTMENT_NAME ----------------------------- Escrocs
Comment va t’on pouvoir voir l’ancienne valeur avant que l’utilisateur malveillant nous changent nos données : grâce à Total Recall ! Il suffit de lui demander la valeur de la colonne il y a 2 minutes :
SELECT department_name FROM hr.departments AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '2' MINUTE) WHERE department_id=20; DEPARTMENT_NAME ----------------------------- Marketing
Magique non ?

