この記事では、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() 文書化されていない関数のようです。