0

私の質問は、パッケージ内で DBMS_SCHEDULER を使用することです。ユーザーにSCHEDULER_ADMIN権限を付与しました。プロシージャの外部でスクリプトを使用してジョブを作成した後、プロシージャ内でこれらのコマンドを設定できるようになりました。

 -- set Job-Parameters
  DBMS_SCHEDULER.SET_ATTRIBUTE(
   name                     => jobidentifier,
   attribute                => 'job_action',
   value                    => jobparam);
   --  Job run.
   DBMS_SCHEDULER.ENABLE(jobidentifier);   

これまでのところ、すべてがうまくいきました。

私の質問: これらのコマンドが私のプロシージャのコード内で機能しないのはなぜですか?

 -- Stop Job
DBMS_SCHEDULER.STOP_JOB (
   job_name                 =>  jobidentifier,
   force                    =>  true);

  -- disable Job
DBMS_SCHEDULER.DISABLE(jobidentifier);

スクリプトを介して独自のセッションでコマンドを入力し、パッケージコードに埋め込まれていないとすぐに、コマンドが機能します。問題は、これらのコマンドを PL-SQL パッケージ内に入力したいということです。パッケージ内でエラーが発生したことがわかっているため、これらのコマンドを入力したいと考えています。

手伝って頂けますか?どうもありがとうございました。

次のエラーが表示されます。

ORA-27486: Nicht ausreychende Berechtigungen ORA-06512: "SYS.DBMS_ISCHED" 内、Zeile 210 ORA-06512: "SYS.DBMS_SCHEDULER" 内、Zeile 557 ORA-06512: "SCHEMANAME.JOB_KILLEN_PCK" 内、Zeile 31 ORA-06512:ツァイレ 6

私が行った許可は、sys_user によって与えられました。

GRANT SCHEDULER_ADMIN TO SCHEMANAME 

31行目に次のコードがあります

DBMS_SCHEDULER.STOP_JOB ( job_name => jobname, force => true); 

これは、プロシージャを開始してジョブを停止できるようにすることをオラクルが望んでいないというセキュリティ上の理由によるものですか。このようにして、名前を知っている各ジョブを停止できますか? これが正しい場合、手順のジョブ中に障害が発生した場合にジョブを停止できません

必要に応じて、テスト パッケージをお送りします

4

2 に答える 2