使用 DBMS_SCHEDULER執行外部命令

lsq_008發表於2012-04-28
使用  DBMS_SCHEDULER可以很方便的執行作業系統下的命令或指令碼,這樣在執行一些定時指令碼時就不需要依賴於作業系統的計劃任務或crontab了。如下,建立定時執行exp匯出的定時任務:
一。建立job
1.建立job,執行定時exp匯出
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
   job_name          =>  'JOB_EXP_XJNY_CHARISMA',
   job_type          =>  'EXECUTABLE',
   job_action        =>  'C:\oracle\product\11.2.0\dbhome_1\bin\exp xjny/xjny tables=at_naizan file=C:\工作相關\資料匯入\at_naizan.dmp',
   start_date        =>  SYSDATE,
--  repeat_interval   =>  'FREQ = DAILY; INTERVAL = 1');
   repeat_interval   =>  'FREQ = MINUTELY; INTERVAL = 3');
END;
/


2. 建立job後,需要啟用該job
BEGIN
DBMS_SCHEDULER.ENABLE ('JOB_EXP_XJNY_CHARISMA');
END;
/


3.禁用job
BEGIN
DBMS_SCHEDULER.DISABLE ('JOB_EXP_XJNY_CHARISMA');
END;
/

4.刪除job
BEGIN
   DBMS_SCHEDULER.DROP_JOB('JOB_EXP_XJNY_CHARISMA');
END;
/


二 .檢視scheduler job的執行日誌

select OWNER,JOB_NAME,ENABLED,JOB_ACTION,RUN_COUNT,LAST_START_DATE,NEXT_RUN_DATE
from  dba_SCHEDULER_JOBs
where job_name='JOB_EXP_XJNY_CHARISMA';

SELECT OWNER,JOB_NAME,LOG_DATE,OPERATION,STATUS,USER_NAME
FROM DBA_SCHEDULER_JOB_LOG WHERE JOB_NAME='JOB_EXP_XJNY_CHARISMA';

select * from  DBA_SCHEDULER_JOB_RUN_DETAILS WHERE JOB_NAME = 'JOB_EXP_XJNY_CHARISMA';

在windows下需要開啟OracleJobSchedulerSID的服務才能成功執行相應的job,否則報27370錯誤,如下:
"ORA-27370: 作業的從屬程式無法啟動型別為 EXECUTABLE 的作業
ORA-27300: 作業系統系統相關操作: accessing job scheduler service 失敗, 狀態為: 2
ORA-27301: 作業系統故障訊息: 系統找不到指定的檔案。
ORA-27302: 錯誤發生在: sjsec 6a
ORA-27303: 附加資訊: 系統找不到指定的檔案。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10972173/viewspace-722443/,如需轉載,請註明出處,否則將追究法律責任。

相關文章