我正在尝试创建一个作业,它将以特定用户身份运行存储过程,我可以创建该用户并提供有限的权限来仅执行所需的操作。
根据我的阅读,我需要创建用户(非常标准),然后通过执行创建凭据条目;
dbms_scheduler.create_credential('[cred name]', '[Oracle User]', '[Oracle Password]');
创建凭据后,我会尝试在作业创建脚本中使用它;
dbms_scheduler.create_job(
job_name => 'myJobName',
job_type => 'stored_procedure',
job_action => 'myStoredProcedure',
credential_name => 'jobRunningUserCredential',
destination_name => NULL);
我遇到的问题是,当它运行时,我收到以下错误消息;
ora-27351 conflicting values of job attributes credential_name and job_type
我想知道是否有人能看到我错过的东西,或者我是否只是用这种方法在错误的树上吠叫,在这种情况下,欢迎任何建议。
感谢您提前提供任何帮助/建议。
山姆
更新:
在收到使用 alter_chain 的建议后,我实现了以下代码;
dbms_scheduler.create_chain('myjob_chain', NULL, NULL, NULL);
dbms_scheduler.define_chain_step('myjob_chain', 'step_name', 'schemaName');
dbms_scheduler.define_chain_step('myjob_chain', 'parallel_instances', 'schemaName');
dbms_scheduler.define_chain_step('myjob_chain', 'enable_job', 'schemaName');
dbms_scheduler.enable('myjob_chain');
dbms_scheduler.alter_chain('myjob_chain', 'step_name', 'credential_name', 'myCredential');
dbms_scheduler.create_job(
job_name => 'myJobName',
job_type => 'stored_procedure',
job_action => 'myStoredProcedure',
credential_name => 'jobRunningUserCredential',
destination_name => NULL);
dbms_output.put_line('job created');
dbms_scheduler.alter_chain('myjob_chain', 'set_parallel_instances', 'credential_name', 'myCredential');
dbms_scheduler.set_attribute(
name => 'myJobName',
attribute => 'parallel_instances',
value => TRUE);
dbms_output_put_line('parallel_instances');
dbms_scheduler.alter_chain('myjob_chain', 'enable_job', 'credential_name', 'myCredential');
dbms_scheduler.enable(name => 'myJobName');
dbms_output_put_line('enable');
这给我的输出是;
job created
parallel_instances
BEGIN
*
ERROR at line 1:
ORA-27351: conflicting values of job attributes CREDENTIAL_NAME and JOB_TYPE
ORA-06512: at "SYS.DBMS_ISCHED", line 4395
ORA-06512: at "SYS.DBMS_SCHEDULER", line 2803
ORA-06512: at line 67
非常感谢任何建议。