Shell expect SQL*Loader SQL*Plus CAjob 协调使用案例
接到一个任务,为了和其它部门的数据交互,老大让我做一个定时RUN的script,将txt文本中的数据导到DB中,再执行相关Procedure处理数据,最后以txt方式丢出处理结果。我做完了,现于此将此段过程总结一下,为了不让自己忘记。关键字:Shell expect SQL*Loader SQL*Plus CAjob
知识点:sqlldr 脚本的编写 --用来导入数据
sqlplus 命令的使用 --用来执行存储过程和丢出处理结果txt文档
expect 命令的使用 --用于在shell脚本中非交互式切换用户,执行指定用户下的script
CAjob 程序的应用 --用来对程式(或script)排程
sqlldr脚本编写
完成后命令行:
bash$:sqlldr user/pwd@qa_et1 control='slctl.txt' log='sllog.txt'
slctl.txt内容如下:
load data
infile '/export/home/tuqing/exchange/RFD/data20070820.txt'
badfile '/oracle/tuqing/slbad.txt'
truncate
into table temp_Table
fields terminated by X'09'--以tab为分隔符
(
a,
b,
c,
d date "YYYY-MM-DD"
)
到此就可以将txt文本中的内容导入DB了。
sqlplus执行Procedure,并产生处理结果txt文档
命令行:
bash$:sqlplus tuqing/tuqing@qa_et1 @slsql.txt
slsql.txt内容如下:
exec TQ_SP_RetunBatch;
set pagesize 50000 newpage 0
set colsep " "
set termout off echo off feedback off heading on underline off
spool /export/home/tuqing/exchange/RFD/error/data.txt
select * from temp_returnrefunderr;
spool off
spool /export/home/tuqing/exchange/RFD/final/data.txt
select * from temp_ReturnRefundfinal;
spool off
exit;
至此就可以执行Procedure(TQ_SP_RetunBatch),并产生处理结果
expect用来在脚本中非交互式切换用户
expect的初始安装和教程请看
http://blog.chinaunix.net/u1/46451/showart.php?id=364480
http://blog.chinaunix.net/u1/46451/showart.php?id=364486
http://blog.chinaunix.net/u/4206/showart_222940.html
命令行:
bash$:/usr/local/bin/expect swUser.exp oracle oracle
swUser.exp文件内容如下:
#! /usr/local/bin/expect
set pass
spawn su -
expect "Password:"
send "$pass\n"
send "bash\n"
send "cd /oracle/tuqing\n"
send "slRunAuto.sh\n"
send "exit\n"
send "exit\n"
interact
至此就完成了自动切换用户,并执行指定用户下的script
此后发现一个问题,由于IO没及时响应,导致命令未按顺序执行。原因在于,不要一骨脑的将命令一次性
send出去,IO来不及响应,它会认为这些命令非法而不能执行。改正后的代码如下:
#! /usr/local/bin/expect
set pass
spawn su -
expect "Password:"
send "$pass\n"
expect "Sun"
send "bash\n"
expect "bash"
send "cd /oracle/tuqing\n"
expect "bash"
send "slRunAuto.sh\n"
expect "bash"
send "exit\n"
expect "exit"
send "exit\n"
interact
CAjob来排程
CAjob 是 Computer Associates公司的 AutoSys产品,大陆用得较少好像。
进入Xmanager图形界面,执行:
bash$:autosc
在图形界面中 JobDefine
如下是 job文本内容(非script)
insert_job: RFD_001 job_type: c command: /usr/local/bin/expect /export/home/tuqing/swUser.exp oracle oracle machine: swallow5 #owner:
autosys@hostname
permission: gx,wx alarm_if_fail: 1
JOB布置成功后,就可以排时间让他定时Run啦。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/46451/showart_364451.html
页:
[1]