- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LINUX下定时执行含有DB2存储过程的SHELL脚本
最近项目要求将某些表中的数据转移到历史数据表中,并将成功转移后的数据在生产系统中删除,并且要求每天凌晨1:00定时执行脚本。这是我第一次写这样的脚本程序,现将整个编写过程或步骤记录如下,希望能对有类似需求的人所有帮助,由于本人也是刚接触DB2数据库和shell脚本,错误之处还请见谅。测试服务器的操作系统是Redhat,数据库产品:DB2(10.1版本),转移数据是在DB2存储过程中实现的,下面分几个步骤进行叙述。
编写DB2存储过程
1》编写存储过程
具体代码见表格1,将其中的代码形成一个sql文件,文件名为dataHandle.sql
CREATE OR REPLACE PROCEDURE test_schema.dataHandle(in t_Id INT)--in表示输入参数
RESULT SETS 1 --返回结果为1个
LANGUAGE SQL
P1: 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_name
from TEST_SCHEMA.TM_ASM_FLTSCH where where t_Id=tId; --转移数据
delete from TEST_SCHEMA.TM_ASM_FLTSCH where t_Id=tId; --删除数据
END IF;
END P1
@ --@这里是必须的
表1
2》部署存储过程到指定数据库
连接数据库
切换到数据库用户下执行命令:db2 connect to Dbname
或者不切换用户执行命令:db2 connect to Dbname user Username using ******
部署1》中写好的存储过程
执行命令:db2 -td@ -vf dataHandle.sql
或者使用datastudio进行部署,具体流程如下:
最后点击Finish即可。
编写SHELL脚本
该脚本的代码见表2,主要功能是:将表test中90天之前的数据转移到test_history表中,并将表test中已被转移的数据删除掉,并对表test,test_history进行重组,使表中的索引及时生效。脚本文件名为cronTransData.sh,其中获取主键值时,是将符合查询条件的所有主键都输出到文件re.txt中,之后逐行读取该文件中的主键值,并在循环中逐个处理(循环调用存储过程)。
#!/bin/sh
#load db2 environment variables
. /home/db2inst1/.profile #加载DB2 数据的环境变量
startTime=`date +%s` #获取当前时间戳
#transfer data(90 days before) to history table
outDate=`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=$outDate re.txt; #将90天之前的数据的主键值输出到文件re.txt中
db2 terminate #终止数据库连接,释放链接资源
#read re.txt file to fetch fltschIds value
cat re.txt|grep [\s0-9\s]$|while read tId #从上面的输出文件中提取只含数字和空格的行(只读取主键值)
do #循环执行
db2 connect to seat
#call store procefure to complete data transfer
db2 call test_schema.dataHandle($tId) #调用上面部署成功的存储过程
db2 terminate;
done
runstats on table test_schema.test and index all; #整理一下表
runstats on
您可能关注的文档
最近下载
- 财务管理大学生职业生涯规划书.pptx
- 《苯二氮卓类药物的合成》课件.ppt VIP
- tissin_positioner_ts900-manual_c调试详细步骤.pdf VIP
- 危化品车辆运输安全培训课件.pptx VIP
- 2025广西公需科目考试答案(3套涵盖95-试题)一区两地一园一通道建设人工智能时代的机遇与挑战.docx
- 2025黑龙江专升本植物学考试真题 .pdf VIP
- 2025秋沪教牛津新七年级上知识点清单(背诵版) .pdf VIP
- 一种PMMA/ASA材料及其制备方法.pdf VIP
- Midea 美的 MXV-ZLD90Q55消毒柜 说明书.pdf
- 新版沪教牛津7A2024秋沪教牛津新七年级上知识点清单(默写版).docx VIP
原创力文档


文档评论(0)