前幾天建立了個發郵件的預存程序,想把資料庫每天的運行情況自動發到郵箱,沒想到第二天就出了問題,在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” 部落格,請務必保留此出處http://srsunbing.blog.51cto.com/3221858/1108581