В дизайне продукта используются отдельные таблицы с аналогичными сигнатурами для хранения разных типов данных.Ожидание завершения нескольких DBMS_SCHEDULER.CREATE_JOB
Как вы можете выполнять вычисления на каждой таблице отдельно параллельно без замков.
Я оптимизирую код расчета, чтобы он запускал его в 7 раз быстрее, но следующие 10% повышения производительности. Думаю, потребуется еще x10 для кодирования/тестирования.
Расчет должен выполняться на всех таблицах, поэтому логично проводить вычисления параллельно (особенно, когда сервер имеет 32 ядра). Для этой цели я нашел полезный DBMS_SCHEDULER пакет:
declare
job1 clob := dbms_scheduler.generate_job_name('REPAYMENT_');
job2 clob := dbms_scheduler.generate_job_name('REPAYMENT_');
begin
dbms_scheduler.create_job(job_name => job1,
job_type => 'PLSQL_BLOCK',
job_action => 'begin calc_rep(30, DATE ''2012-01-01'', DATE ''2012-12-31''); end;',
enabled => true,
auto_drop => true);
dbms_scheduler.create_job(job_name => job2,
job_type => 'PLSQL_BLOCK',
job_action => 'begin calc_rep(31, DATE ''2012-01-01'', DATE ''2012-12-31''); end;',
enabled => true,
auto_drop => true);
dbms_output.put_line('jobs was finished');
end;
/
Но я не знаю, как ждать рабочих мест, прежде чем отделочные работы была закончена сообщение ...
постоянно опрашивать scheduler_jobs в петле неэффективное решение, но это только одно, которое приходит в голову. Поиск и официальные документы не принимают никакого релевантного решения.
Создание задания не запускает его. Похоже, вы хотите ЦЕПЬ РАБОТЫ, где вы можете запускать много шагов (заданий) в определенном порядке (или одновременно). Я слишком занят, чтобы дать кучу кода, но см. [Здесь] (http://www.oracle-base.com/articles/10g/scheduler-enhancements-10gr2.php#job_chains) для примера – tbone
@ tbone спасибо за интерес +1 – gavenkoa