Home >Database >Mysql Tutorial > 创建oracle发邮件job导致的故障

创建oracle发邮件job导致的故障

WBOY
WBOYOriginal
2016-06-07 17:41:131016browse

前几天创建了个发邮件的存储过程,想把数据库每天的运行情况自动发到邮箱,没想到第二天就出了问题,在dbms/trace目录下产生了大量的xxx_j000_xxx.trc文件,一分

    前几天创建了个发邮件的存储过程,想把数据库每天的运行情况自动发到邮箱,美国服务器,没想到第二天就出了问题,在dbms/trace目录下产生了大量的xxx_j000_xxx.trc文件,一分钟产生2个。alter日志报ora-12012、ora-06576错误,出现sys.PROCESS_ETL2、dbms_scheduler、emd_maintenance.remove_em_dbms_jobs的内容。
   
--1.查询job:
select * from dba_jobs t;
  what =PROCESS_ETL2 的job=88,直接删除88的job。
或 : SQL> EXEC dbms_job.remove(job#);  --移去job号
这个job已经删除了,但是trace文件还是照样产生。

--2. 删除em的job:
SQL> exec emd_maintenance.remove_em_dbms_jobs;
trace文件还是照样产生。

--3. 查询PROCESS_ETL2的对象:
select * from sys.dba_objects t   where t.owner = 'SYS'   and object_name = 'PROCESS_ETL2';
显示状态status=VALID, 类型object_type=job,timestamp 的值不断的变化,看来这个job还是在执行,香港虚拟主机,但是查dba_jobs 试图已经看不到了。

--4. 必须删除PROCESS_ETL2这个对象: 
begin
  dbms_scheduler.drop_job (
    job_name        => 'process_etl2',
    force           => true);
end; 
    
--5. 再次查询PROCESS_ETL2的对象:
select * from sys.dba_objects t   where t.owner = 'SYS'   and object_name = 'PROCESS_ETL2';  
--已经没有了,trace目录下已经不产生相应文件了 。

--6. 总结:这个 Scheduler Email是11gr2的增强功能,在没有充分了解这个之前还是不能随便拿来使用的,可能会产生意想不到的结果。
  
--7. dbms_scheduler的create_job如下:
--建job:
begin
  dbms_scheduler.create_job (
    job_name        => 'process_etl2',
    job_type        => 'STORED_PROCEDURE',
    job_action      => 'process_etl2',
    start_date      => SYSTIMESTAMP,
    repeat_interval => 'freq=minutely; bysecond=0',
    enabled         => TRUE);
end;

---原过程见下:
PROCEDURE create_job(
  job_name                IN VARCHAR2, 
  schedule_name           IN VARCHAR2,
  job_type                 IN VARCHAR2,  
  job_action              IN VARCHAR2,   
  number_of_arguments     IN PLS_INTEGER              DEFAULT 0,
  job_class               IN VARCHAR2              DEFAULT 'DEFAULT_JOB_CLASS',
  enabled                 IN BOOLEAN                  DEFAULT FALSE,
  auto_drop               IN BOOLEAN                  DEFAULT TRUE,
  comments                 IN VARCHAR2                 DEFAULT NULL,
  credential_name         IN VARCHAR2                 DEFAULT NULL,
  destination_name        IN VARCHAR2                 DEFAULT NULL);
 
PROCEDURE drop_job(
  job_name                IN VARCHAR2,
  force                   IN BOOLEAN      DEFAULT FALSE,
  defer                   IN BOOLEAN      DEFAULT FALSE,
  commit_semantics        IN VARCHAR2 DEFAULT 'STOP_ON_FIRST_ERROR');
 
 

本文出自 “srsunbing” 博客,香港服务器租用,请务必保留此出处

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn