web-dev-qa-db-ja.com

SQL作成エラーログテーブルの利点

データウェアハウスプロジェクトを実施して、ステージングデータベースからKimball Data Warehouseにデータを移動しています。

カスタムストアドプロシージャのエラーログテーブルを作成する目的は何ですか?

多くのウェブサイトがこれを推奨しているのを見ています。 SQLサーバーには、SSMSに既にエラーログテーブルがあります(オプションa)。

では、なぜ別のエラーログテーブルを作成するのですか? (オプションb)。 SELECT @ErrMsg = 'testabcd'の両方のオプションを使用して、エラーメッセージをカスタマイズすることもできます。誰かが説明できますか?ありがとうございました、

注:dbasのエラーをログに記録するSSMSの自動機能はありますか?これらのエラーをキャプチャする唯一の方法はカスタムテーブルですか? SQLエージェントジョブとSSISパッケージを介してコードを実行していますが、エージェントジョブ履歴とSSISプロジェクトカタログにエラーが発生したと思いましたか? null以外の挿入などの問題、値型変換の問題。

(a)SSMSエラーログテーブル

enter image description here

(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()  
       );
1
user172734

図(a)は「SSMSエラーログテーブル」ではなく、SQL Servererror logファイルの内容です。

発生したエラーserviceおよびserverレベルはここに格納されます。

例は次のとおりです:serviceはすでに使用されている、system database filesが見つからない、max server memoryが0に設定されているなどの理由でportを開始できませんでした。 procedureを開始できなかったため、procedureを実行できないため、serviceは型をキャッチできません。

error logsessionなどのlogin failedに格納された他の種類のエラーが強制終了された場合も、コードでキャッチできません。

error logging procは、constraint violationconversionエラー、permissionエラーなどの他のタイプのエラーをキャッチすることを目的としています。これらのタイプのエラーはすべてSQL Server error logは単にprogrammingエラーなので。

コードがジョブで実行され、ssisパッケージがあるとは言わなかった。 SSISでは、ログを有効にすることができます(既定では無効になっています)。また、コードにtry..catchブロックを含めることができ、エラーを抑制してコードの実行を継続できます。

SSMSには、dbasのエラーをログに記録する他の機能はありません。 SQL Serverエラーログは、サーバーの機能に関するDBAのエラーを提供します。あなたが示した手順は開発者向けであり、キャッチできるエラーはサーバーの寿命に影響を与えません。コードの実行のみを考慮し、プログラミングエラーをキャッチしてログに記録する「デフォルト」のロギングメカニズムはありません。

2
sepupic