任务: 每天早上8:00将oracle查询语句的内容变成html的形式,制作一脚本,在指定时间用mutt自动发送到邮箱版本: Linux version
任务: 每天早上8:00将Oracle查询语句的内容变成html的形式,制作一脚本,在指定时间用mutt自动发送到邮箱
版本: Linux version 2.6.18-194.el5
Oracle Release 10.2.0.5.0
使用工具:shell 脚本
mutt 邮件代理
sendmail
crontab 自动任务处理
一 shell脚本(生成html文件,mutt发送)
1 生成html文件
利用行列转换的sql语句,,将sys用户下的tb表(表-1)形式转化为表-2,并生成html1.html文件
表-1
NAME COURSE SCORE---------- ---------- ----------
chen chinese 74
chen math 99
chen physics 88
ck chinese 78
ck math 89
ck physics 98
表-2
NAME chinese math physics totle avg
---------- ---------- ---------- ---------- ---------- ----------
chen 74 99 88 261 87
ck 78 89 98 265 88.33
使用的select语句(行列转换)
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 pagesize 0
set term off
set feedback off
set linesize 1000
set trimspool on
set term off verify off feedback off pagesize 999
#开启生成html文件
set markup html on entmap on spool on head "
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
2 使用mutt发送
echo cklovely@vip.qq.com > /tmp/user.txt --需要发送的邮件
echo “test”|mutt -s “subject name” -a /home/oracle/html1.html `cat /tmp/user.txt`
说明:-s 邮件的题目 -a 添加附件 最后是添加发送的邮箱地址
注意:此处默认发件箱是本机 root@localhost.localdomain,而值得一提的是,必须要在sendmail运行的行况下才可以发送
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
b 如果不需要从 root@localhost.localdomain 中发送邮件,可以选择从哪个邮箱发送,在/etc/Muttrc中添加一行
my_hdr from: ckQyanqi@126.com
3 完成html.sh脚本
cat /home/oracle/html.sh
#!/bin/bash
source ~oracle/.bash_profile
$ORACLE_HOME/bin/sqlplus -s "/ as sysdba"
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 "
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:
將不可以使用 crontab 的帳號寫入其中,若未記錄到這個檔案當中的使用者,就可以使用 crontab 。
运行crontab有2种方法:
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
代表意義 分鐘 小時 日期 月份 週 指令
數字範圍 0-59 0-23 1-31 1-12 0-7 命令或脚本
特殊字符 代表意義
*(星號) 代表任何時刻都接受的意思!舉例來說,範例一內那個日、月、週都是 * , 就代表著『不論何月、何日的禮拜幾的 12:00 都執行後續指令』的意思!
,(逗號) 代表分隔時段的意思。舉例來說,如果要下達的工作是 3:00 與 6:00 時,就會是: 0 3,6 * * * command時間參數還是有五欄,不過第二欄是 3,6 ,代表 3 與 6 都適用!
-(減號) 代表一段時間範圍內,舉例來說, 8 點到 12 點之間的每小時的 20 分都進行一項工作: 20 8-12 * * * command仔細看到第二欄變成 8-12 喔!代表 8,9,10,11,12 都適用的意思!

oracle asm指的是“自动存储管理”,是一种卷管理器,可自动管理磁盘组并提供有效的数据冗余功能;它是做为单独的Oracle实例实施和部署。asm的优势:1、配置简单、可最大化推动数据库合并的存储资源利用;2、支持BIGFILE文件等。

方法:1、利用“select*from user_indexes where table_name=表名”语句查询表中索引;2、利用“select*from all_indexes where table_name=表名”语句查询所有索引。

在Oracle中,可利用lsnrctl命令查询端口号,该命令是Oracle的监听命令;在启动、关闭或重启oracle监听器之前可使用该命令检查oracle监听器的状态,语法为“lsnrctl status”,结果PORT后的内容就是端口号。

在oracle中,可以利用“TO_SINGLE_BYTE(String)”将全角转换为半角;“TO_SINGLE_BYTE”函数可以将参数中所有多字节字符都替换为等价的单字节字符,只有当数据库字符集同时包含多字节和单字节字符的时候有效。

在oracle中,可以利用“drop sequence sequence名”来删除sequence;sequence是自动增加数字序列的意思,也就是序列号,序列号自动增加不能重置,因此需要利用drop sequence语句来删除序列。

在oracle中,可以利用“select ... From all_tab_columns where table_name=upper('表名') AND owner=upper('数据库登录用户名');”语句查询数据库表的数据类型。

方法:1、利用“LOWER(字段值)”将字段转为小写,或者利用“UPPER(字段值)”将字段转为大写;2、利用“REGEXP_LIKE(字符串,正则表达式,'i')”,当参数设置为“i”时,说明进行匹配不区分大小写。

方法:1、利用“alter system set sessions=修改后的数值 scope=spfile”语句修改session参数;2、修改参数之后利用“shutdown immediate – startup”语句重启服务器即可生效。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),