linux脚本 执行db2sql,LINUX定时执行含有DB2存储过程的SHELL脚本

《LINUX定时执行含有DB2存储过程的SHELL脚本》由会员分享,可在线阅读,更多相关《LINUX定时执行含有DB2存储过程的SHELL脚本(6页珍藏版)》请在人人文库网上搜索。

1、LINUX下定时执行含有DB2存储过程的SHELL脚本最近项目要求将某些表中的数据转移到历史数据表中,并将成功转移后的数据在生产系统中删除,并且要求每天凌晨1:00定时执行脚本。这是我第一次写这样的脚本程序,现将整个编写过程或步骤记录如下,希望能对有类似需求的人所有帮助,由于本人也是刚接触DB2数据库和shell脚本,错误之处还请见谅。测试服务器的操作系统是Redhat,数据库产品:DB2(10.1版本),转移数据是在DB2存储过程中实现的,下面分几个步骤进行叙述。1、 编写DB2存储过程1编写存储过程具体代码见表格1,将其中的代码形成一个sql文件,文件名为dataHandle.sqlCRE。

2、ATE OR REPLACE PROCEDURE test_schema.dataHandle(in t_Id INT)-in表示输入参数RESULT SETS 1 -返回结果为1个LANGUAGE SQLP1: BEGIN ATOMIC -ATOMIC为了使P1和END P1之间形成一个事务,要么同时成功,要么同时失败declare tIdINT; -声明变量set tId=t_Id; -赋值变量IF tId 0 THEN -判断insert into TEST_SCHEMA.TEST_HISTORY(t_Id,t_name)select t_Id,t_namefrom TEST_SCHEM。

3、A.TM_ASM_FLTSCH where where t_Id=tId; -转移数据delete from TEST_SCHEMA.TM_ASM_FLTSCH where t_Id=tId; -删除数据END IF;END P1 -这里是必须的表12部署存储过程到指定数据库a) 连接数据库切换到数据库用户下执行命令:db2 connect to Dbname或者不切换用户执行命令:db2 connect to Dbname user Username using *b) 部署1中写好的存储过程执行命令:db2 -td -vf dataHandle.sql或者使用datastudio进行部署,。

4、具体流程如下:最后点击Finish即可。2、 编写SHELL脚本该脚本的代码见表2,主要功能是:将表test中90天之前的数据转移到test_history表中,并将表test中已被转移的数据删除掉,并对表test,test_history进行重组,使表中的索引及时生效。脚本文件名为cronTransData.sh,其中获取主键值时,是将符合查询条件的所有主键都输出到文件re.txt中,之后逐行读取该文件中的主键值,并在循环中逐个处理(循环调用存储过程)。#!/bin/sh#load db2 environment variables. /home/db2inst1/.profile #加载D。

5、B2 数据的环境变量 startTime=date +%s #获取当前时间戳#transfer data(90 days before) to history tableoutDate=date -d -90day +%Y-%m-%d #获取当前日期90天之前的日期db2 connect to Dbname #连接数据库#fetch the primary key values of transfered data into re.txt file.db2 select t_Id from test_schema.test where to_date re.txt; #将90天之前的数据的主键。

6、值输出到文件re.txt中db2 terminate #终止数据库连接,释放链接资源#read re.txt file to fetch fltschIds valuecat re.txt|grep s0-9s$|while read tId #从上面的输出文件中提取只含数字和空格的行(只读取主键值)do #循环执行db2 connect to seat#call store procefure to complete data transferdb2 call test_schema.dataHandle($tId) #调用上面部署成功的存储过程db2 terminate;donerunst。

7、ats on table test_schema.test and index all; #整理一下表runstats on table test_schema.test_history and index all; endTime=date +%s #运行结束时间spendTime=$(endTime-startTime) #整个过程消耗的时间echo Spent total time:$spendTime s #打印总消耗,时间单位为秒表23、 编写crontab定时脚本编写定时脚本,脚本名为db2inst1,脚本中的内容为:* 1 * * * . /opt/yourdir/cronTransData.sh/opt/yourdir/tranLog在crontab脚本所在的目录下,执行crontab db2inst1(crontab脚本名),即可。总结,上面的脚本稍作改动即可在AIX(unix)系统上运行,希望能帮助看到此文档的同学,我这里只是一个比较简单的定时脚本,抛砖引玉吧,后期还会进行丰富和更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值