français

Erreur : ORA-00060: deadlock detected while waiting for resource

Message d'erreur

Les blocages Oracle se produisent lorsqu’une ou plusieurs sessions tentent d’acquérir une ressource dans un objet de base de données qui est actuellement détenu par une seconde session, qui tente également d’acquérir une ressource détenue par la première session.

Pour rompre ce blocage, Oracle libère la ressource détenue par une session et renvoie une erreur pour permettre à l’autre session de poursuivre. Ce faisant, un fichier de suivi pour la session incriminée est créé dans un répertoire, en fonction de la valeur du paramètre d’initialisation user_dump_dest.

Lorsque vous compressez une géodatabase versionnée, la commande de compression peut rencontrer l’erreur Oracle « ORA-00060: deadlock detected while waiting for resource » (ORA-00060 : blocage détecté pendant l’attente de la ressource).

Cause

Si l’erreur Oracle est générée au cours d’une compression, le blocage rencontré n’est pas de type traditionnel, où deux sessions rivalisent/bloquent des requêtes pour les mêmes objets de ligne à mettre à jour ou à supprimer, mais elles bloquent dans ce cas les emplacements ITL dans l’en-tête de bloc d’un segment.

Pour une description très détaillée du problème, consultez le document Oracle Metalink 62354.1 « TX Transaction locks - Example wait scenarios » sous la section, « Waits due to Insufficient 'ITL' slots in a Block ».

La condition de blocage rencontrée se situe probablement au niveau de la table state_lineages ou de l’un de ses deux index : lineages_pk ou lineage__id_idx2.

L’erreur se manifeste généralement uniquement lorsqu’une compression est exécutée alors qu’un nombre élevé d’utilisateurs mettent à jour simultanément la géodatabase versionnée.

Solution ou procédure de contournement

Pour résoudre l’erreur de blocage, l’utilisateur SDE doit recréer les index de la table state_lineage ou la table et augmenter la valeur du nombre initial d’emplacements de transaction dans l’en-tête de bloc des objets.

Par défaut, ArcGIS définit la valeur initrans sur 4 lors de la création de toutes les tables et des index utilisés par le versionnement. La valeur initrans est contrôlée dans le fichier dbtune.sde sous le mot-clé DATA_DICTIONARY, mais il n’est référencé que lorsque l’instance est créée à l’origine.

Pour augmenter la valeur initrans des index, l’utilisateur SDE recrée l’index et spécifie la nouvelle valeur.

Code :
SQL> ALTER INDEX lineages_pk REBUILD INITRANS 8;

Index modifié.

SQL> ALTER INDEX lineages_id_idx2 REBUILD INITRANS 8;

Index modifié.


Pour augmenter la taille dans la table state_lineages, modifiez la table.

Code :
SQL> ALTER TABLE state_lineages INITRANS 8;

Table modifiée.


La limite avec la table est que la modification n’affecte pas les blocs de données existants. La modification est appliquée uniquement aux nouveaux blocs ajoutés lorsque la table s’agrandit. Si le blocage se produit sur la table et que la modification de la table ne permet pas de résoudre le problème, alors la table même doit être exportée, supprimée et recréée. Vous devrez également définir une valeur initrans plus élevée et réimporter les lignes dans la nouvelle table.

Une valeur initrans de 8 doit être suffisante, mais pour les organisations de plus grande ampleur avec beaucoup d’éditeurs simultanés, elle risque encore de ne pas suffire. L’administrateur de base de données (DBA) Oracle doit surveiller cette instance et rechercher la fréquence des conditions de blocage en attente d’emplacements ITL. Si l’événement d’attente est courant, la valeur doit encore être augmentée. Pour savoir comment surveiller les conditions de blocage, consultez la documentation Oracle.

    Informations associées