Linux中定时执行DB2的存储过程

一、需求说明

  将DB2中的实时数据按天和小时汇总到汇总表中。

二、过程及步骤

  第一步:编写DB2存储过程。

  1. 在Dbvisualizer中新建SQL editor。

  2. 代码:

 1 --/
 2 CREATE PROCEDURE "NCPOLLDATA"."AGGREGATE_ENTITY_DAILY"
 3 ()
 4 LANGUAGE SQL
 5 SPECIFIC SQL160427123206300
 6 BEGIN
 7   --declare varibles
 8   DECLARE V_PREFIX_TIME VARCHAR(7);
 9   DECLARE V_START_TIME VARCHAR(16);
10   DECLARE V_END_TIME VARCHAR(16);
11   DECLARE V_AGGREGATE_TIMESTAMP BIGINT DEFAULT 0;
12   DECLARE V_YEAR_VALUE INTEGER DEFAULT 0;
13   DECLARE V_MONTH_VALUE INTEGER DEFAULT 0;
14   DECLARE V_AGGREGATE_TIME TIMESTAMP;
15   --set varibles value
16   SET V_PREFIX_TIME = (‘1‘ || REPLACE(SUBSTR(CHAR(current_timestamp - 1 DAYS), 3, 9), ‘-‘, ‘‘));
17   SET V_START_TIME = V_PREFIX_TIME || ‘000000000‘;
18   SET V_END_TIME = V_PREFIX_TIME || ‘235959999‘;
19   SET V_YEAR_VALUE = YEAR(current_timestamp - 1 DAYS);
20   SET V_MONTH_VALUE = MONTH(current_timestamp - 1 DAYS);
21   SET V_AGGREGATE_TIME = current_timestamp - 1 DAYS;
22   SET V_AGGREGATE_TIMESTAMP = TIMESTAMPDIFF(2, CHAR(current_timestamp - TIMESTAMP(‘1970-01-01-00.00.00‘)));
23   --action
24   FOR TEMP_CUR AS
25     SELECT t1.MONITOREDOBJECTID AS "POLICY_ID", t2.MAINNODEENTITYID AS "ENTITY_ID",
26     MIN(VALUE) AS "MIN_VALUE", MAX(VALUE) AS "MAX_VALUE",  AVG(BIGINT(VALUE)) AS "AVG_VALUE",
27     COUNT(VALUE) AS "DATA_COUNT", SUM(BIGINT(VALUE)) AS "DATA_SUM"
28     FROM POLLDATA t1 LEFT JOIN MONITOREDINSTANCE t2 ON t1.MONITOREDINSTID = t2.MONITOREDINSTID
29     WHERE t1.TDWTIME BETWEEN V_START_TIME AND V_END_TIME
30     GROUP BY t1.MONITOREDOBJECTID, t2.MAINNODEENTITYID
31     ORDER BY t1.MONITOREDOBJECTID, t2.MAINNODEENTITYID
32   DO
33   --insert statement
34     INSERT INTO POLLDATA_ENTITY_DAILY
35     VALUES (TEMP_CUR.POLICY_ID, TEMP_CUR.ENTITY_ID, V_AGGREGATE_TIMESTAMP,
36       V_YEAR_VALUE, V_MONTH_VALUE, V_AGGREGATE_TIME,
37       TEMP_CUR.MIN_VALUE, TEMP_CUR.MAX_VALUE, TEMP_CUR.AVG_VALUE, TEMP_CUR.DATA_COUNT, TEMP_CUR.DATA_SUM);
38   END FOR;
39 END
40 /

  注意:在Dbvisualizer中编写DB2存储过程,第一行的 --/  和最后一行的 / 是必不可少的否则报错。

  3. 执行存储过程: 点击Dbvisualizer的存储过程编辑框的执行按钮即可,也可以在命令行中执行call procedure_name。

  第二步:编写可在Linux系统执行的脚本命令。

#!/bin/sh

DB2_HOME=/opt/IBM/tivoli/netcool/platform/linux2x86/db2

PATH=$DB2_HOME/bin:$PATH

export $DB2_HOME

export $PATH

startTime=`date +%Y%m%d%H%M%S`

echo $startTime

echo "开始执行脚本"

db2 connect to ITNM user NCIM using tiv0li

echo "连接上数据库,开始执行脚本"

db2 "call NCPOLLDATA.AGGREGATE_ENTITY_DAILY()"

endTime=`date +%Y%m%d%H%M%S`

echo $endTime

echo "脚本执行完毕!关闭数据库连接"

