Sql-Server

SQL 創建錯誤日誌表的好處

  • February 22, 2019

我們正在進行一個數據倉庫項目,將數據從暫存數據庫移動到 Kimball 數據倉庫。

創建自定義儲存過程錯誤日誌表的目的是什麼?

我看到很多網站都推薦這個。SQL 伺服器在 SSMS 中已經有一個錯誤日誌表(選項 a)。

那麼為什麼要創建另一個錯誤日誌表,看起來像是額外的編碼呢?(選項 b)。我什至可以使用 SELECT @ErrMsg = ’testabcd’ 這兩個選項自定義錯誤消息。有人可以解釋嗎?謝謝,

注意:SSMS 中是否有任何自動功能為 dbas 記錄錯誤?擷取這些錯誤的唯一方法是自定義表嗎?我們正在通過 sql 代理作業和 SSIS 包執行程式碼,以為我們在代理作業歷史記錄和 SSIS 項目目錄中看到了錯誤?非空插入、值類型轉換等問題。

(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無法啟動,因為port已經被佔用, system database files沒有找到,max server memory被配置為0等。這種類型的錯誤不能被你擷取,procedure因為procedure不能被執行,因為service無法啟動。

您的程式碼也無法擷取其他類型的錯誤,error log例如儲存login failed或被殺死。session

error logging proc的目的是擷取其他類型的錯誤,例如constraint violationconversion錯誤,permission錯誤,所有這些類型的錯誤都沒有記錄,SQL Server error log因為它們只是programming錯誤。

您沒有說您的程式碼在作業中執行並且有 ssis 包。在 SSIS 中,您可以啟用日誌記錄(預設情況下不啟用),此外,您的程式碼可以有 try..catch 塊,您希望在其中抑制錯誤並繼續執行程式碼。

SSMS 中沒有其他功能可以為 dbas 記錄錯誤。SQL Server 錯誤日誌為 DBA 提供有關伺服器功能的錯誤。您展示的過程是針對開發人員的,它可以擷取的錯誤不會影響伺服器壽命,他們只考慮您的程式碼執行,並且沒有“預設”日誌機制來擷取和記錄程式錯誤

引用自:https://dba.stackexchange.com/questions/230447