Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.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
如何在PHP+;中向用户显示有关维护和夜间作业的消息;MS SQL应用程序_Php_Sql_Sql Server_Smarty_Sweetalert - Fatal编程技术网

如何在PHP+;中向用户显示有关维护和夜间作业的消息;MS SQL应用程序

如何在PHP+;中向用户显示有关维护和夜间作业的消息;MS SQL应用程序,php,sql,sql-server,smarty,sweetalert,Php,Sql,Sql Server,Smarty,Sweetalert,我们有每晚更新数据库(SQL server)和表的工作,还有一个显示数据(并执行CRUD)的PHP应用程序。这些作业需要几个小时才能运行,当这些作业运行时,我们希望通知用户“作业/数据更新正在进行,请稍后再来”。 我们也有一个表,它有第一个作业的开始时间和最后一个作业的结束时间 问题 检查表中的作业开始,然后显示“维护”消息的最佳方式是什么(以及如何) 在数据库中添加一个表,在每个作业的开头添加该表中的一行(可能是作业中插入此行的第一步) 在作业结束时,删除该作业的该行(作业中删除该行的最后一步

我们有每晚更新数据库(SQL server)和表的工作,还有一个显示数据(并执行CRUD)的PHP应用程序。这些作业需要几个小时才能运行,当这些作业运行时,我们希望通知用户“作业/数据更新正在进行,请稍后再来”。 我们也有一个表,它有第一个作业的开始时间和最后一个作业的结束时间

问题

检查表中的作业开始,然后显示“维护”消息的最佳方式是什么(以及如何)

  • 在数据库中添加一个表,在每个作业的开头添加该表中的一行(可能是作业中插入此行的第一步)

  • 在作业结束时,删除该作业的该行(作业中删除该行的最后一步)

  • 在应用程序代码中,检查该表中的任何行,如果该行存在,则显示消息(“稍后返回bla bla”)

  • 如果该表中没有行,则应用程序将照常工作

  • 表架构应该类似于:

    CREATE TABLE ProcessMonitor 
    (
      JobName NVARCHAR(1000)
    , StatusID  INT
    )
    GO
    


    您可以在作业中添加其他步骤以更改作业的statusID,并且仅在用户绝对需要时阻止用户,否则允许他们进入,并发出少量警告等。

    此外,还可以检查服务器中当前正在运行的作业

    SELECT
        ja.job_id,
        j.name AS job_name,
        ja.start_execution_date,      
        ISNULL(last_executed_step_id,0)+1 AS current_executed_step_id,
        Js.step_name
    FROM msdb.dbo.sysjobactivity ja 
    LEFT JOIN msdb.dbo.sysjobhistory jh 
        ON ja.job_history_id = jh.instance_id
    JOIN msdb.dbo.sysjobs j 
    ON ja.job_id = j.job_id
    JOIN msdb.dbo.sysjobsteps js
        ON ja.job_id = js.job_id
        AND ISNULL(ja.last_executed_step_id,0)+1 = js.step_id
    WHERE ja.session_id = (SELECT TOP 1 session_id FROM msdb.dbo.syssessions ORDER BY agent_start_date DESC)
    AND start_execution_date is not null
    AND stop_execution_date is null;
    

    礼貌:

    每天的开始和结束时间相同?这实际上主要是一个基于意见的问题,因此可能会关闭。您可以使用配置,也可以使用cron更新web服务器或代理配置。很难说什么是最好的方法,因为这取决于你的应用需求。他没有要求最好的方法,这是基于意见的。他提出了一种方法:在表中添加一个字段,显示作业的“状态”。更新包开头和结尾的“状态”字段。向用户报告“状态”。正如评论所说,您有很多方法来实现这一点。除了已经提到的cron/update状态之外,您可以在访问数据的页面中添加一个时间检查:如果时间在您设置的时间间隔内->显示消息(即:抱歉,关闭到凌晨xxAM)