2014-09-17 4 views
1

Oracle 11g (11.2.0.1.0)에 전자 메일 알림을 추가하는 데 문제가 있습니다. 그것은 버그처럼 보이지만 나는 정말로 확신하지 못합니다. SQL Developer를 사용하여 인터넷에서 코드뿐만 아니라 예제를 빌드하려고 시도했지만 작동하지 않습니다.DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION에 job_name을 표시하는 방법

내가 만들고 충분히 쉽게 작업을 활성화 할 수 있습니다

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 protected]', 
      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 구현이 이루어졌지만 가능한 경우 단순성을 위해 신탁 작업을하고 싶습니다.

+1

는 당신에게 작업이라고 확신 올바른 스키마에 생성 되었습니까? 'select owner, job_name from dba_scheduler_jobs의 출력은 무엇입니까? job_name = 'TEST1''은 무엇입니까? 또한''test1 ''은 큰 따옴표로 묶여 있기 때문에 대소 문자를 구분한다는 점에 유의하십시오. –

+0

@MarcoBaldelli 이것이 문제의 핵심이라고 생각합니다. 나는 add_scheduler 함수가 스케줄러가 그것을 처리 할 수 ​​있다고하더라도 소문자를 인식하지 않는다고 생각한다. 기술적으로 이것은 버그라고 생각하지만 소문자 오브젝트 이름은 끔찍한 것이므로 잘못하지는 않습니다. 나는 오히려 SQL Developer가 나를 위해 대문석을 만들었을 것입니다 ... 일단 내가 당신이 그것을 대답으로 두도록 요청할 것을 확인합니다. – Ewanw

+0

분명히 올바른 분석 인 것 같습니다. 저를위한 대답을하십시오. 내 프로세스가 실행 중이지만 전자 메일을받지 못합니다. 내가 더 깊게 파고 갈 시간이야. – Ewanw

답변

2

가능한 문제는 큰 따옴표로 묶지 않는 한 Oracle의 개체 이름은 기본적으로 대소 문자를 구분하지 않는다는 것입니다. 당신이 당신의 작업 "test1" 이름을 경우

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. 

오라클은 소문자 이름으로 만듭니다 : 여기

는 테스트 케이스이다. 당신은 카탈로그 뷰 dba_scheduler_jobs 확인하여이를 확인할 수 있습니다

SQL> l 
    1 BEGIN 
    2  DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION (
    3    job_name => '"STACKOVERFLOW"."test1"', 
    4    recipients => '[email protected]', 
    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. 

을하지만이되지 않습니다 : 따라서

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 

을이 작동합니다

SQL> l 
    1 BEGIN 
    2  DBMS_SCHEDULER.ADD_JOB_EMAIL_NOTIFICATION (
    3    job_name => '"STACKOVERFLOW".TEST1', 
    4    recipients => '[email protected]', 
    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