Sql-Server

如何修剪儲存有關作業歷史執行資訊的日誌文件?

  • May 16, 2021

我正在查看生產環境中特定伺服器上的sql server作業代理。

我幾乎有一個腳本來檢查作業的狀態,但如果我必須解決這個特定伺服器上的作業失敗的原因,它一直在使用以下設置:

  • 登錄到表
  • 將輸出附加到表中的現有條目
  • 在歷史記錄中包含步驟輸出

但是沒有指定文件,所以當我點擊View以檢查是否正在進行時,我得到記憶體不足異常,因為表太大了。

在此處輸入圖像描述

我找出這個大小的方式log file(我不確定儲存在哪裡):

   use msdb 
   go
   
   declare @job_id    UNIQUEIDENTIFIER 
          ,@job_name  sysname   
   
   select @job_name= N'DBA - my job name'
   
   exec sp_help_jobsteplog @job_name=@job_name

如下圖所示,工作中的每個步驟基本上都有一個:

在此處輸入圖像描述

===================================

引發了“ System.OutOfMemoryException ”類型的異常。(Microsoft.SqlServer.Smo)


節目地點:

在 Microsoft.SqlServer.Management.Smo.Agent.JobStep.EnumLogs() 在 Microsoft.SqlServer.Management.SqlManagerUI.JobStepAdvancedLogging.ReadStepLogToFile(JobStep 步驟) 在 Microsoft.SqlServer.Management.SqlManagerUI.JobStepAdvancedLogging.viewTableLog_Click(Object sender, EventArgs e )

標題:Microsoft SQL Server 管理工作室

引發了“System.OutOfMemoryException”類型的異常。(Microsoft.SqlServer.Smo)


鈕扣:

好的

我的問題是:

我該如何修剪這個log file

我知道我可以簡單地將 long 設置為外部文本文件,但這只是我的第二個選擇。

該資訊不在文件中,它是一個名為 sysjobstepslogs 的表。記錄數據的列是 nvarchar(max)。我認為該表沒有任何 trunc 選項,因此如果您從作業步驟輸出大量數據,那麼您將不得不忍受該表中最後一次執行的數據很大。

請注意,正常 sysjobhistory 表(SSMS 中的歷史 GUI 使用的表)的上限約為 4000 個字元,並且不包括 SELECT 的結果(它只包括錯誤和 PRINT 的輸出)。

這就提出了一個問題,為什麼您的某些工作步驟會產生如此大量的輸出?你在工作中做不必要的選擇嗎?

如果您無法減少作業步驟的輸出,那麼我建議您不要使用 SSMS GUI 查看數據,因為它會轟炸該數量的輸出。這可以被認為是一個錯誤,因此如果需要,請向 MS 報告。無論如何,您可以直接從 sysjobstepslogs 表中執行 SELECT,如果 SSMS 阻塞了返回的數據量,那麼只需執行一些子字元串來限制長度。

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