В общем, лучше не полагаться на finalize()
, чтобы делать очистку и т. д.
Согласно Javadoc (что было бы полезно прочитать), это :
Вызывается сборщиком мусора на объекте, когда сбор мусора определяет, что больше нет ссылок на объект.
Как указал Йоахим, это может никогда не произойти в жизни программы, если объект всегда доступен.
Кроме того, сборщик мусора не может запускаться в любое конкретное время. В общем, то, что я пытаюсь сказать,
finalize()
, вероятно, не самый лучший метод для использования вообще, если для этого не требуется что-то конкретное.
Шаг 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
Спасибо за информацию 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;
Тебе придется подождать. Сеанс, который был убит, был в середине транзакции и обновил много записей. Эти записи необходимо откатить, и некоторые фоновые процессы позаботятся об этом. В то же время вы не можете изменить записи, которые были затронуты.
В зависимости от ситуации блокируемый стол может быть просто частью нормальной работы & amp; Вы не хотите просто убить блокирующую транзакцию. Что вы хотите сделать, так это попросить ваше заявление подождать другого ресурса. Oracle 11g имеет тайм-ауты DDL, которые могут быть установлены для решения этой проблемы.
Если вы имеете дело с 10g, вам нужно проявить больше творчества и написать немного PL / SQL для повторной попытки. Посмотрите на Обойти ORA-00054 в Oracle 10g. Это перезапустит ваш оператор при возникновении исключения resource_busy.
EXIT
как практика прямой совместимости. См. pubs.opengroup.org/onlinepubs/009695399/basedefs/… , четвертый абзац - пространство имен имен всех заглавных букв используется для переменных со значением к системе или оболочке; придерживание строчных имен предотвращает перезапись переменной среды или встроенной оболочкой переменной при попытке только присвоить переменную оболочки. Предоставленный, с локальным объявлением, что перезапись является временной, который делает ее меньшим количеством проблемы чем обычно здесь, но все еще идеалом.
– Charles Duffy
11 September 2016 в 16:28
EXIT
как практика прямой совместимости. См. pubs.opengroup.org/onlinepubs/009695399/basedefs/… , четвертый абзац - пространство имен имен всех заглавных букв используется для переменных со значением к системе или оболочке; придерживание строчных имен предотвращает перезапись переменной среды или встроенной оболочкой переменной при попытке только присвоить переменную оболочки. Предоставленный, с локальным объявлением, что перезапись является временной, который делает ее меньшим количеством проблемы чем обычно здесь, но все еще идеалом.
– Charles Duffy
11 September 2016 в 16:28
EXIT
как практика прямой совместимости. См. pubs.opengroup.org/onlinepubs/009695399/basedefs/… , четвертый абзац - пространство имен имен всех заглавных букв используется для переменных со значением к системе или оболочке; придерживание строчных имен предотвращает перезапись переменной среды или встроенной оболочкой переменной при попытке только присвоить переменную оболочки. Предоставленный, с локальным объявлением, что перезапись является временной, который делает ее меньшим количеством проблемы чем обычно здесь, но все еще идеалом.
– Charles Duffy
11 September 2016 в 16:28
EXIT
как практика прямой совместимости. См. pubs.opengroup.org/onlinepubs/009695399/basedefs/… , четвертый абзац - пространство имен имен всех заглавных букв используется для переменных со значением к системе или оболочке; придерживание строчных имен предотвращает перезапись переменной среды или встроенной оболочкой переменной при попытке только присвоить переменную оболочки. Предоставленный, с локальным объявлением, что перезапись является временной, который делает ее меньшим количеством проблемы чем обычно здесь, но все еще идеалом.
– Charles Duffy
11 September 2016 в 16:28
EXIT
как практика прямой совместимости. См. pubs.opengroup.org/onlinepubs/009695399/basedefs/… , четвертый абзац - пространство имен имен всех заглавных букв используется для переменных со значением к системе или оболочке; придерживание строчных имен предотвращает перезапись переменной среды или встроенной оболочкой переменной при попытке только присвоить переменную оболочки. Предоставленный, с локальным объявлением, что перезапись является временной, который делает ее меньшим количеством проблемы чем обычно здесь, но все еще идеалом.
– Charles Duffy
11 September 2016 в 16:28
Когда вы убили сессию, сессия некоторое время висит в статусе "KILLED", пока Oracle убирает за ней.
Если вам очень нужно, вы можете убить и процесс ОС (смотрите v$process.spid
), что освободит все блокировки, за которые он держался.
Смотрите здесь для более подробной информации.