【发布时间】:2017-01-06 19:50:15
【问题描述】:
我已经创建了下一个程序和后续的 Oracle JOB:
BEGIN
DBMS_SCHEDULER.create_program (program_name => 'myProg',
program_action => 'myProc',
program_type => 'STORED_PROCEDURE',
number_of_arguments => 3,
enabled => FALSE);
DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT (program_name => 'myProg',
argument_position => 1,
argument_type => 'NUMBER');
DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT (program_name => 'myProg',
argument_position => 2,
argument_type => 'NUMBER');
DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT (program_name => 'myProg',
argument_position => 3,
argument_type => 'NUMBER',
DEFAULT_VALUE => NULL);
DBMS_SCHEDULER.create_job ('myJob',
program_name => 'myProg',
enabled => FALSE,
comments => 'Send data');
DBMS_SCHEDULER.SET_ATTRIBUTE ('myJob', 'PARALLEL_INSTANCES', TRUE);
DBMS_SCHEDULER.SET_ATTRIBUTE ('myJob',
'logging_level',
DBMS_SCHEDULER.LOGGING_FULL);
END;
/
现在,我有一个用户可以运行/执行调用下一个过程的作业:
PROCEDURE runJOB(param1 IN PLS_INTEGER,
param2 IN PLS_INTEGER DEFAULT NULL,
param3 IN PLS_INTEGER DEFAULT NULL)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
DBMS_SCHEDULER.enable ('myProg');
DBMS_SCHEDULER.set_job_argument_value ('myJob', 1, TO_CHAR (param1));
DBMS_SCHEDULER.set_job_argument_value ('myJob', 2, TO_CHAR (param2));
DBMS_SCHEDULER.set_job_argument_value ('myJob', 3, TO_CHAR (param3));
--DBMS_SCHEDULER.enable ('myJob');
DBMS_SCHEDULER.RUN_JOB (JOB_NAME => 'myJob', USE_CURRENT_SESSION => FALSE);
--DBMS_SCHEDULER.disable ('myJob');
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
END runJOB;
我有什么问题?
- 我需要以异步模式运行作业。这就是为什么我有一个
enable或run_job使用USE_CURRENT_SESSION参数FALSE。我认为这行得通。 - 我需要执行同一个作业的多个实例,从
不同的用户,同时。例如,用户 A 调用
runJOB程序。该作业可以在 20 秒内运行。在这 20 秒,用户 B 可以在不同的会话中调用相同的过程。 这就是为什么我尝试使用PARALLEL_INSTANCES属性,但是 我只有一次处决。我认为甲骨文认为这份工作是 正在运行,因此请放弃第二次尝试运行。
在恢复时,我需要一个必须以异步模式执行并同时使用多个实例的作业。
在为两个实例执行“双重”作业后,我在user_SCHEDULER_JOB_RUN_DETAILS 表中只获得了一条记录,但为两个不同的用户(SGSS 和 EX01882_BD)启用了 2 条记录
52367532 26/12/2016 12:08:44,584878 +00:00 SGSS myJob DEFAULT_JOB_CLASS RUN SUCCEEDED (HugeClob)
52364238 26/12/2016 12:08:36,529539 +00:00 SGSS myJob DEFAULT_JOB_CLASS ENABLE EX01882_BD (HUGECLOB)
52367534 26/12/2016 12:08:34,302807 +00:00 SGSS myJob DEFAULT_JOB_CLASS ENABLE SGSS (HUGECLOB)
有什么帮助吗?
注意: 我不能在此解决方案中使用不同的作业名称 (How run two or more instances of an oracle job in the same time?),因为该作业已创建并且调用此作业的用户没有创建权限。
【问题讨论】:
标签: oracle scheduler oracle12c job-scheduling