SQL 創建錯誤日誌表的好處
我們正在進行一個數據倉庫項目,將數據從暫存數據庫移動到 Kimball 數據倉庫。
創建自定義儲存過程錯誤日誌表的目的是什麼?
我看到很多網站都推薦這個。SQL 伺服器在 SSMS 中已經有一個錯誤日誌表(選項 a)。
那麼為什麼要創建另一個錯誤日誌表,看起來像是額外的編碼呢?(選項 b)。我什至可以使用 SELECT @ErrMsg = ’testabcd’ 這兩個選項自定義錯誤消息。有人可以解釋嗎?謝謝,
注意:SSMS 中是否有任何自動功能為 dbas 記錄錯誤?擷取這些錯誤的唯一方法是自定義表嗎?我們正在通過 sql 代理作業和 SSIS 包執行程式碼,以為我們在代理作業歷史記錄和 SSIS 項目目錄中看到了錯誤?非空插入、值類型轉換等問題。
(a) SSMS 錯誤日誌表
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 violation
,conversion
錯誤,permission
錯誤,所有這些類型的錯誤都沒有記錄,SQL Server error log
因為它們只是programming
錯誤。您沒有說您的程式碼在作業中執行並且有 ssis 包。在 SSIS 中,您可以啟用日誌記錄(預設情況下不啟用),此外,您的程式碼可以有 try..catch 塊,您希望在其中抑制錯誤並繼續執行程式碼。
SSMS 中沒有其他功能可以為 dbas 記錄錯誤。SQL Server 錯誤日誌為 DBA 提供有關伺服器功能的錯誤。您展示的過程是針對開發人員的,它可以擷取的錯誤不會影響伺服器壽命,他們只考慮您的程式碼執行,並且沒有“預設”日誌機制來擷取和記錄程式錯誤