1

Oracle 11g (11.2.0.1.0) への電子メール通知の追加に問題があります。バグのようですが、よくわかりません。SQL Developerを使用してコードとインターネットの例を作成しようとしましたが、うまくいきません。

ジョブを簡単に作成して有効にすることができます。

 BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
            job_name => '"SCHEMA"."test1"',
            job_type => 'PLSQL_BLOCK',
            job_action => 'begin
                           null;
                          end;
                          ',
            auto_drop => FALSE
            );

    DBMS_SCHEDULER.enable(
             name => '"SCHEMA"."test1"');
END;
/

匿名ブロック完了

予防措置として、ジョブの電子メール通知を削除しました - これは機能します。

BEGIN

    DBMS_SCHEDULER.REMOVE_JOB_EMAIL_NOTIFICATION (    
            job_name => '"SCHEMA"."test1"'
             );

end;
/

匿名ブロック完了

しかし、電子メール通知を追加しようとすると、オブジェクトが見つからないかのように表示されます。私は自分のスキーマで作業しており、DBA の役割を持っているため、潜在的な権限の問題を克服する必要があると考えていました (ただし、私自身ではスケジュールされたジョブを十分に簡単に作成できると想定していたスキーマ)

BEGIN
    DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION (    
             job_name => '"SCHEMA"."test1"', 
             recipients => 'email_address@test.com',
             events => 'JOB_BROKEN, JOB_CHAIN_STALLED, JOB_FAILED, JOB_OVER_MAX_DUR, JOB_SCH_LIM_REACHED'
             );
END; 
/

ORA-27476: "SCHEMA.SCHEMA" does not exist
ORA-06512: at "SYS.DBMS_ISCHED", line 4856
ORA-06512: at "SYS.DBMS_ISCHED", line 7117
ORA-01403: no data found
ORA-06512: at "SYS.DBMS_SCHEDULER", line 4030
ORA-06512: at line 3

行を正しく読み取らなかったかのように、SCHEMA.SCHEMA と表示されていることに注意してください。'"SCHEMA"."test1"' から 'test1' に変更しても、まだ機能しませんが、ORA-27476: "SCHEMA.TEST1" が存在しません。

私の仕事はすべて正常に動作し、動作し、UTL_MAIL の実装を開始しましたが、可能であれば単純化のためにオラクルのものを動作させたいと思っています。

4

1 に答える 1

2

A possible issue is that by default object names in Oracle are case insensitive, unless you surround them with double quotes.

Here is a test case:

SQL> select * from v$version where rownum = 1;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

SQL> create user STACKOVERFLOW identified by STACKOVERFLOW;

User created.

SQL> grant connect, create job to STACKOVERFLOW;

Grant succeeded.

SQL> conn STACKOVERFLOW/STACKOVERFLOW

SQL> l
  1  BEGIN
  2      DBMS_SCHEDULER.CREATE_JOB (
  3              job_name => '"STACKOVERFLOW"."test1"',
  4              job_type => 'PLSQL_BLOCK',
  5              job_action => 'begin
  6                             null;
  7                            end;
  8                            ',
  9              auto_drop => FALSE
 10              );
 11      DBMS_SCHEDULER.enable(
 12               name => '"STACKOVERFLOW"."test1"');
 13* END;
SQL> /

PL/SQL procedure successfully completed.

If you name your job "test1" Oracle will create it with a lowercase name. You can confirm this by checking the catalog view dba_scheduler_jobs:

SQL> select owner, job_name from dba_scheduler_jobs where job_name = 'TEST1';

no rows selected

SQL> select owner, job_name from dba_scheduler_jobs where job_name = 'test1';

OWNER                          JOB_NAME
------------------------------ ------------------------------
STACKOVERFLOW                  test1

Therefore, this will work:

SQL> l
  1  BEGIN
  2      DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION (
  3               job_name => '"STACKOVERFLOW"."test1"',
  4               recipients => 'email_address@test.com',
  5               events => 'JOB_BROKEN, JOB_CHAIN_STALLED, JOB_FAILED, JOB_OVER_MAX_DUR, JOB_SCH_LIM_REACHED'
  6               );
  7* END;
SQL> /

PL/SQL procedure successfully completed.

But this won't:

SQL> l
  1  BEGIN
  2      DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION (
  3               job_name => '"STACKOVERFLOW".TEST1',
  4               recipients => 'email_address@test.com',
  5               events => 'JOB_BROKEN, JOB_CHAIN_STALLED, JOB_FAILED, JOB_OVER_MAX_DUR, JOB_SCH_LIM_REACHED'
  6               );
  7* END;

SQL> /
BEGIN
*
ERROR at line 1:
ORA-27476: "STACKOVERFLOW.STACKOVERFLOW" does not exist
ORA-06512: at "SYS.DBMS_ISCHED", line 4921
ORA-06512: at "SYS.DBMS_ISCHED", line 7613
ORA-01403: no data found
ORA-06512: at "SYS.DBMS_SCHEDULER", line 4063
ORA-06512: at line 2
于 2014-09-29T07:29:39.350 に答える