欢迎来到天天文库
浏览记录
ID:59301692
大小:150.68 KB
页数:6页
时间:2020-09-06
《LINUX定时执行含有DB2存储过程的SHELL脚本.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、LINUX下定时执行含有DB2存储过程的SHELL脚本最近项目要求将某些表中的数据转移到历史数据表中,并将成功转移后的数据在生产系统中删除,并且要求每天凌晨1:00定时执行脚本。这是我第一次写这样的脚本程序,现将整个编写过程或步骤记录如下,希望能对有类似需求的人所有帮助,由于本人也是刚接触DB2数据库和shell脚本,错误之处还请见谅。测试服务器的操作系统是Redhat,数据库产品:DB2(10.1版本),转移数据是在DB2存储过程中实现的,下面分几个步骤进行叙述。一、编写DB2存储过程1》编写存储过程具体代码见表格1,将其中的代码形成一个sql文件,文件
2、名为dataHandle.sqlCREATEORREPLACEPROCEDUREtest_schema.dataHandle(int_IdINT)--in表示输入参数RESULTSETS1--返回结果为1个LANGUAGESQLP1:BEGINATOMIC--ATOMIC为了使P1和ENDP1之间形成一个事务,要么同时成功,要么同时失败declaretIdINT;--声明变量settId=t_Id;--赋值变量IFtId>0THEN--判断insertintoTEST_SCHEMA.TEST_HISTORY(t_Id,t_name)selectt_Id,t
3、_namefromTEST_SCHEMA.TM_ASM_FLTSCHwherewheret_Id=tId;--转移数据deletefromTEST_SCHEMA.TM_ASM_FLTSCHwheret_Id=tId;--删除数据ENDIF;ENDP1@--@这里是必须的表12》部署存储过程到指定数据库a)连接数据库切换到数据库用户下执行命令:db2connecttoDbname或者不切换用户执行命令:db2connecttoDbnameuserUsernameusing******b)部署1》中写好的存储过程执行命令:db2-td@-vfdataHandl
4、e.sql或者使用datastudio进行部署,具体流程如下:最后点击Finish即可。一、编写SHELL脚本该脚本的代码见表2,主要功能是:将表test中90天之前的数据转移到test_history表中,并将表test中已被转移的数据删除掉,并对表test,test_history进行重组,使表中的索引及时生效。脚本文件名为cronTransData.sh,其中获取主键值时,是将符合查询条件的所有主键都输出到文件re.txt中,之后逐行读取该文件中的主键值,并在循环中逐个处理(循环调用存储过程)。#!/bin/sh#loaddb2environment
5、variables./home/db2inst1/.profile#加载DB2数据的环境变量startTime=`date+%s`#获取当前时间戳#transferdata(90daysbefore)tohistorytableoutDate=`date-d-90day+%Y-%m-%d`#获取当前日期90天之前的日期db2connecttoDbname#连接数据库#fetchtheprimarykeyvaluesoftransfereddataintore.txtfile.db2"selectt_Idfromtest_schema.testwhereto
6、_date<='$outDate'">re.txt;#将90天之前的数据的主键值输出到文件re.txt中db2terminate#终止数据库连接,释放链接资源#readre.txtfiletofetchfltschId'svaluecatre.txt
7、grep'[s0-9s]$'
8、whilereadtId#从上面的输出文件中提取只含数字和空格的行(只读取主键值)do#循环执行db2connecttoseat#callstoreprocefuretocompletedatatransferdb2"calltest_schema.dataHandle('$
9、tId')"#调用上面部署成功的存储过程db2terminate;donerunstatsontabletest_schema.testandindexall;#整理一下表runstatsontabletest_schema.test_historyandindexall;endTime=`date+%s`#运行结束时间spendTime=$((endTime-startTime))#整个过程消耗的时间echo'Spenttotaltime:'$spendTime's'#打印总消耗,时间单位为秒表2一、编写crontab定时脚本编写定时脚本,脚本名为db2
10、inst1,脚本中的内容为:*1***./opt/yourdir/
此文档下载收益归作者所有