Bonjour,
Dans le cadre d'un projet dans ma boite on va mettre en place des tables de journaling pour pouvoir monitorer les mises à jour effectuées sur une BD pendant l'exectution d'un ou plusieurs traitements.
En ayant un modèle de donnée de la forme :
Table1
Clef Champ11
Data Champ12
Apres déclaration de la table suivante :
Journal_Table1
Clef Type_maj
Champ11
Data Champ12
Avec Type_maj qui serait un champ alimenté avec 'D' pour delete, 'U' pour update et 'I' pour Insert.
A l'aide de trigger on va faire les opérations suivantes :
- En cas d'insert dans Table1 :
de faire un select dans Journal_Table1 avec Type_maj = 'D' et d'y supprimer l'instance si elle est trouvée et de faire un insert des même données dans Journal_table1 avec Type_maj = 'U'
sinon de faire un insert dans Journal_Table1 avec Type_maj = 'I'
- En cas d'update sur une instance de Table1 :
de faire un select dans Journal_Table1 avec Type_maj = 'I' et d'y updater l'instance si elle est trouvée,
sinon, de faire un select dans Journal_table1 avec Type_maj = 'U' d'y updater l'instance si elle est trouvée,
sinon, d'inserer l'instance updaté dans Journal_table1 avec Type_maj = 'U'.
- En cas de delete sur Table1 :
de faire un select sur Journal_Table1 avec Type_maj = 'I' et dy détruire linstance si elle est trouvée
sinon de faire un select sur Journal_Table1 avec Type_maj = 'U' et dy détruire linstance si elle est trouvée en l'inserant dans Journal_Table1 avec Type_maj = 'D'
sinon de faire un insert de linstance supprimée dans Journal_Table1 avec Type_maj = 'D'
A la fin on devrait donc être en mesure de matérialiser :
- les instances qui n'existaient pas et qui existent maintenant,
- les instance qui existent maintenant et qui n'existaient pas,
- les instances qui ont été modifiées.
Par contre, on va devoir faire aussi des tests de performance et ces tables de journaling risquent de fausser les résultats.
J'ai donc besoin de pouvoir désactiver ces trigger de manière assez souple.
ex : si je fait un test fonctionnel je lance mes traitement après avoir activé les triggers sinon, si je suis sur un test de perf, je lance mes traitements après les avoir désactivés.
Je pourrais conditionner l'exectution des trigger par la présence d'une instance dans une table spécifique du SGBD mais je crains que cela ne soit pas neutre sur la rapidité du traitement.
Est-ce que vous voyez une autre solution qui serait totalement neutre (ou vraiment non-significative) ?
Merci d'avance.
A+