首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

UNIX 環境下利用 Shell 腳本與 Crontab 定時執行 Oracle SQL 檔案

     編輯:Oracle 資料庫基礎

背景動機

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 狀態、防火牆。

建立測試 SQL 檔

路徑:/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;

撰寫 Shell 包裝腳本

路徑:/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 抑制版權標語,輸出更乾淨。
  • SQL 檔可包含多條 DML/DDL 陳述式。

加入 Crontab 排程

編輯 root 的 crontab:

  • 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)。

重新載入 Crond 服務

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

維護優勢

  • 修改 SQL 邏輯只需編輯 .sql 檔,無須動態重編譯 PL/SQL。
  • 輸出為純文字日誌,便於後續 ETL、稽核、郵件通知。
  • 完全由 OS 層面管理,DBA 與 SA 分工明確。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved