この記事では、SQLServerエージェントのジョブ履歴データを返すための4つのオプションを紹介します。
オプション
2つのGUIオプションと2つのT-SQLオプションを含めました:
- オプション1 :SSMSGUIを使用します。
- オプション2 :Azure Data Studio GUIを使用します(SQL Serverエージェント拡張機能を介して)
- オプション3 :
sp_help_jobhistory
を実行します ストアドプロシージャ。 - オプション4 :
sysjobhistory
をクエリします テーブル(およびsysjobs_view
と結合します ビューまたはsysjobs
テーブル)。
SQLServerエージェントオブジェクトはmsdbにあります データベースであるため、T-SQLオプションはそのデータベースで実行する必要があります。 msdbに切り替えることでそれを行うことができます 最初にデータベースを作成するか、オブジェクトを適切に修飾します(例:msdb.dbo.sysjobhistory
。
オプション1:SSMSGUIを使用する
SQL Server Management Studio(SSMS)GUIを使用して、ジョブ履歴を表示できます。
これを行うには、オブジェクトエクスプローラーでSQL Serverエージェントノードを展開し、ジョブを右クリックします。 履歴の表示を選択します コンテキストメニューから:
これにより、ログファイルビューア内のすべてのジョブのジョブ履歴を示す新しいウィンドウが開きます:
この画面で他のジョブの選択を解除すると、1つのジョブの履歴を表示できます。または、オブジェクトエクスプローラーでそのジョブを見つけて、そこから右クリックすることもできます。
詳細とスクリーンショットについては、「SSMSを使用したSQLServerエージェントのジョブ履歴の表示」を参照してください。
オプション2:Azure DataStudioGUIを使用する
Azure Data Studioを使用している場合は、それを知らないかもしれませんが、SQLServerエージェントのジョブ履歴を表示するオプションもあります。
これを行う方法は、SQLServerエージェント拡張機能を使用することです。
次のようになります:
この画面では、 BackupKrankyKranesDBというジョブの履歴を確認しています。 。
左ペインにジョブ履歴が一覧表示されます。左側の履歴ペインで各アイテムをクリックすると、そのアイテムの詳細が右側のペインに表示されます。
この記事の執筆時点では、一度に1つのジョブの履歴しか表示できないようです。
詳細とスクリーンショットについては、「AzureDataStudioでのSQLServerエージェントのジョブ履歴の表示」を参照してください。
オプション3:sp_help_jobhistory
ストアドプロシージャ
T-SQLを使用してタスクを実行することを希望する(または必要とする)場合は、sp_help_jobhistory
ストアドプロシージャは、すばやく簡単なオプションです。
sp_help_jobhistory
を呼び出すとき 引数なしで、すべてのジョブの履歴を返します。ただし、ジョブの名前またはIDを渡すと、その1つのジョブの履歴のみが一覧表示されます。
次に例を示します:
EXEC msdb.dbo.sp_help_jobhistory;
結果:
sp_help_jobhistory
に注意してください msdbにあります データベースなので、そこから実行する必要があります。これを行うには、そのデータベースに切り替えます(たとえば、USE msdb
を使用します)。 )、またはストアドプロシージャをデータベースとスキーマで修飾する(つまり、msdn.dbo.sp_help_jobhistory
。
引数としてそのジョブのIDまたは名前を渡すことにより、単一のジョブの履歴を取得できます。
例:
EXEC msdb.dbo.sp_help_jobhistory
@job_name = 'BackupKrankyKranesDB';
@mode parameter
を使用することもできます 結果セットのすべての列を返すかどうかを指定します(FULL
)、または単なる要約(SUMMARY
)。
EXEC msdb.dbo.sp_help_jobhistory
@job_name = 'BackupKrankyKranesDB',
@mode = 'FULL';
デフォルトはSUMMARY
。
オプション4:sysjobhistory
表
sysjobhistory
tableは、ジョブ履歴データを格納するテーブルです。
他のテーブルと同様に、次のように簡単に実行できます。
SELECT * FROM msdb.dbo.sysjobhistory;
これにより、テーブル内のすべての列が返されます。
ただし、このテーブルにはジョブ名(またはジョブの説明など)は格納されません。そのデータを取得するには、このテーブルをsysjobs_view
などの他のテーブル/ビューと結合する必要があります ビューまたはsysjobs
テーブル。これにより、より完全な結果セットが提供されます。
以下は、より完全なデータを返すために使用できるクエリです。
SELECT jv.name AS Job,
jh.step_name AS Step,
msdb.dbo.AGENT_DATETIME(jh.run_date, jh.run_time) AS RunDateTime,
STUFF(STUFF(STUFF(RIGHT(REPLICATE('0', 8) + CAST(jh.run_duration as varchar(8)), 8), 3, 0, ':'), 6, 0, ':'), 9, 0, ':') AS RunDuration
FROM msdb.dbo.sysjobs_view jv
INNER JOIN msdb.dbo.sysjobhistory jh
ON jv.job_id = jh.job_id
ORDER BY Job, RunDateTime;
結果:
SELECT
にさらに列を追加できます 必要に応じてリストします。
このクエリでAGENT_DATETIME()
などの余分なものが大量に使用されるのはなぜか疑問に思われる場合は、 関数、STUFF()
関数、RIGHT()
、CAST()
、およびREPLICATE()
、それはsysjobhistory
の方法によるものです 日時の値を保存します。
これらの関数を使用していなかったとしたら、日時の値は読みにくくなります。
特に、run_date
、run_time
およびrun_duration
列はデータをintとして保存します 値。デフォルトでは、これらの列のデータは次のようになります。
それは私たち人間の何人かが読むのを難しくする可能性があります。特にrun_duration
桁。したがって、上記のクエリのさまざまな関数を使用して、これらの列をより人間が読める形式で表示しました。
sp_help_jobhistory
に気付くかもしれません ストアドプロシージャにも同じ問題があります。
また、AGENT_DATE()
文書化されていない関数のようです。