У меня есть этот пакет DATA_CAPTURING. Я пытаюсь заменить тело пакета.Пакет вызывается по расписанию каждые 15 минут.Работа может занять более 15 минут.Я считаю, что это связано с замками, удерживаемыми на упаковке.У меня есть следующий SQL для поиска потенциальных блокировок:
SELECT s.sid,
s.SERIAL#,
s.STATUS,
s.STATE,
s.username,
l.lock_type,
l.mode_held,
l.mode_requested,
l.lock_id1
FROM dba_lock_internal l,
v$session s
WHERE s.sid = l.session_id
AND UPPER(l.lock_id1) LIKE '%DATA_CAPTURING%'
;
Это вывод:
12 223 ACTIVE WAITED SHORT TIME XXX Cursor Definition Lock Null None SELECT s.sid, s.SERIAL#, s.STATUS, s.STATE, s.username, l.lock_type, l.mode_held, l.mode_requested, l.lock_id1 FROM dba_lock_internal l, v$session s WHERE s.sid = l.session_id AND UPPER(l.lock_id1) LIKE '%DATA_CAPTURING%'
12 223 ACTIVE WAITED SHORT TIME XXX Cursor Definition Lock Null None SELECT s.sid, s.SERIAL#, s.STATUS, s.STATE, s.username, l.lock_type, l.mode_held, l.mode_requested, l.lock_id1 FROM dba_lock_internal l, v$session s WHERE s.sid = l.session_id AND UPPER(l.lock_id1) LIKE '%DATA_CAPTURING%'
15 105 KILLED WAITING XXX Cursor Definition Lock Null None call XXX.DATA_CAPTURING.RUN_EXTRACTION ( )
15 105 KILLED WAITING XXX Cursor Definition Lock Null None call XXX.DATA_CAPTURING.RUN_EXTRACTION ( )
15 105 KILLED WAITING XXX Table/Procedure/Type Definition Lock Null None XXX.DATA_CAPTURING
15 105 KILLED WAITING XXX Body Definition Lock Null None XXX.DATA_CAPTURING
203 489 ACTIVE WAITING XXX Body Definition Lock Exclusive None XXX.DATA_CAPTURING
15 105 KILLED WAITING XXX Table/Procedure/Type Definition Pin Share None XXX.DATA_CAPTURING
203 489 ACTIVE WAITING XXX Body Definition Pin None Exclusive XXX.DATA_CAPTURING
15 105 KILLED WAITING XXX Body Definition Pin Share None XXX.DATA_CAPTURING
Я пытался убить сеанс 15,105, но, как вы можете видеть, он еще не исчез.Для убийства я использовал alter system kill session 'SID,SERIAL#';
. Между тем, мой скрипт замены пакета базы данных получил тайм-аут:
create or replace PACKAGE BODY "DATA_CAPTURING" AS
ERROR at line 1:
ORA-04021: timeout occurred while waiting to lock object
Могу ли я сделать что-то еще, кроме ожидания, пока этот сеанс убьет сам себя,или перезапуск базы данных?
Я решил очень похожий вопрос с помощью перезапуска, но я не доволен таким решением.