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

How to display a message to the user about maintenance and nightly jobs in PHP + MS SQL application

我们每晚都有更新数据库的作业(SQL 服务器),tables.And 我们有一个 PHP 应用程序来显示数据(并进行 CRUD)。这些作业需要几个小时才能 运行,当这些作业 运行 宁时,我们想通知用户 "Job/data update is in progress, Please come back later"。 我们也有一个 table,它有第一个工作的开始时间和最后一个工作的结束时间。

问题

检查作业开始的 table 然后显示 "Maintenance" 消息的最佳方法是什么(以及如何)?

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

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

  3. 在应用程序代码中检查 table 中的任何行,如果该行存在则显示您的消息 ("Come back later bla bla")

  4. 如果 table 中没有行,应用程序将照常运行。

Table 模式应该是这样的:

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;

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