以下のクエリを使用して、SQLでメンテナンスジョブのステータスを取得しようとしています。SQLメンテナンスジョブの最新実行時間を取得
USE msdb
GO
SELECT Distinct SJ.Name AS "Jobs/Sql ServerInstances",
CONVERT(date, getdate(),101) as "Date last monitored",
SJH.run_date AS "Date last run",
CASE SJH.run_status
WHEN 0 THEN 'Failed'
WHEN 1 THEN 'Successful'
WHEN 3 THEN 'Cancelled'
WHEN 4 THEN 'In Progress'
END AS LastRunStatus
FROM sysjobhistory SJH, sysjobs SJ
WHERE SJH.job_id = SJ.job_id and SJH.run_date =
(SELECT MAX(SJH1.run_date) FROM sysjobhistory SJH1 WHERE SJH.job_id = SJH1.job_id)
and SJ.Name like '%DB%'
ORDER BY SJH.run_date desc
以下は、結果を返します。
Jobs/Sql ServerInstances Date last monitored Date last run LastRunStatus
DB_BackuPlan.15min_trx 2016-11-04 20161104 Failed
DB_BackuPlan.15min_trx 2016-11-04 20161104 Successful
DB_BackuPlan.Differential 2016-11-04 20161104 Successful
DB_BackuPlan.Full 2016-11-04 20161029 Successful
ただし、トランザクションログバックアップの最新のレコードのみを返したいとします。 DISTINCTキーワードは列レベルではなく行レベルで検索されることを理解しています(したがって、2つの結果、1つは失敗したステータス、もう1つは同じジョブで成功したステータス)。 上記のジョブの最新の実行情報のみを返す方法はありますか? Iは、以下の変更を加えてきた
[run_time]
の両方を使用してdatetime
値を返します:
それを解決するために
は、私はでそれを変更しました。残念ながら、差分バックアップと完全バックアップのステータスは返されません。私は、ジョブ名自体に基づいて重複を排除する方法があるのだろうかと思っていました。 –