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
creationest mis àTruesi le schéma existe dans la base, àFalsesinon.Le champ
oid_schema(identifiant système du schéma) est mis àNULLsi 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 àNULLsi 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
producteurest 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 àNULLsi le schéma n'existe pas. Sinon, et siediteurest renseigné,oid_editeurest mis à jour avec l'OID de ce rôles s'il existe. Si le rôle n'existe pas, les champsoid_editeuretediteursont tous deux mis àNULL.Le champ
oid_lecteur(identifiant système du rôle lecteur) est mis àNULLsi le schéma n'existe pas. Sinon, et silecteurest renseigné,oid_lecteurest mis à jour avec l'OID de ce rôles s'il existe. Si le rôle n'existe pas, les champsoid_lecteuretlecteursont 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.