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.

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
ALTER_GROUP modification d’un groupe de tables
ALTER_GROUPS modification de plusieurs groupes de tables
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
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_EVENT_TRIGGERS 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_EVENT_TRIGGERS 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
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
SYNC_DEF_GROUP synchronisation de la table emaj_group_def
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
EMAJ_GROUP_DEF SYNCHRONIZED groupe de tables synchronisé dans emaj_group_def
END fin
EVENT TRIGGERS DISABLED triggers sur événements désactivés
EVENT TRIGGERS ENABLED triggers sur événements 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
UPDATED PARAMETER paramètre modifié dans emaj_param
WARNING message d’avertissement issu d’un rollback

Le contenu de la table emaj_hist peut être visualisé par quiconque dispose des autorisations suffisantes (rôles super-utilisateur, emaj_adm ou emaj_viewer)

Autres données de trace

Deux autres tables internes conservent également des traces des opérations effectuées :

  • emaj_alter_plan liste les actions élémentaires réalisées lors de l’exécution d’opérations de modification de groupes de tables,
  • emaj_rlbk_plan liste les actions élémentaires réalisées lors de l’exécution d’opérations de rollback E-Maj.

Purge des traces obsolètes

A chaque démarrage de groupe (fonction emaj_start_group()) et suppression des marques les plus anciennes (fonction emaj_delete_before_mark_group()), les événements les plus anciens de la table emaj_hist sont supprimés. Les événements conservés sont ceux à la fois postérieurs à un délai de rétention paramétrable, postérieurs à la pose de la plus ancienne marque active et postérieurs à 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. La même rétention s’applique aux contenus des tables qui historisent les actions élémentaires des opérations de modification ou de rollback de groupes de tables.

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.

Si on souhaite 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”), afin que les démarrages de groupe de tables ou les suppressions des plus anciennes marques ne déclenchent pas de purge, et
  • planifier par un ordonnanceur quelconque (crontab, pgAgent, pgTimeTable ou tout autre outil) les purges.