Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Unix/Linux 定時執行 Oracle SQL 腳本:Shell + Cron 完整方案

編輯:Linux 教學

背景

Oracle DBMS_JOB 僅支持 PL/SQL 存儲過程,SQL 複雜、頻繁變更時維護成本高。利用 Shell 腳本調用 sqlplus 執行 .sql 文件,配合 cron 定時任務,實現零侵入、易維護的定時 SQL 執行。

前置驗證

$ sqlplus username/password@service_name
SQL> SELECT SYSDATE FROM DUAL;
# 成功返回當前時間,說明網絡、TNS、賬號均正常

失敗時檢查 $ORACLE_HOME/network/admin/tnsnames.ora、/etc/hosts、防火牆、監聽狀態。

SQL 文件示例 (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;

Shell 包裝腳本 (scott_select.sh)

#!/bin/sh
# 以 oracle 用戶身份執行 sqlplus,利用 Here Document 傳遞命令
su - oracle -c "sqlplus scott/tiger@service_name" <
  • spool 將查詢結果導出文本文件。
  • @ 執行外部 SQL 文件,支持多條 DML/DDL。
  • su - oracle 確保環境變量(ORACLE_HOME、LD_LIBRARY_PATH 等)正確加載。

部署與授權

chmod 755 /oracle_backup/bin/scott_select.sh

Cron 定時配置

編輯 crontab

# Root 權限編輯
crontab -e
# 或直接編輯系統文件
# Solaris: /var/spool/cron/crontabs/root
# Linux:   /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)。

重啟 Cron 服務生效

# Solaris
/etc/rc2.d/S75cron stop
/etc/rc2.d/S75cron start
# Linux
/etc/rc.d/init.d/crond restart

維護優勢

  • 修改 SQL 只需編輯 .sql 文件,無需重新編譯存儲過程。
  • DBA/運維人員無需懂 PL/SQL 即可管理定時任務。
  • 輸出日誌便於審計、排錯、歸檔。

擴展建議

  • 在 Shell 中增加錯誤碼檢查、日誌輪轉、郵件告警。
  • 多 SQL 文件可編寫主腳本循環調用,或使用 run-parts 執行目錄下所有腳本。
  • 生產環境建議使用專用監控用戶而非 scott/tiger 默認賬號。
Copyright © Windows教程網 All Rights Reserved