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).