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 si editeur 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 champs oid_editeur et editeur 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 si lecteur 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 champs oid_lecteur et lecteur 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.

Schéma

z_asgard_admin

Seuls g_admin[2] et ses membres sont habilités à utiliser cette fonction.

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.