我正在尝试创建一个作为特定用户运行存储过程的作业,我可以创建并提供有限权限以仅执行所需操作。
根据我的阅读,我需要创建用户(非常标准),然后通过执行来创建凭证条目;
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
非常感谢任何建议。
答案 0 :(得分:1)
如果您想以特定用户身份运行作业,
创建凭证
BEGIN
dbms_scheduler.create_credential(
username => 'OS Username',
password => 'OS password',
credential_name => 'TEST_CREDENTIAL'
);
END;
创建作业
dbms_scheduler.create_job(
job_name => 'myJobName',
job_type => 'stored_procedure',
job_action => 'myStoredProcedure',
credential_name => 'TEST_CREDENTIAL',
destination_name => NULL);
现在运行工作..
答案 1 :(得分:0)
您可能想要做的是为步骤设置凭据。
您可以使用
alter_chain
在特定步骤中执行此操作 属性设置为credential_name
。http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28419/d_sched.htm#CHDIAICJ
答案 2 :(得分:0)
如果要让该作业在userm下运行,例如AJAX-您必须在该用户下创建该作业。为此,您必须授予他CREATE JOB特权。
根据Oracle的documentaion凭据创建一个用户/密码信息的容器,该信息将由Ora调度程序传递给外部程序。
因此,您的初始脚本有一个误解性的问题,尝试创建具有凭证的作业(具有用于调用 external 程序的参数),同时使用job_type =>'stored_procedure'(和 stored_procedure 是用于调用内部pl / sql过程的作业类型。