Linux下Oracle查询结果以html格式定期发送邮件 |
发布时间: 2012/9/24 16:49:59 |
任务: 每天早上8:00将Oracle查询语句的内容变成html的形式,制作一脚本,在指定时间用mutt自动发送到邮箱 版本: Linux version 2.6.18-194.el5 Oracle Release 10.2.0.5.0-
mutt 邮件代理 sendmail crontab 自动任务处理
一 shell脚本(生成html文件,mutt发送) 1 生成html文件 利用行列转换的sql语句,将sys用户下的tb表(表-1)形式转化为表-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文件 #设置生成表格式
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 --需要发送的邮件 echo “test”|mutt -s “subject name” -a /home/Oracle/html1.html `cat /tmp/user.txt`
a 关于sendmail启动缓慢的问题 这是个比较常见的问题,出现这个问题的根本原因是主机名没有分配好 解决办法: 我们可以修改系统配置文件/etc/hosts 和/etc/resolv.conf 让sendmial绕过查询远程主机,这里给出一种最简单的方法,给主机设置一个别名 修改/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`
定义时间让系统自动运行脚本的方法很多 而在linux系统中经常使用的要数crontab了。 (其他的方法有:Oracle中的dbms_jobs,还有就是dbms_scheduler) /etc/cron.deny:
1 直接用crontab命令 當使用者使用 crontab 這個指令來建立工作排程之後,該項工作就會被紀錄到 /var/spool/cron/ 裡面去了,而且是以帳號來作為判別的。另外, cron 執行的每一項工作都會被紀錄到 /var/log/cron 這個登錄檔中,所以囉,如果你的 Linux 不知道有否被植入木馬時,也可以搜尋一下 /var/log/cron 這個登錄檔呢! Crontab语法: crontab [-u username] [-l|-e|-r] croutab -e (默认username为root)打开/var/spool/cron/root 编辑 croutab -l (默认 username 为root)查看root用户下的自动任务 croutab -r (默认 username 为root)删除root下所有的自动任务 编辑内容: * * * * * command
*/5 * * * * command 2 系统设定文件:/etc/crontab 必须是root用户设定 * MAILTO=root: 例如 MAILTO=cklovely@vip.qq.com * PATH=.... 这里就是输入执行命令的搜索路径,使用预设定路径已经足够了 * 01 * * * * root run-parts /etc/cron.hourly; 注意:但是在五个时间后面接的並不是指令,而是一個新的位置,那就是『執行後面那串指令的身份』,這與使用者的 crontab -e 不相同
当然,也可以用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
本文出自:亿恩科技【www.enkj.com】 |