データウェアハウスプロジェクトを実施して、ステージングデータベースからKimball Data Warehouseにデータを移動しています。
カスタムストアドプロシージャのエラーログテーブルを作成する目的は何ですか?
多くのウェブサイトがこれを推奨しているのを見ています。 SQLサーバーには、SSMSに既にエラーログテーブルがあります(オプションa)。
では、なぜ別のエラーログテーブルを作成するのですか? (オプションb)。 SELECT @ErrMsg = 'testabcd'の両方のオプションを使用して、エラーメッセージをカスタマイズすることもできます。誰かが説明できますか?ありがとうございました、
注:dbasのエラーをログに記録するSSMSの自動機能はありますか?これらのエラーをキャプチャする唯一の方法はカスタムテーブルですか? SQLエージェントジョブとSSISパッケージを介してコードを実行していますが、エージェントジョブ履歴とSSISプロジェクトカタログにエラーが発生したと思いましたか? null以外の挿入などの問題、値型変換の問題。
(a)SSMSエラーログテーブル
(b)テーブルとストアドプロシージャhttps://www.tech-recipes.com/rx/53462/sql-server-error -logging-and-reporting-within-a-stored-procedure /
CREATE TABLE [dbo].[ErrorLogTable]
(
[ErrorID] [bigint] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[ErrorNumber] [nvarchar](50) NOT NULL,
[ErrorDescription] [nvarchar](4000) NULL,
[ErrorProcedure] [nvarchar](100) NULL,
[ErrorState] [int] NULL,
[ErrorSeverity] [int] NULL,
[ErrorLine] [int] NULL,
[ErrorTime] [datetime] NULL
);
CREATE PROCEDURE [dbo].[ErrorLogInsert]
AS
INSERT INTO [ErrorLogTable]
(
ErrorNumber
,ErrorDescription
,ErrorProcedure
,ErrorState
,ErrorSeverity
,ErrorLine
,ErrorTime
)
VALUES
(
ERROR_NUMBER()
,ERROR_MESSAGE()
,ERROR_PROCEDURE()
,ERROR_STATE()
,ERROR_SEVERITY()
,ERROR_LINE()
,GETDATE()
);
図(a)は「SSMSエラーログテーブル」ではなく、SQL Server
error log
ファイルの内容です。
発生したエラーservice
およびserver
レベルはここに格納されます。
例は次のとおりです:service
はすでに使用されている、system database files
が見つからない、max server memory
が0に設定されているなどの理由でport
を開始できませんでした。 procedure
を開始できなかったため、procedure
を実行できないため、service
は型をキャッチできません。
error log
やsession
などのlogin failed
に格納された他の種類のエラーが強制終了された場合も、コードでキャッチできません。
error logging proc
は、constraint violation
、conversion
エラー、permission
エラーなどの他のタイプのエラーをキャッチすることを目的としています。これらのタイプのエラーはすべてSQL Server error log
は単にprogramming
エラーなので。
コードがジョブで実行され、ssisパッケージがあるとは言わなかった。 SSISでは、ログを有効にすることができます(既定では無効になっています)。また、コードにtry..catchブロックを含めることができ、エラーを抑制してコードの実行を継続できます。
SSMSには、dbasのエラーをログに記録する他の機能はありません。 SQL Serverエラーログは、サーバーの機能に関するDBAのエラーを提供します。あなたが示した手順は開発者向けであり、キャッチできるエラーはサーバーの寿命に影響を与えません。コードの実行のみを考慮し、プログラミングエラーをキャッチしてログに記録する「デフォルト」のロギングメカニズムはありません。