Исключение SQL ORA-27478: задание JOB_MIG_17602 выполняется во время DBMS_SCHEDULER.run_job

Получение приведенного ниже исключения при попытке запуска нескольких заданий параллельно. Это происходит периодически.

Точка отказа DBMS_SCHEDULER.run_job

SQL Exception ORA-27478: job "JOB_MIG_17602" is running
"ORA-06512: at "SYS.DBMS_ISCHED", line 196
ORA-06512: at "SYS.DBMS_SCHEDULER", line 48

Описание работы:

Задание вызывает хранимую процедуру, которая обновляет таблицу. Одна и та же хранимая процедура вызывается разными экземплярами задания, созданного с использованием уникального имени задания.

Ниже приведены шаги для запуска заданий:

DBMS_SCHEDULER.create_job(
    job_name                     => l_job_name,
    job_type                     => 'STORED_PROCEDURE',
    job_action                   => i_chunk_processor_name,
    number_of_arguments          => 2,
    enabled                      => FALSE,
    auto_drop                    => FALSE
);

DBMS_SCHEDULER.set_job_argument_value(job_name => l_job_name, argument_position => 1, argument_value => i_user_id);

DBMS_SCHEDULER.set_job_argument_value(job_name => l_job_name, argument_position => 2, argument_value => i_chunk_id);


DBMS_SCHEDULER.enable(l_job_name);

COMMIT;

DBMS_SCHEDULER.run_job(job_name => l_job_name, use_current_session => FALSE);

person Sachida Nanda Singh    schedule 20.12.2017    source источник
comment
какая у тебя версия бд? Ниже 11,2?   -  person Barbaros Özhan    schedule 21.12.2017
comment
Версия БД 11.2.0.4.0   -  person Sachida Nanda Singh    schedule 21.12.2017
comment
хорошо, это не относится к вашему делу. есть ошибка (ID 784664.1 M.O.S.-Doc 784664.1) с этой проблемой, но для базы данных, связанной с версиями до 11.2. Это решено в 11.2.   -  person Barbaros Özhan    schedule 21.12.2017


Ответы (1)


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

SQL> begin
  2    DBMS_SCHEDULER.create_job(
  3      job_name                     => 'XXX',
  4      job_type                     => 'PLSQL_BLOCK',
  5      job_action                   => 'begin dbms_lock.sleep(60); end;',
  6      enabled                      => FALSE,
  7      auto_drop                    => FALSE
  8  );
  9  end;
 10  /

PL/SQL procedure successfully completed.

SQL> exec DBMS_SCHEDULER.enable('XXX');

PL/SQL procedure successfully completed.

-- I wait for a few seconds
--
SQL> exec DBMS_SCHEDULER.run_job(job_name => 'XXX', use_current_session => FALSE);
BEGIN DBMS_SCHEDULER.run_job(job_name => 'XXX', use_current_session => FALSE); END;

*
ERROR at line 1:
ORA-27478: job "MCDONAC"."XXX" is running
ORA-06512: at "SYS.DBMS_ISCHED", line 238
ORA-06512: at "SYS.DBMS_SCHEDULER", line 568
ORA-06512: at line 1

Если вы включаете его, вам не нужен явный запрос run_job.

person Connor McDonald    schedule 21.12.2017