如何识别DB2中存储过程的上次执行时间?

时间:2012-11-05 08:20:43

标签: stored-procedures db2

我想查找上次执行存储过程的时间,以便我可以删除未使用的存储过程。一种方法是扫描代码并找出已使用的存储过程列表并删除未使用的存储过程,因为存储过程的数量不是数千,我想知道DB2中是否有一个选项可以轻松找到它。

2 个答案:

答案 0 :(得分:2)

您没有说明您正在使用的DB2平台或版本。

如果您在DB2 for Linux / UNIX / Windows上运行并且在V9.7或更高版本上运行,则可以查看LASTUSED中的SYSCAT.PACKAGES列,该列可以加入{{1通过SYSCAT.PROCEDURES

SYSCAT.ROUTINEDEP

如果从未执行过程,LASTUSED将具有值'01 / 01/0001'。上面的查询过滤掉了这些。

此外,请注意您可能希望过滤select proc.procschema ,proc.procname ,pkg.lastused from syscat.procedures proc ,syscat.routinedep rd ,syscat.packages pkg where proc.specificname = rd.routinename and rd.bname = pkg.pkgname and pkg.lastused <> '01/01/0001' order by pkg.lastused desc; ,因此您没有看到所有系统存储过程......

答案 1 :(得分:0)

如果没有显式记录或跟踪,则无法获取数据库的每个存储过程的此信息。但是,我们可以通过使用 - sys.dm_exec_procedure_stats获取此详细信息以及存储过程的许多其他相关信息,并将其执行计划当前缓存在服务器上.sys.dm_exec_procedure_stats这是一个系统动态视图,它返回缓存存储过程的聚合性能统计信息。

此视图为每个缓存的存储过程计划返回一行,并且只要存储过程保持缓存,行的生存期就会一直存在。从缓存中删除存储过程时,将从此视图中删除相应的行。

USE DBName    // replace with your DB name
GO  
SELECT   
 O.name,  
 PS.last_execution_time  
FROM   
 sys.dm_exec_procedure_stats PS   
INNER JOIN sys.objects O   
 ON O.[object_id] = PS.[object_id]   
GO  

上面的脚本将返回当前数据库的所有缓存存储过程的名称及其上次执行时间。

有关详细信息,请查看here

在DB2中,我认为您可以安排存储过程在特定时间,间隔或指定事件发生时运行。管理任务调度程序管理这些请求。

程序

安排执行存储过程:

Add a task for the administrative task scheduler by using the ADMIN_TASK_ADD stored procedure. When you add your task, specify which stored procedure to run and when to run it. Use one of the following parameters or groups of parameters of ADMIN_TASK_ADD to control when the stored procedure is run: 

interval - 存储过程以指定的定期间隔执行。 point-in-time - 存储过程将在指定的时间执行。 trigger-task-name - 存储过程将在指定任务发生时执行。 trigger-task-name trigger-task-cond trigger-task-code - 存储过程将在指定的任务和任务结果发生时执行。

或者,您还可以使用以下一个或多个参数来控制存储过程的运行时间:

开始时间戳     最早允许的执行时间 最终时间戳     最新允许的执行时间 MAX-调用     最大执行次数

当存储过程运行指定的时间或事件时,管理任务调度程序将调用DB2®中的存储过程。

  1. 可选:任务完成执行后,使用ADMIN_TASK_STATUS函数检查状态。此函数返回一个表,其中一行指示每个计划任务的上次执行状态。如果计划任务是存储过程,则JOB_ID,MAXRC,COMPLETION_TYPE,SYSTEM_ABENDCD和USER_ABENDCD字段包含空值。对于DB2错误,SQLCODE,SQLSTATE,SQLERRMC和SQLERRP字段包含DB2从调用存储过程返回的信息。
  2. 有关ADMIN_TASK_STATUS click here

    的详细信息