如何在 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 应用程序中向用户显示有关维护和夜间作业的消息的主要内容,如果未能解决你的问题,请参考以下文章