Как остановить Oracle dbms_job
Мой dbms_job работает уже почти тридцать дней.
Количество общего времени продолжает расти, но я не могу найти информацию о выполняющейся работе.
Когда я выполняю sql, который является "select * from dba_jobs;", результат показывает, что задание не выполняется.
Я установил это сломанным, но это не работает.
Как я могу безопасно остановить этот dbms_job?
2 ответа
DBA_JOBS
перечисляет все задания, созданные в базе данных. Вы могли бы использовать DBA_JOBS_RUNNING
просмотреть список всех заданий, которые в данный момент выполняются в экземпляре.
Когда я выполняю sql, который является "select * from dba_jobs;", результат показывает, что задание не выполняется.
Это показывает все рабочие места, созданные с использованием DBMS_JOBS
пакет. Задание могло быть создано с использованием DBMS_SCHEDULER
пакет.
SQL> select job from user_jobs;
JOB
----------
99
Я создал только одну работу, используя DBMS_JOB
пакет, который называется 99
, Другие созданы с использованием DBMS_SCHEDULER
пакет, который можно увидеть, используя:
SQL> select job_name from user_scheduler_jobs;
Согласно документации
Остановка работы
Обратите внимание, что после запуска и запуска задания не существует простого способа остановить задание.
Нелегко остановить работу.
Не знаю, какую версию базы данных Oracle вы используете. Но, начиная с Oracle 10g, вы используете следующий запрос для перечисления запланированных заданий.
SQL>select * from all_scheduler_jobs;
ALL_SCHEDULER_JOBS
ALL_SCHEDULER_JOBS отображает информацию о заданиях планировщика, доступных текущему пользователю. Больше...
Используйте следующий запрос, чтобы найти текущее задание.
SQL>select job_name, session_id, running_instance, elapsed_time, cpu_used
from user_scheduler_running_jobs;
И остановиться
SQL>EXEC DBMS_SCHEDULER.STOP_JOB (job_name => 'JOB_NAME');
Если не считать убийство сессии, вам не повезло.
Из документации:
Обратите внимание, что после запуска и запуска задания не существует простого способа остановить задание.
Это одна из многих причин, почему вы не должны использовать dbms_job
больше. использование dbms_scheduler
вместо.
Checkout SID в "select * from DBA_JOBS_RUNNNG" - это идентификатор сеанса, который убивает этот сеанс, и его изменения будут отменены, поэтому для прерывания может потребоваться "больше" времени, чем для завершения, если это массовое обновление было выполнено на 90%....