web-dev-qa-db-ja.com

完全なSQLジョブ履歴を表示するにはどうすればよいですか?

SQL Server Management Studioで、SQLジョブの「履歴を表示」すると、ジョブの最後の50回の実行のみが表示されます。

サーバー上で作成されたSQLジョブのすべての実行の完全なログを表示するにはどうすればよいですか?

26
Curt

SQL Serverジョブシステムは、ジョブごとおよびシステム全体にわたるジョブ履歴エントリの総数を制限します。この情報はMSDBデータベースに保存されます。

もちろん、戻って破棄された情報を表示することはできませんが、SQL Serverエージェントプロパティを変更して、今後記録されるエントリの数を増やすことができます。

SQL Serverエージェントのプロパティ:

  • 履歴ページを選択します
  • [ジョブ履歴ログの最大サイズ(行)]および[ジョブごとの最大ジョブ履歴行]を変更するか、履歴に基づいて履歴データを削除する方法を変更します。

履歴は返されませんが、今後のクエリには役立ちます。

38
Jeremy Smyth

ジョブ履歴は、SQL Server自体の専用データベースのどこかに保存されていると確信しています。この場合、SQL Server Profilerを使用して、SQL Server Management Studioから送信されたSQLステートメントをインターセプトし、テーブルの名前などを調べることができます。

4
Anton Gogolev

あなたの結果はいくつかの事柄に依存します。

  1. [ジョブログ履歴のサイズ制限]および[エージェント履歴を自動的に削除]の設定[SQLエージェントを右クリック|プロパティ|歴史]と
  2. メンテナンスプランで「履歴クリーンアップ」タスクを実行しているかどうか(またはその方法で手動で)。 MPタスクはmsdb.dbo.sp_purge_jobhistory選択した期間に相当する「最も古い日付」パラメータを持つストアドプロシージャ。
3

Temporal Tableを使用して、データの保持を変更できます。 Azure SQL Managed Instanceでのジョブ履歴の保持

ALTER TABLE [msdb].[dbo].[sysjobhistory]
ADD StartTime DATETIME2 NOT NULL DEFAULT ('19000101 00:00:00.0000000')

ALTER TABLE [msdb].[dbo].[sysjobhistory]
ADD EndTime DATETIME2 NOT NULL DEFAULT ('99991231 23:59:59.9999999')

ALTER TABLE [msdb].[dbo].[sysjobhistory]
ADD PERIOD FOR SYSTEM_TIME (StartTime, EndTime)

ALTER TABLE [msdb].[dbo].[sysjobhistory]
ADD CONSTRAINT PK_sysjobhistory PRIMARY KEY (instance_id, job_id, step_id)

ALTER TABLE [msdb].[dbo].[sysjobhistory]
SET(SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[sysjobhistoryall],
    DATA_CONSISTENCY_CHECK = ON, HISTORY_RETENTION_PERIOD = 1 MONTH))

select * from msdb.dbo.sysjobhistoryall

このアプローチでは、保持期間を時間として定義できます(ここで1 MONTH)ジョブあたりの最大行数/最大ジョブ履歴ログサイズ(行)の代わりに。

0
Lukasz Szozda