Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 如何实现心跳定时器_Oracle_Plsql_Dbms Scheduler - Fatal编程技术网

Oracle 如何实现心跳定时器

Oracle 如何实现心跳定时器,oracle,plsql,dbms-scheduler,Oracle,Plsql,Dbms Scheduler,我需要实现一个用PL/SQL编写的heartbeat函数,每5分钟ping一次web服务。我知道PL/SQL确实不是编写这篇文章的正确语言,但必须这样做 DECLARE stored_time TIMESTAMP curr_time TIMESTAMP BEGIN stored_time := current_timestamp; WHILE (curr_time - stored_time > 5) pulse_heartbeat(); s

我需要实现一个用PL/SQL编写的heartbeat函数,每5分钟ping一次web服务。我知道PL/SQL确实不是编写这篇文章的正确语言,但必须这样做

DECLARE
stored_time   TIMESTAMP
curr_time     TIMESTAMP
BEGIN
   stored_time := current_timestamp;
   WHILE (curr_time - stored_time > 5)
      pulse_heartbeat();
      stored_time := current_timestamp;
   END WHILE

上面的伪代码实际上是我认为可以实现的唯一方法。我知道oracle有一个计时器软件包,但我不确定是否应该使用它。有什么想法吗?

似乎您希望每5分钟安排一次过程执行。我建议使用DBMS\u调度程序

数据库级别

BEGIN
  DBMS_SCHEDULER.create_job (
    job_name        => 'pulse_heartbeat',
    job_type        => 'PLSQL_BLOCK',
    job_action      => 'BEGIN pulse_heartbeat; END;',
    start_date      => SYSTIMESTAMP,
    repeat_interval => 'freq=minutely; interval=5; bysecond=0;',
    enabled         => TRUE);
END;
/
上面使用日历语法每隔5分钟重复间隔。它在数据库级别创建作业

操作系统级别

BEGIN
  DBMS_SCHEDULER.create_job (
    job_name        => 'pulse_heartbeat',
    job_type        => 'PLSQL_BLOCK',
    job_action      => 'BEGIN pulse_heartbeat; END;',
    start_date      => SYSTIMESTAMP,
    repeat_interval => 'freq=minutely; interval=5; bysecond=0;',
    enabled         => TRUE);
END;
/

您还可以安排脚本在操作系统级别运行。例如,在基于UNIX的平台中,您可以创建一个shell脚本,并将其计划为cron作业

是否每5分钟执行一次该过程?如果是,则使用
DBMS\u调度程序
。是的,我只需要每隔5分钟运行一次该过程来维护会话状态OK,然后检查解决方案。这是一种标准的方法,这种心跳信号需要为单个用户工作,而不是一项工作。是否可以创建一个计划,并为不同的用户多次实例化?不清楚。该功能可以在PL/SQL代码中处理。这只是一个调度作业,它只会按要求的时间间隔执行该过程。逻辑将在过程中。每个用户会话都有自己的心跳。这是否意味着我必须为每个用户创建一个计划作业?该函数的作用是什么?具体要求是什么?如果建立了数据库会话,它永远不应该断开连接,并且应该始终在同一会话中每5分钟执行一次函数?