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

Posted

技术标签:

【中文标题】如何在 PHP + MS SQL 应用程序中向用户显示有关维护和夜间作业的消息【英文标题】:How to display a message to the user about maintenance and nightly jobs in PHP + MS SQL application 【发布时间】:2017-05-15 15:39:57 【问题描述】:

我们有更新数据库(SQL 服务器)和表的夜间工作。我们有一个显示数据的 php 应用程序(并且执行 CRUD)。这些作业需要几个小时才能运行,当这些作业正在运行时,我们想通知用户“正在更新作业/数据,请稍后再回来”。 此外,我们确实有一个表格,其中包含第一份工作的开始时间和最后一份工作的结束时间。

问题

什么(以及如何)是检查表以了解作业开始并显示“维护”消息的最佳方式?

【问题讨论】:

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

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

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

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

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

表架构应该是这样的:

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

注意

您可以在作业中添加额外的步骤来更改作业的状态ID,并且仅在绝对需要时阻止用户,否则在很少警告的情况下允许他们进入等。

【讨论】:

【参考方案2】:

另外,检查服务器中当前正在运行哪些作业..

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;

礼貌:https://dba.stackexchange.com/questions/58859/script-to-see-running-jobs-in-sql-server-with-job-start-time

【讨论】:

以上是关于如何在 PHP + MS SQL 应用程序中向用户显示有关维护和夜间作业的消息的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中向特定用户推送通知

如何在 php 中向数千名用户发送安全(爆炸)电子邮件?

如何在Flask应用程序中向SQL存储过程中插入变量参数

如何在 PHP 中向用户发送每日电子邮件通知?

如何在SQL中向表中添加“X”行?

MS SQL SERVER、PHP、PDO、ODBC:用户登录失败