linux 定时导出sql查询结果文件
如果想在服务器端生成sql查询结果的txt文件。
大体思路就是:
1.创建一个到处txt文件的sql脚本。
set ARRAYSIZE 50 --从数据库往客户端一次发送记录数 set linesize 100 --一行的字符数 SET PAGESIZE 0 --设置不分页 set timing off --关闭显示sql执行时间 set heading off --不显示每行的列名 set feedback off --回显本次sql命令处理的记录条数,缺省为on SET TRIMOUT ON --去除标准输出每行的拖尾空格,缺省为off set trimspool on --去除重定向(spool)输出每行的拖尾空格,缺省为off set termout off --显示脚本中的命令的执行结果,缺省为on define r_filename=&1 --定义导出文件路径和文件名 spool &r_filename; select empno||\',\'||ename from emp; spool off;
2.创建一个shell脚本调用写好的sql脚本。
#! /bin/bash START_TIME=`date +%Y%m%d%H%M%S` TIMESTAMP=`date +%Y%m%d%H%M%S` DB_USER="apps/apps@orcl.net" FILE_PATH=$HOME/temp FILE_NAME=tt$TIMESTAMP.txt SQL_FILE=$HOME/sql/tt.sql echo \'Start time is: \'$TIMESTAMP echo \'SQL file is: \'$SQL_FILE echo \'OUT file is: \'$FILE_NAME echo \'File full path is: \'$FILE_PATH/$FILE_NAME sqlplus -S $DB_USER @$SQL_FILE $FILE_PATH/$FILE_NAME if [ -r $FILE_PATH/$FILE_NAME ]; then echo "$FILE_NAME create success" else echo "$FILE_NAME create fail" exit 1 fi END_TIME=`date +%Y%m%d%H%M%S` echo \'End time is: \'$END_TIME
3.可以创建一个linux的定时任务,定时调用如上shell脚本。
1)先创建一个定时任务列表的文件,oraclecron
#分 时 日 月 星期 命令完全路径
#这条命令表示每个15分钟调用一次/home/oracle/myShell/ttt 15,30,45,0 * * * * /home/oracle/myShell/ttt
2)把这个定时任务添加到系统crontab列表
crontab oraclecron
3)可以用如下命令查看系统crontab任务,如果看到你在oraclecron文件中添加的任务就OK了。
crontab -l
4.从定时任务添加成功后,每逢整刻钟系统就会掉用 2 中创建的shell脚本,2 的shell脚本调用 1 的sql脚本。
最终生成一个文件在oracle服务器上。