db2 terminate

  以上命令参考资料:http://blog.csdn.net/sweetbowie/article/details/19614289

  第三步:设置crond服务随Linux系统自启动

  [email protected] ~]# /etc/init.d/crond restart

  如果让crond在开机时运行,应该改变其运行级别

  [[email protected] ~]# chkconfig --levels 35 crond on

  【相关资料链接】

  1. http://blog.csdn.net/sweetbowie/article/details/19614289

  2. http://www.linuxidc.com/Linux/2012-02/54391.htm

  3. http://blog.csdn.net/liu_xing_hui/article/details/6565804/

  4. http://blog.csdn.net/lulei9876/article/details/9170151

  5. http://blog.csdn.net/jiujie395/article/details/8692655

  

时间: 2024-11-05 16:41:05

Linux中定时执行DB2的存储过程的相关文章

在Linux中定时执行一个程序的方法之at命令

/*********************************************************************  * Author  : Samson  * Date    : 04/29/2014  * Test platform:  *              3.11.0-12-generic #19-Ubuntu  *              GNU bash, version 4.2.45  * ****************************

linux crontab定时执行

#利用crontab定时执行url研究了两种简单方式#一利用lynx访问url yum install lynxservice crond startcrontab -einsert键* * * * * lynx -dump http://192.168.0.10/gas_station_erp/index.php/socket/SendDev/getDevInfoesc :wqservice crond restart #* * * * * 表示每分钟执行一次 #二调用sh脚本 service

Linux编程定时执行某函数

 前言: linux中信号提供了软中断的作用.提供了一种处理异步时间的方法 ,  可以通过信号合理的安排异步任务. linux定义了以下主要的系统信号: 名称                        默认动作                        说明 SIGHUP                   终止进程                        终端线路挂断 SIGINT                   终止进程                        中

Linux下定时执行脚本(转自Decode360)

文章来自:http://www.blogjava.net/decode360/archive/2009/09/18/287743.html Decode360's Blog  老师(业精于勤而荒于嬉 QQ:150355677 MSN:[email protected]) 菜鸟表示不会写shell脚本,但还是能够看懂的,昨天因为传了太多数据,结果namenode进入了safe mode,然后小伙伴赶紧就暂停了每天早晨4点自动执行的数据合并压缩和传输的脚本,今天我自己准备改,才发现这篇博文. 先说说

linux下定时执行脚本

cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业.由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动.关闭这个服务: 1.cron的启动 /sbin/service crond start //启动服务/sbin/service crond stop //关闭服务/sbin/service crond restart //重启服务/sbin/service crond reload //重新载入配置 你也可以将这个服务在系统启动的时候自动启动:

Linux中定时清除指定目录中30分钟前生成的特定文件

1,在/root/deltts目录下,创建脚本 vi clearBigtrc03.sh,输入以下脚本.保存并退出 #!/bin/sh find /root/uploadFiles -mmin +30 -name *.mp3 -exec rm {} \; 2,给文件赋予执行权限 chmod 755 clearBigtrc03.sh 3,添加Linux中的定时任务 输入crontab -e打开定时任务编辑,在最后增加一行如下,然后保存退出 表示每3分钟执行一次脚本 */3 * * * * /root

度量快速开发平台窗体中定时执行实现思路

度量快速开发平台的智能窗体中,可以实现定时执行代码功能,一个简单的功能是 每隔5秒执行段代码功能,可以利用智能窗体的功能管理来实现. 这样就在窗体运行的时候,实现自动刷新.非常方便. 如果要实现更复杂的定时执行功能,可以借助度量快速开发平台强大的二次开发扩展,直接调用visual .net中的timer组件实现.如下: '挂载C#中的Timer组件.dim timer=CreateObject("System.Windows.Forms.Timer")timer.Interval =

crontab(linux下定时执行任务命令)

在linux在可以通过在脚本里(列如sh)写如日常需要进行的操作,然后通过crontab定时运行脚本. Linux下的任务调度分为两类,系统任务调度和用户任务调度. 系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘.日志清理等.在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件. 用户任务调度:用户定期要执行的工作,比如用户数据备份.定时邮件提醒等.用户可以使用 crontab 工具来定制自己的计划任务.所有用户定义的crontab 文件都被保存在 /var/s

Linux中exec()执行文件系列函数的使用说明

函数原型: 描述:    exec()系列函数使用新的进程映像替换当前进程映像.    工作方式没有什么差别, 只是参数传递的方式不同罢了. 说明:    1. 这6个函数可分为两大类: execl()系列 和 execv()系列.    2. `l' 是指把所有传递给程序的参数依次列(list)出来.        `v' 是指把所有参数放到容器(数组, vector)中再一次性传入.         不论是list出来还是vector them all, 参数的最后一个都必须为空指针((ch