在UNIX下讓ORACLE定時執行*.sql文件
2024-08-29 13:37:32
供稿:網友
 
             
  Oracle數據庫自帶的DBMS_JOB功能可以實現定時執行PL/SQL的存儲過程,但是假如SQL語句很復雜,SQL語句很多,以及經常要改變SQL語句的寫法,用寫PL/SQL存儲過程的方法再定時執行會比較繁瑣。                                                                                            何況還有一些UNIX系統治理員不會寫PL/SQL存儲過程,所以我介紹一個簡單的shell程序可以在安裝了ORACLE SERVER或CLIENT的UNIX機器上實現定時執行一個*.sql文件。 
  
  首先我們在安裝了ORACLE SERVER或CLIENT的UNIX機器上連接目的數據庫: 
  
  $sqlplus username/passWord@servie_name
   
  
  
  假如能夠成功進入SQL>狀態,并執行簡單的SQL語句 
  
  SQL> SELECT SYSDATE FROM DUAL;
   
  
  
  表明連接成功,否則檢查/$ORACLE_HOME/network/admin/tnsnames.ora里servie_name是否正確定義。 
  
  /etc/hostname里是否包含目的數據庫的主機名等等(其它的網絡檢查就不在這里具體列舉了)。 
  
  接著在scott用戶下運行測試的SQL語句:scott_select.sql 
  
  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/下寫一個類似下面的shell文件scott_select.sh 
  
  ------------------------------------------------------------------------    	
  	su - oracle -c "sqlplus scott/tiger@servie_name"<  	spool /oracle_backup/log/scott_select.txt;
  	@/oracle_backup/bin/scott_select.sql;
  	spool off;
  	exit;
   -------------------------------------------------------------------------
   
  
  
  說明: 
  
  spool語句把scott_select.sql語句的執行結果輸出到/oracle_backup/log/scott_select.txt文件 
  
  @符號是執行/oracle_backup/bin/scott_select.sql文件 
  
  在要執行的*.sql文件里可以存放DML、DDL等多條SQL語句。 
  
  改變scott_select.sh的屬性成755, 可以執行 
  
  $chmod 755 /oracle_backup/bin/scott_select.sh
   
  
  
  這樣,UNIX系統治理員(root權限)可以利用crontab命令把scott_select.sh加入定時操作隊列里。 
  
  或者直接編輯OS下的配置文件: 
  
  Sun Solaris	文件	/var/spool/cron/crontabs/root
      linux	文件	/var/spool/cron/root
   
  
  
  在root文件后面添加一行(含義:每月的18日4:40分執行scott_select.sh) 
  
  40 4 18 * * /oracle_backup/bin/scott_select.sh
   
  
  
  時間表按順序是:分鐘(0—59) 小時(0—23) 日期(1—31) 月份(1—12) 星期幾(0—6) 
  
  您可以根據不同的需求來組合它們。 
  
  重新啟動OS的定時服務,使新添加的任務生效。 
  
  Sun Solaris
      #/etc/rc2.d/S75cron stop
      #/etc/rc2.d/S75cron start
      Linux
      #/etc/rc.d/init.d/crond restart
   
  
  
  這樣ORACLE數據庫就會定時執行scott_select.sql文件,并把結果輸出到OS文件scott_select.txt。
                          
  
  假如我們要新寫或者修改scott_select.sql文件,直接編輯它就可以了。