Замена пакета Oracle застряла - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть этот пакет 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

Могу ли я сделать что-то еще, кроме ожидания, пока этот сеанс убьет сам себя,или перезапуск базы данных?

Я решил очень похожий вопрос с помощью перезапуска, но я не доволен таким решением.

1 Ответ

0 голосов
/ 28 февраля 2019

Я нашел следующее решение:

exec dbms_scheduler.disable(‘RUN_EXTRACTION_SIRIUS_1’);

Это выдаст сообщение об ошибке о работе, выполняемой в данный момент.Поэтому я выполнил следующую команду:

exec DBMS_SCHEDULER.STOP_JOB ( job_name => 'RUN_EXTRACTION_SIRIUS_1', force => true);

Однако теперь команда «отключить» все равно выдала сообщение об ошибке.Возможно, потому что планировщик сразу же начал новую работу.Поэтому снова выполнил команду «stop_job».После этого сработала команда «disable».

Затем я смог запустить сценарий обновления базы данных, чтобы заменить тело пакета DATA_CAPTURING.

Наконец, я выполнил команду для повторного включенияработа:

dbms_scheduler.enable(‘RUN_EXTRACTION_SIRIUS_1’);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...