asgard_nettoyage_oids
fonction qui recalcule les identifiants système des schémas et rôles référencés dans la table de gestion
z_asgard_admin.asgard_nettoyage_oids()
La fonction asgard_nettoyage_oids
recalcule les identifiants systèmes (OID) des schémas et rôles référencés dans la table de gestion[1].
Partant du nom du schéma renseigné dans le champ nom_schema
, elle procède aux corrections suivantes dans la table z_asgard_admin.gestion_schema
:
Le champ
creation
est mis àTrue
si le schéma existe dans la base, àFalse
sinon.Le champ
oid_schema
(identifiant système du schéma) est mis àNULL
si le schéma n'existe pas, sinon sa valeur est actualisée pour correspondre à l'OID du schéma.Le champ
oid_producteur
(identifiant système du rôle producteur) est mis àNULL
si le schéma n'existe pas, sinon sa valeur est actualisée pour correspondre à l'OID du rôle propriétaire du schéma.Si le schéma existe, le champ
producteur
est actualisé pour correspondre au nom du rôle propriétaire du schéma.Le champ
oid_editeur
(identifiant système du rôle éditeur) est mis àNULL
si le schéma n'existe pas. Sinon, et siediteur
est renseigné,oid_editeur
est mis à jour avec l'OID de ce rôles s'il existe. Si le rôle n'existe pas, les champsoid_editeur
etediteur
sont tous deux mis àNULL
.Le champ
oid_lecteur
(identifiant système du rôle lecteur) est mis àNULL
si le schéma n'existe pas. Sinon, et silecteur
est renseigné,oid_lecteur
est mis à jour avec l'OID de ce rôles s'il existe. Si le rôle n'existe pas, les champsoid_lecteur
etlecteur
sont tous deux mis àNULL
.
Conseil :
Les champs d'identifiants système de la table de gestion sont indispensables au bon fonctionnement d'ASGARD. Les mécanismes automatisés d'Asgard prennent en charge leur calcul et leur actualisation automatique, veillant à ce qu'ils correspondent toujours à des identifiants valides désignant le bon objet de la base. Ceci vaut également lors de la restauration de la base, où tous les objets reçoivent généralement de nouveaux identifiants. Ces mécanismes reposent sur des déclencheurs qui, accidentellement ou pour des raisons légitimes, peuvent se trouver temporairement désactivés, ce qui inhibe la mise en cohérence des identifiants. Il est alors fortement conseillé d'appliquer la présente fonction, qui a par ailleurs pour effet de réactiver les déclencheurs asgard_on_modify_gestion_schema_before
et asgard_on_modify_gestion_schema_after
de z_asgard_admin.gestion_schema
.
Deux anomalies sont particulièrement symptomatiques d'un problème de cohérence des OIDs et justifient d'exécuter au plus vite cette fonction :
Un schéma a été référencé dans la table gestion, mais son rôle producteur n'est pas automatiquement rendu propriétaire des nouveaux objets créés dans ce schéma.
L'apparition inexpliquée d'erreurs avec des messages tels que « erreur de syntaxe sur ou près de « x » », où x est un nombre.
Attention :
asgard_nettoyage_oids
peut avoir des effets délétères dans un cas spécifique : lorsque les OID sont corrects (son application est donc inutile) et certains rôles éditeurs et/ou lecteurs de schémas ont changé de nom sans que la table de gestion n'ait encore été mise à jour en conséquence - cf. Modification des rôles. Dans ce cas, la fonction considèrera à tort que les rôles concernés n'existent pas et effacera leurs (anciens) noms de la table de gestion. Les privilèges des rôles sur les objets de la base ne seront pas affectés, mais ils ne seront plus explicitement identifiés comme lecteurs ou éditeurs dans la table de gestion.
Contrairement à asgard_nettoyage_roles
, qui est une fonction de maintenance dont l'application régulière est bienvenue, asgard_nettoyage_oids
est un utilitaire de résolution de problème qui ne doit être utilisé que dans les cas évoqués ci-avant, en cas de dysfonctionnement avéré ou de risque fort de perte de cohérence.
Syntaxte⚓
SELECT z_asgard_admin.asgard_nettoyage_oids() ;
Cette fonction ne prend pas d'argument.
Résultat⚓
« __ NETTOYAGE REUSSI. » si la requête s'est exécutée normalement.
Cette fonction traite tous les enregistrements de la table z_asgard_admin.gestion_schema
. Elle ne fournit pas le détail des modifications réalisées dans cette table. Elle n'a par ailleurs aucun effet sur l'état de la base : elle n'entraîne pas de création ou suppression d'objets, ne modifie pas leurs caractéristiques, ne change pas les propriétaires ni les privilèges.