监视Oracle中存储过程的执行时间

监视Oracle中存储过程的执行时间,oracle,Oracle,有没有办法监视存储过程的执行时间? 如果执行时间超过某个固定时间,也要执行一些操作,我不知道直接的方法,但可以使用PL/SQL包 过程运行时,您可以通过以下方式进行查询(并在需要时执行某些操作): 如果需要,您还可以放置时间戳或执行时间,例如DBMS\u应用程序\u信息.SET\u操作('开始于'| | systimestamp) 如果您正在处理调度程序作业,则可以直接监视和停止作业: BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE( NAME

有没有办法监视存储过程的执行时间?
如果执行时间超过某个固定时间,也要执行一些操作,我不知道直接的方法,但可以使用PL/SQL包

过程运行时,您可以通过以下方式进行查询(并在需要时执行某些操作):

如果需要,您还可以放置时间戳或执行时间,例如
DBMS\u应用程序\u信息.SET\u操作('开始于'| | systimestamp)

如果您正在处理调度程序作业,则可以直接监视和停止作业:

BEGIN
    DBMS_SCHEDULER.SET_ATTRIBUTE( 
        NAME      => 'MY_JOB',
        ATTRIBUTE => 'MAX_RUN_DURATION',
        VALUE     => INTERVAL '10' MINUTE);
END;
而这个电话经常:

DECLARE

    CURSOR Jobs IS
    SELECT JOB_NAME, LAST_START_DATE, MAX_RUN_DURATION
    FROM USER_SCHEDULER_JOBS
    WHERE JOB_NAME = 'MY_JOB'
        AND STATE = 'RUNNING'
        AND SYSTIMESTAMP - LAST_START_DATE > MAX_RUN_DURATION;

BEGIN

    FOR aJob IN Jobs LOOP
        DBMS_SCHEDULER.STOP_JOB('MY_JOB', FORCE => TRUE);
    END LOOP;

END;

我不知道一种直接的方法,但您可以使用PL/SQL包

过程运行时,您可以通过以下方式进行查询(并在需要时执行某些操作):

如果需要,您还可以放置时间戳或执行时间,例如
DBMS\u应用程序\u信息.SET\u操作('开始于'| | systimestamp)

如果您正在处理调度程序作业,则可以直接监视和停止作业:

BEGIN
    DBMS_SCHEDULER.SET_ATTRIBUTE( 
        NAME      => 'MY_JOB',
        ATTRIBUTE => 'MAX_RUN_DURATION',
        VALUE     => INTERVAL '10' MINUTE);
END;
而这个电话经常:

DECLARE

    CURSOR Jobs IS
    SELECT JOB_NAME, LAST_START_DATE, MAX_RUN_DURATION
    FROM USER_SCHEDULER_JOBS
    WHERE JOB_NAME = 'MY_JOB'
        AND STATE = 'RUNNING'
        AND SYSTIMESTAMP - LAST_START_DATE > MAX_RUN_DURATION;

BEGIN

    FOR aJob IN Jobs LOOP
        DBMS_SCHEDULER.STOP_JOB('MY_JOB', FORCE => TRUE);
    END LOOP;

END;

这是dbms_profiler包。以前,应将其设置为可供使用。它创建一个表服务。 更多详细信息可在文档中找到:
这是dbms_profiler包。以前,应将其设置为可供使用。它创建一个表服务。 更多详细信息可在文档中找到: