web-dev-qa-db-ja.com

sysjobhistoryテーブルのHallengren @DatabasesInParallel sql_message_id 50000

バックアップ、整合性チェック、インデックスメンテナンスのためにOlaの並列実行を実装しました。すべてが順調に動作しているように見えますが、sql_message_id 50000sysjobhistoryテーブルの新しい実行。 [SQLSTATE 01000]ジョブ出力ファイルの各行。これは正常な動作ですか?オンラインで詳細なドキュメントを見つけることができないようです。

3
Jeff Gerew

msdb.dbo.Sysjobhistoryのメッセージ50000が意図されています。

Ola Hallengrenのインデックス最適化手順の一部を取ります:_[dbo].[IndexOptimize]_、整合性チェックの一部:_[dbo].[DatabaseIntegrityCheck]_またはバックアップ手順の一部:_[dbo].[DatabaseBackup]_、同じRAISERROR()ステートメント表示される:

_  SET @StartMessage = 'Date and time: ' + CONVERT(nvarchar,@StartTime,120)
  RAISERROR(@StartMessage,10,1) WITH NOWAIT

  SET @StartMessage = 'Server: ' + CAST(SERVERPROPERTY('ServerName') AS nvarchar(max))
  RAISERROR(@StartMessage,10,1) WITH NOWAIT

  SET @StartMessage = 'Version: ' + CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(max))
  RAISERROR(@StartMessage,10,1) WITH NOWAIT

  SET @StartMessage = 'Edition: ' + CAST(SERVERPROPERTY('Edition') AS nvarchar(max))
  RAISERROR(@StartMessage,10,1) WITH NOWAIT

  SET @StartMessage = 'Platform: ' + @HostPlatform
  RAISERROR(@StartMessage,10,1) WITH NOWAIT

  SET @StartMessage = 'Procedure: ' + QUOTENAME(DB_NAME(DB_ID())) + '.' + QUOTENAME(@SchemaName) + '.' + QUOTENAME(@ObjectName)
  RAISERROR(@StartMessage,10,1) WITH NOWAIT

  SET @StartMessage = 'Parameters: ' + @Parameters
  SET @StartMessage = REPLACE(@StartMessage,'%','%%')
  RAISERROR(@StartMessage,10,1) WITH NOWAIT

  SET @StartMessage = 'Version: ' + @VersionTimestamp
  RAISERROR(@StartMessage,10,1) WITH NOWAIT

  SET @StartMessage = 'Source: https://ola.hallengren.com' + CHAR(13) + CHAR(10) + ' '

  RAISERROR(@StartMessage,10,1) WITH NOWAIT
_

RAISERRROR()は、プロシージャの実行時に実行されます。

履歴を見ると、「エラー」が表示されています。

_select message From msdb..sysjobhistory 
where sql_message_id =50000
_

結果

_Executed as user: DOMAIN\test. ...0000)  Server: test [SQLSTATE 01000] (Message 50000)  Version: 12.0.5546.0 [SQLSTATE 01000] (Message 50000) ...
_

前のT-SQLの例で定義されたものと同じサーバーおよびバージョン情報を使用します。

なぜ「エラー」は50000から始まるのですか?

これは50000から始まります。これは、50000以上から始まり、ユーザーが生成したエラーを定義できるためです。

なぜ手続きにraiserror()があるのですか?

私の意見では、RAISERRROR()は、実行中の内容を知るために履歴DMVに追加情報を追加するために追加され、混乱することなく追加情報を持っていると考えています。表示される内容を制御できます。

私はオラ自身にもっと深い推論を任せます。

その後、履歴は、SSMSジョブアクティビティモニターに追加されます。このモニターは、私たち(ほとんどの人)が知っており、使用しています: enter image description here

だから質問に答えるために、それはその背後にある推論でprocにコード化されています。


RAISERROR()50000のデフォルトの例

50000から始まるエラー番号を使用する場合、raiserrrorでのみカスタムエラーを生成できます。

特定のエラー番号なしのジョブでのテスト:

enter image description here

結果:

enter image description here

50000から開始します。

3
Randi Vertongen