Comment les user_tables peuvent-elles être verrouillées sur Oracle ?
-
13-12-2019 - |
Question
J'ai un traçage d'une machine sur laquelle la requête suivante semble rester bloquée pendant des jours :
SELECT table_name FROM user_tables
Qu'est-ce qui pourrait bien générer un tel verrou ?Les utilisateurs ne peuvent jamais modifier cette table ;et de nombreuses instances ultérieures de cette requête ont été exécutées avec succès.
La solution
Donc, puisque la condition n’existe plus, il n’y a aucun moyen de savoir ce qui s’est passé.
Cependant, à l'avenir, si cela ou quelque chose de similaire se reproduit, vous souhaiterez utiliser l'interface d'attente d'Oracle.Autrement dit, regardez V$SESSION
.
Tout d'abord, vous souhaiterez déterminer si le processus tourne (c'est-à-dire sur le processeur) ou se bloque (c'est-à-dire en attente d'un événement d'attente).La façon de déterminer cela est d'examiner le STATE
colonne:
- Si ETAT est
'WAITING'
, alors la session est bloquée.Si tel est le cas, la colonne EVENT doit décrire l'événement attendu par la session. - Si l'ÉTAT est autre chose que 'WAITING', alors la session est sur le CPU et la colonne EVENT est la dernière chose qu'elle a attendue.
- Si ETAT est
'WAITED KNOWN TIME'
, alors WAIT_TIME est le temps attendu en centisecondes. - Si ETAT est
'WAITED SHORT TIME'
, puis la session a attendu moins d'une centiseconde. - Si ETAT est
'WAITED UNKNOWN TIME'
, le temps d'attente n'est pas connu car timed_statistics a été défini sur FALSE pour la session.
- Si ETAT est
J'espère que cela pourra aider.