Linux下Oracle查詢結(jié)果以html格式定期發(fā)送郵件 |
發(fā)布時(shí)間: 2012/9/24 16:49:59 |
任務(wù): 每天早上8:00將Oracle查詢語句的內(nèi)容變成html的形式,制作一腳本,在指定時(shí)間用mutt自動(dòng)發(fā)送到郵箱 版本: Linux version 2.6.18-194.el5 Oracle Release 10.2.0.5.0-
mutt 郵件代理 sendmail crontab 自動(dòng)任務(wù)處理
一 shell腳本(生成html文件,mutt發(fā)送) 1 生成html文件 利用行列轉(zhuǎn)換的sql語句,將sys用戶下的tb表(表-1)形式轉(zhuǎn)化為表-2,并生成html1.html文件 表-1 NAME COURSE SCORE 表-2
select name,sum(decode(course,'chinese',score,0)) "chinese",sum(decode(course,'math',score,0)) "math",sum(decode(course,'physics',score,0)) "physics",sum(score) "totle",round(avg(score),2) "avg" from tb group by name;
生成html文件 #設(shè)置生成表格式
set term off set feedback off set linesize 1000 set trimspool on set term off verify off feedback off pagesize 999
set echo off spool /home/Oracle/html1.html replace select name,sum(decode(course,'chinese',score,0)) "chinese",sum(decode(course,'math',score,0)) "math",sum(decode(course,'physics',score,0)) "physics",su m(score) totle,round(avg(score),2) avg from tb group by name; spool off set markup html off set echo on
echo cklovely@vip.qq.com > /tmp/user.txt --需要發(fā)送的郵件 echo “test”|mutt -s “subject name” -a /home/Oracle/html1.html `cat /tmp/user.txt`
a 關(guān)于sendmail啟動(dòng)緩慢的問題 這是個(gè)比較常見的問題,出現(xiàn)這個(gè)問題的根本原因是主機(jī)名沒有分配好 解決辦法: 我們可以修改系統(tǒng)配置文件/etc/hosts 和/etc/resolv.conf 讓sendmial繞過查詢遠(yuǎn)程主機(jī),這里給出一種最簡單的方法,給主機(jī)設(shè)置一個(gè)別名 修改/etc/hosts ,未修改之前 127.0.0.1 localhost.localdomain localhost 修改成 127.0.0.1 localhost.localdomain localhost cklovely
my_hdr from: ckQyanqi@126.com
cat /home/Oracle/html.sh #!/bin/bash source ~Oracle/.bash_profile $Oracle_HOME/bin/sqlplus -s "/ as sysdba" <<E set pagesize 0 set term off set feedback off set linesize 1000 set trimspool on set term off verify off feedback off pagesize 999 set markup html on entmap on spool on head "<TITLE>Grade of Students</title> <!--body {backgroud:ffffc6} --></style>" set echo off spool /home/Oracle/html1.html replace select name,sum(decode(course,'chinese',score,0)) "chinese",sum(decode(course,'math',score,0)) "math",sum(decode(course,'physics',score,0)) "physics",sum(score) totle,round(avg(score),2) avg from tb group by name; spool off set markup html off set echo on E echo cklovely@vip.qq.com > /tmp/user.txt echo "test"|mutt -s "Grade of Students" -a /home/Oracle/html1.html `cat /tmp/user.txt`
定義時(shí)間讓系統(tǒng)自動(dòng)運(yùn)行腳本的方法很多 而在linux系統(tǒng)中經(jīng)常使用的要數(shù)crontab了。 (其他的方法有:Oracle中的dbms_jobs,還有就是dbms_scheduler) /etc/cron.deny:
1 直接用crontab命令 當(dāng)使用者使用 crontab 這個(gè)指令來建立工作排程之後,該項(xiàng)工作就會被紀(jì)錄到 /var/spool/cron/ 裡面去了,而且是以帳號來作為判別的。另外, cron 執(zhí)行的每一項(xiàng)工作都會被紀(jì)錄到 /var/log/cron 這個(gè)登錄檔中,所以囉,如果你的 Linux 不知道有否被植入木馬時(shí),也可以搜尋一下 /var/log/cron 這個(gè)登錄檔呢! Crontab語法: crontab [-u username] [-l|-e|-r] croutab -e (默認(rèn)username為root)打開/var/spool/cron/root 編輯 croutab -l (默認(rèn) username 為root)查看root用戶下的自動(dòng)任務(wù) croutab -r (默認(rèn) username 為root)刪除root下所有的自動(dòng)任務(wù) 編輯內(nèi)容: * * * * * command
*/5 * * * * command 2 系統(tǒng)設(shè)定文件:/etc/crontab 必須是root用戶設(shè)定 * MAILTO=root: 例如 MAILTO=cklovely@vip.qq.com * PATH=.... 這里就是輸入執(zhí)行命令的搜索路徑,使用預(yù)設(shè)定路徑已經(jīng)足夠了 * 01 * * * * root run-parts /etc/cron.hourly; 注意:但是在五個(gè)時(shí)間后面接的並不是指令,而是一個(gè)新的位置,那就是『執(zhí)行後面那串指令的身份』,這與使用者的 crontab -e 不相同
當(dāng)然,也可以用service crond restart
方法一: crontab -e 00 08 * * * su – Oracle -c “/home/oracle/html.sh” 方法二: vi /etc /crontab 00 08 * * * root su – Oracle -c “/home/oracle/html.sh” 或者 00 08 * * * Oracle /home/oracle/html.sh
本文出自:億恩科技【1tcdy.com】 服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |