Traçabilité des opérations
La table emaj_hist
Toutes les opérations réalisées par E-Maj et qui modifient d’une manière ou d’une autre un groupe de tables sont tracées dans une table nommée emaj_hist.
Tout utilisateur disposant des droits emaj_adm ou emaj_viewer peut visualiser le contenu de la table emaj_hist.
La structure de la table emaj_hist est la suivante.
Colonne |
Type |
Description |
---|---|---|
hist_id |
BIGSERIAL |
numéro de série identifiant une ligne dans cette table historique |
hist_datetime |
TIMESTAMPTZ |
date et heure d’enregistrement de la ligne |
hist_function |
TEXT |
fonction associée à l’événement |
hist_event |
TEXT |
type d’événement |
hist_object |
TEXT |
nom de l’objet sur lequel porte l’événement (groupe, table, séquence,…) |
hist_wording |
TEXT |
commentaires complémentaires |
hist_user |
TEXT |
rôle à l’origine de l’événement |
hist_txid |
BIGINT |
numéro de la transaction à l’origine de l’événement |
La colonne hist_function peut prendre les valeurs suivantes.
Valeur |
Signification |
---|---|
ADJUST_GROUP_PROPERTIES |
ajustement du contenu de la colonne group_has_waiting_changes de la table emaj_group |
ASSIGN_SEQUENCE |
affectation d’une séquence à un groupe de tables |
ASSIGN_SEQUENCES |
affectation de séquences à un groupe de tables |
ASSIGN_TABLE |
affectation d’une table à un groupe de tables |
ASSIGN_TABLES |
affectation de tables à un groupe de tables |
CLEANUP_RLBK_STATE |
nettoyage du code état des opérations de rollback récemment terminées |
COMMENT_GROUP |
positionnement d’un commentaire sur un groupe |
COMMENT_MARK_GROUP |
positionnement d’un commentaire sur une marque |
COMMENT_ROLLBACK |
positionnement d’un commentaire sur un rollback E-Maj |
CONSOLIDATE_RLBK_GROUP |
consolide une opération de rollback tracé |
CREATE_GROUP |
création d’un groupe de tables |
DBLINK_OPEN_CNX |
ouverture d’une connexion dblink pour un rollback |
DBLINK_CLOSE_CNX |
fermeture d’une connexion dblink pour un rollback |
DELETE_MARK_GROUP |
suppression d’une marque pour un groupe de tables |
DISABLE_PROTECTION |
désactivation des triggers sur événements |
DROP_GROUP |
suppression d’un groupe de tables |
EMAJ_INSTALL |
installation ou mise à jour de la version d’E-Maj |
ENABLE_PROTECTION |
activation des triggers sur événements |
EXPORT_GROUPS |
export d’une configuration de groupes de tables |
EXPORT_PARAMETERS |
export d’une configuration de paramètres E-Maj |
FORCE_DROP_GROUP |
suppression forcée d’un groupe de tables |
FORCE_STOP_GROUP |
arrêt forcé d’un groupe de tables |
FORGET_GROUP |
effacement des traces d’un groupe de tables supprimé |
GEN_SQL_GROUP |
génération d’un script psql pour un groupe de tables |
GEN_SQL_GROUPS |
génération d’un script psql pour plusieurs groupes de tables |
IMPORT_GROUPS |
import d’une configuration de groupes de tables |
IMPORT_PARAMETERS |
import d’une configuration de paramètres E-Maj |
LOCK_GROUP |
pose d’un verrou sur les tables d’un groupe |
LOCK_GROUPS |
pose d’un verrou sur les tables de plusieurs groupes |
LOCK_SESSION |
pose d’un verrou sur les tables d’une session de rollback |
MODIFY_TABLE |
modification des propriétés d’une table |
MODIFY_TABLES |
modification des propriétés de tables |
MOVE_SEQUENCE |
déplacement d’une séquence vers un autre groupe de tables |
MOVE_SEQUENCES |
déplacement de séquences vers un autre groupe de tables |
MOVE_TABLE |
déplacement d’une table vers un autre groupe de tables |
MOVE_TABLES |
déplacement de tables vers un autre groupe de tables |
PROTECT_GROUP |
pose d’une protection contre les rollbacks sur un groupe |
PROTECT_MARK_GROUP |
pose d’une protection contre les rollbacks sur une marque d’un groupe |
PURGE_HISTORIES |
suppression des tables historisées des événements antérieurs au délai de rétention |
REMOVE_SEQUENCE |
suppression d’une séquence de son groupe de tables |
REMOVE_SEQUENCES |
suppression de séquences de leur groupe de tables |
REMOVE_TABLE |
suppression d’une table de son groupe de tables |
REMOVE_TABLES |
suppression de tables de leur groupe de tables |
RENAME_MARK_GROUP |
renommage d’une marque pour un groupe de tables |
RESET_GROUP |
réinitialisation du contenu des tables de log d’un groupe |
ROLLBACK_GROUP |
rollback des mises à jour pour un groupe de tables |
ROLLBACK_GROUPS |
rollback des mises à jour pour plusieurs groupes de tables |
ROLLBACK_SEQUENCE |
rollback d’une séquence |
ROLLBACK_TABLE |
rollback des mises à jour d’une table |
SET_MARK_GROUP |
pose d’une marque pour un groupe de tables |
SET_MARK_GROUPS |
pose d’une marque pour plusieurs groupes de tables |
SNAP_GROUP |
vidage des tables et séquences d’un groupe |
SNAP_LOG_GROUP |
vidage des tables de log d’un groupe |
START_GROUP |
démarrage d’un groupe de tables |
START_GROUPS |
démarrage de plusieurs groupes de tables |
STOP_GROUP |
arrêt d’un groupe de tables |
STOP_GROUPS |
arrêt de plusieurs groupes de tables |
UNPROTECT_GROUP |
suppression d’une protection contre les rollbacks sur un groupe |
UNPROTECT_MARK_GROUP |
suppression d’une protection contre les rollbacks sur une marque d’un groupe |
La colonne hist_event peut prendre les valeurs suivantes.
Valeur |
Signification |
---|---|
BEGIN |
début |
DELETED PARAMETER |
paramètre supprimé dans emaj_param |
END |
fin |
EVENT TRIGGER RECREATED |
trigger sur événement recréé |
EVENT TRIGGERS DISABLED |
triggers sur événement désactivés |
EVENT TRIGGERS ENABLED |
triggers sur événement activés |
GROUP CREATED |
nouveau groupe de tables créé |
INSERTED PARAMETER |
paramètre inséré dans emaj_param |
LOG DATA TABLESPACE CHANGED |
tablespace pour la table de log modifié |
LOG INDEX TABLESPACE CHANGED |
tablespace pour l’index de log modifié |
LOG_SCHEMA CREATED |
schéma secondaire créé |
LOG_SCHEMA DROPPED |
schéma secondaire supprimé |
MARK DELETED |
marque supprimée |
NOTICE |
message d’information issu d’un rollback |
PRIORITY CHANGED |
priorité modifiée |
SEQUENCE ADDED |
séquence ajoutée à un groupe de tables actif |
SEQUENCE MOVED |
séquence déplacée d’un groupe à un autre |
SEQUENCE REMOVED |
séquence supprimée d’un groupe de tables actif |
TABLE ADDED |
table ajoutée à un groupe de tables actif |
TABLE MOVED |
table déplacée d’un groupe à un autre |
TABLE REMOVED |
table supprimée d’un groupe de tables actif |
TABLE REPAIRED |
table réparée pour E-Maj |
TIME STAMP SET |
empreinte temporelle interne enregistrée |
TRIGGERS TO IGNORE CHANGED |
ensemble des triggers applicatifs à ignorer lors des rollbacks modifié |
UPDATED PARAMETER |
paramètre modifié dans emaj_param |
WARNING |
message d’avertissement issu d’un rollback |
Autres tables historiques
Plusieurs autres tables internes historisent les opérations :
emaj_version_hist conserve la trace des changements de version de l’extension ;
emaj_group_hist enregistre les créations et suppressions des groupes de tables ;
emaj_rel_hist conserve les assignations des tables et séquences aux groupes de tables ;
emaj_log_session enregistre les périodes durant lesquelles les groupes de tables sont actifs (démarrés) ;
et plusieurs tables supportant les opérations de rollback E-Maj.
Le client Emaj_web est le moyen le plus facile pour examiner le contenu de ces tables.
Purge des traces obsolètes
Quand un groupe de tables est démarré avec réinitialisation (fonction emaj_start_group()) ou quand les marques les plus anciennes sont supprimées (fonction emaj_delete_before_mark_group()), les événements les plus anciens de la plupart des tables d’historiques sont supprimés. Les événements conservés sont ceux postérieurs :
à un délai de rétention paramétrable,
à la pose de la plus ancienne marque,
et à la plus ancienne opération de rollback non terminée.
Par défaut, la durée de rétention des événements est de 1 an. Mais cette valeur peut être modifiée à tout moment en insérant par une requête SQL le paramètre history_retention dans la table emaj_param. Si le paramètre history_retention a une valeur supérieure ou égale à 100 ans, aucune purge des historiques n’est appliquée.
La purge des données périmées peut également être initiée par l’appel explicite de la fonction emaj_purge_histories() . La paramètre en entrée de cette fonction définit un délai de rétention qui surcharge le paramètre history_retention de la table emaj_param.
Pour planifier des purges régulières, il est donc possible de :
positionner une valeur de paramètre history_retention très élevée (par exemple “100 YEARS”) ;
et planifier les purges par un ordonnanceur quelconque (crontab, pgAgent, pgTimeTable ou tout autre outil).