免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2029 | 回复: 0
打印 上一主题 下一主题

Shell expect SQL*Loader SQL*Plus CAjob 协调使用案例 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-21 10:30 |只看该作者 |倒序浏览
接到一个任务,为了和其它部门的数据交互,老大让我做一个定时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 [lindex $argv 1]
spawn su - [lindex $argv 0]
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 [lindex $argv 1]
spawn su - [lindex $argv 0]
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:
[email=autosys@hostname]autosys@hostname[/email]
permission: gx,wx alarm_if_fail: 1
JOB布置成功后,就可以排时间让他定时Run啦。




本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/46451/showart_364451.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP