Oracle 內建 DBMS_JOB 僅能排程 PL/SQL 預存程序。若 SQL 複雜、頻繁變更,或系統管理員不熟 PL/SQL,改用 OS 層級 Shell + Crontab 直接呼叫 sqlplus 執行 .sql 檔更靈活。
$ sqlplus username/password@service_name
SQL> SELECT SYSDATE FROM DUAL;
若失敗,檢查 tnsnames.ora、/etc/hosts、Listener 狀態、防火牆。
路徑:/Oracle_backup/bin/scott_select.sql
SELECT D.DNAME, E.ENAME, E.JOB, E.HIREDATE
FROM EMP E, DEPT D
WHERE TO_CHAR(E.HIREDATE,'YYYY')='1981'
AND E.DEPTNO=D.DEPTNO;
路徑:/Oracle_backup/bin/scott_select.sh (權限 chmod 755)
#!/bin/ksh
# 以 oracle 用戶身分執行 sqlplus,導向輸出至 log 檔
su - oracle -c "sqlplus -s scott/tiger@service_name <
關鍵說明:
SPOOL 將查詢結果寫入文字檔。@ 執行外部 SQL 檔。-s 抑制版權標語,輸出更乾淨。編輯 root 的 crontab:
/var/spool/cron/crontabs/root/var/spool/cron/root範例:每月 18 日 04:40 執行
40 4 18 * * /Oracle_backup/bin/scott_select.sh
時間欄位:分(0-59) 時(0-23) 日(1-31) 月(1-12) 週(0-6)。
# Solaris
/etc/rc2.d/S75cron stop && /etc/rc2.d/S75cron start
# Linux
/etc/rc.d/init.d/crond restart
.sql 檔,無須動態重編譯 PL/SQL。