ORA-00060: Deadlock detected while waiting for resource (interblocage détecté en attente de ressource)
OracleQue signifie cette erreur ?
Deux sessions ou plus sont en interblocage, chacune attendant une ressource détenue par l'autre. Oracle détecte le cycle, choisit une victime et annule (rollback) l'instruction de cette session.
Cause
Verrous de ligne acquis dans des ordres différents, mêmes lignes mises à jour de manière croisée par différentes transactions, verrous de table lors des mises à jour de la table parente dus à des clés étrangères non indexées, ou DML concurrent sur un index bitmap.
Comment la corriger
Examinez le fichier de trace (graphe) de l'interblocage référencé dans l'alert log pour trouver les instructions SQL et les lignes en conflit. Dans l'application, accédez toujours aux tables/lignes dans le même ordre. Indexez les colonnes de clé étrangère (les FK non indexées sont une cause classique d'interblocage). Gardez les transactions courtes et revoyez la fréquence des commits. Interceptez la transaction victime dans l'application et relancez-la.
Autres entrées pour ce moteur
- ORA-00001Unique constraint violated (contrainte unique violée)
- ORA-00054Resource busy and acquire with NOWAIT specified or timeout expired (ressource occupée ; NOWAIT spécifié ou délai expiré)
- ORA-01017Invalid username/password; logon denied (nom d'utilisateur/mot de passe invalide ; connexion refusée)
- ORA-01555Snapshot too old: rollback segment number too small (instantané trop ancien)
- ORA-01652Unable to extend temp segment by N in tablespace (impossible d'étendre le segment temporaire de N dans le tablespace)
- ORA-04031Unable to allocate N bytes of shared memory (impossible d'allouer N octets de mémoire partagée)