ORA-00054: resource busy et d'acquérir avec NOWAIT spécifié

j'ai tué un script qui était en train de mettre à jour une table. Maintenant, quand je relis le script, je reçois,

ORA-00054: occupation des ressources et acquisition avec NOWAIT spécifié

je présume que la table est verrouillée?. Comment puis-je déverrouiller la table?. Merci à l'avance.

27
demandé sur OMG Ponies 2010-06-19 18:00:23

5 réponses

étape 1:

select object_name, s.sid, s.serial#, p.spid 
from v$locked_object l, dba_objects o, v$session s, v$process p
where l.object_id = o.object_id and l.session_id = s.sid and s.paddr = p.addr;

étape 2:

alter system kill session `'sid,serial#';--sid` and `serial#` get from step 1

plus d'informations: http://www.oracle-base.com/articles/misc/killing-oracle-sessions.php

57
répondu chyee 2013-03-19 16:49:09

Merci pour l'utilisateur d'information 'user712934'

vous pouvez également chercher le sql, le nom d'utilisateur, la machine, les informations de port et obtenir le processus réel qui détient la connexion

SELECT O.OBJECT_NAME, S.SID, S.SERIAL#, P.SPID, S.PROGRAM,S.USERNAME,
S.MACHINE,S.PORT , S.LOGON_TIME,SQ.SQL_FULLTEXT 
FROM V$LOCKED_OBJECT L, DBA_OBJECTS O, V$SESSION S, 
V$PROCESS P, V$SQL SQ 
WHERE L.OBJECT_ID = O.OBJECT_ID 
AND L.SESSION_ID = S.SID AND S.PADDR = P.ADDR 
AND S.SQL_ADDRESS = SQ.ADDRESS;
7
répondu Abey Tom 2012-08-10 10:40:01

vous devrez attendre. La séance qui a été tuée était au milieu d'une transaction et a mis à jour beaucoup de dossiers. Ces enregistrements doivent être déroulés et un processus d'arrière-plan s'occupe de cela. Dans l'intervalle, vous ne pouvez pas modifier les enregistrements qui ont été touchés.

7
répondu Rob van Wijk 2014-10-29 12:44:02

quand vous avez tué la session, la session traîne pendant un certain temps dans le statut "tué" tandis Qu'Oracle nettoie après elle.

si vous devez absolument, vous pouvez aussi tuer le processus de L'OS (regardez v$process.spid ), ce qui libérerait toutes les serrures qu'il retient.

Voir ce pour des informations plus détaillées.

4
répondu Jeffrey Kemp 2016-05-20 13:52:19

selon votre situation, la table étant verrouillée peut simplement faire partie d'une opération normale et vous ne voulez pas simplement tuer la transaction de blocage. Ce que vous voulez faire de votre déclaration d'attente pour les autres ressources. Oracle 11g a des temps morts DDL qui peuvent être définis pour faire face à cela.

si vous avez affaire à 10g alors vous devez être plus créatif et écrire un certain PL/SQL pour gérer la ré-essayer. Regardez se déplacer ORA-00054 dans Oracle 10g Cette ré-exécute votre déclaration lorsqu'un resource_busy exception se produit.

3
répondu Nick Kavadias 2015-12-27 15:07:10