ORA-00054: ресурс занят и получен с указанным NOWAIT

В общем, лучше не полагаться на finalize(), чтобы делать очистку и т. д.

Согласно Javadoc (что было бы полезно прочитать), это :

Вызывается сборщиком мусора на объекте, когда сбор мусора определяет, что больше нет ссылок на объект.

Как указал Йоахим, это может никогда не произойти в жизни программы, если объект всегда доступен.

Кроме того, сборщик мусора не может запускаться в любое конкретное время. В общем, то, что я пытаюсь сказать, finalize(), вероятно, не самый лучший метод для использования вообще, если для этого не требуется что-то конкретное.

29
задан OMG Ponies 25 April 2011 в 16:11
поделиться

5 ответов

Шаг 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;

Шаг 2:

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

Дополнительная информация: http://www.oracle-base.com/articles/misc/killing -oracle-sessions.php

59
ответ дан Dwhitz 25 April 2011 в 16:11
поделиться
  • 1
    Yah! Это - полезная ссылка и новые вещи для меня. Заранее спасибо.. – Cataclysm 11 July 2013 в 11:14
  • 2
    Yah! Это - полезная ссылка и новые вещи для меня. Заранее спасибо.. – Cataclysm 11 July 2013 в 11:14
  • 3
    Yah! Это - полезная ссылка и новые вещи для меня. Заранее спасибо.. – Cataclysm 11 July 2013 в 11:14
  • 4
    Yah! Это - полезная ссылка и новые вещи для меня. Заранее спасибо.. – Cataclysm 11 July 2013 в 11:14
  • 5
    Yah! Это - полезная ссылка и новые вещи для меня. Заранее спасибо.. – Cataclysm 11 July 2013 в 11:14

Спасибо за информацию user 'user712934'

Вы также можете посмотреть информацию о sql, username, machine, port и перейти к реальному процессу, который содержит соединение

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;
8
ответ дан ThiefMaster 25 April 2011 в 16:11
поделиться

Тебе придется подождать. Сеанс, который был убит, был в середине транзакции и обновил много записей. Эти записи необходимо откатить, и некоторые фоновые процессы позаботятся об этом. В то же время вы не можете изменить записи, которые были затронуты.

8
ответ дан Kiquenet 25 April 2011 в 16:11
поделиться

В зависимости от ситуации блокируемый стол может быть просто частью нормальной работы & amp; Вы не хотите просто убить блокирующую транзакцию. Что вы хотите сделать, так это попросить ваше заявление подождать другого ресурса. Oracle 11g имеет тайм-ауты DDL, которые могут быть установлены для решения этой проблемы.

Если вы имеете дело с 10g, вам нужно проявить больше творчества и написать немного PL / SQL для повторной попытки. Посмотрите на Обойти ORA-00054 в Oracle 10g. Это перезапустит ваш оператор при возникновении исключения resource_busy.

3
ответ дан Nick Kavadias 25 April 2011 в 16:11
поделиться
  • 1
    I' d предлагают использовать имя переменной по крайней мере с одним символом нижнего регистра для EXIT как практика прямой совместимости. См. pubs.opengroup.org/onlinepubs/009695399/basedefs/… , четвертый абзац - пространство имен имен всех заглавных букв используется для переменных со значением к системе или оболочке; придерживание строчных имен предотвращает перезапись переменной среды или встроенной оболочкой переменной при попытке только присвоить переменную оболочки. Предоставленный, с локальным объявлением, что перезапись является временной, который делает ее меньшим количеством проблемы чем обычно здесь, но все еще идеалом. – Charles Duffy 11 September 2016 в 16:28
  • 2
    I' d предлагают использовать имя переменной по крайней мере с одним символом нижнего регистра для EXIT как практика прямой совместимости. См. pubs.opengroup.org/onlinepubs/009695399/basedefs/… , четвертый абзац - пространство имен имен всех заглавных букв используется для переменных со значением к системе или оболочке; придерживание строчных имен предотвращает перезапись переменной среды или встроенной оболочкой переменной при попытке только присвоить переменную оболочки. Предоставленный, с локальным объявлением, что перезапись является временной, который делает ее меньшим количеством проблемы чем обычно здесь, но все еще идеалом. – Charles Duffy 11 September 2016 в 16:28
  • 3
    I' d предлагают использовать имя переменной по крайней мере с одним символом нижнего регистра для EXIT как практика прямой совместимости. См. pubs.opengroup.org/onlinepubs/009695399/basedefs/… , четвертый абзац - пространство имен имен всех заглавных букв используется для переменных со значением к системе или оболочке; придерживание строчных имен предотвращает перезапись переменной среды или встроенной оболочкой переменной при попытке только присвоить переменную оболочки. Предоставленный, с локальным объявлением, что перезапись является временной, который делает ее меньшим количеством проблемы чем обычно здесь, но все еще идеалом. – Charles Duffy 11 September 2016 в 16:28
  • 4
    I' d предлагают использовать имя переменной по крайней мере с одним символом нижнего регистра для EXIT как практика прямой совместимости. См. pubs.opengroup.org/onlinepubs/009695399/basedefs/… , четвертый абзац - пространство имен имен всех заглавных букв используется для переменных со значением к системе или оболочке; придерживание строчных имен предотвращает перезапись переменной среды или встроенной оболочкой переменной при попытке только присвоить переменную оболочки. Предоставленный, с локальным объявлением, что перезапись является временной, который делает ее меньшим количеством проблемы чем обычно здесь, но все еще идеалом. – Charles Duffy 11 September 2016 в 16:28
  • 5
    I' d предлагают использовать имя переменной по крайней мере с одним символом нижнего регистра для EXIT как практика прямой совместимости. См. pubs.opengroup.org/onlinepubs/009695399/basedefs/… , четвертый абзац - пространство имен имен всех заглавных букв используется для переменных со значением к системе или оболочке; придерживание строчных имен предотвращает перезапись переменной среды или встроенной оболочкой переменной при попытке только присвоить переменную оболочки. Предоставленный, с локальным объявлением, что перезапись является временной, который делает ее меньшим количеством проблемы чем обычно здесь, но все еще идеалом. – Charles Duffy 11 September 2016 в 16:28

Когда вы убили сессию, сессия некоторое время висит в статусе "KILLED", пока Oracle убирает за ней.

Если вам очень нужно, вы можете убить и процесс ОС (смотрите v$process.spid), что освободит все блокировки, за которые он держался.

Смотрите здесь для более подробной информации.

6
ответ дан 28 November 2019 в 00:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: