程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server 如何存儲更長的作業步驟輸出信息

SQL Server 如何存儲更長的作業步驟輸出信息

編輯:關於SqlServer
 

有時候很難確定SQL SERVER的作業為什麼失敗,或者想更進一步確定作業運行到什麼地方才失敗。對於作業的每一個步驟,SQL SERVER會有相應的輸出信息,默認保存在作業歷史裡,最大1024個字符。假如輸出信息大於1024個字符,後邊的信息SQL SERVER將以“…”來表示,這就意味著無法看到完整的輸出信息。存儲更長的作業步驟輸出信息這時就很有必要。

         從SQL SERVER 2005 開始,可以將作業輸出信息存儲到msdb.dbo.sysjobstepslogs系統表裡,即使超過1024字符也可以完整保存,這是因為保存輸出信息的字段數據類型為nvarchar(max)。默認情況下這種加強的作業輸出信息功能並沒有被開啟,需要為每個作業步驟手動開啟,這樣才能記錄下該作業步驟的完整輸出信息。

一   實驗演示

1.1       運行只包含一個步驟的作業,該步驟運行”dbcc checkdb”命令對一個數據庫進行檢查

 
作業歷史截圖:

作業歷史的輸出信息:

 
可以看到,作業歷史裡邊的輸出信息是不完整的。
 

1.2       為該步驟配置增強的記錄功能



1.3       配置完成後再運行一次該作業。


 

1.4       再查看作業歷史記錄,可以看到作業歷史記錄中的輸出信息仍不完整。

1.5       需要通過查看msdb.dbo.sysjobsteplogs表中的“log”字段才能看到該作業步驟的完整信息

運行TSQL腳本:
select a.name,c.log,b.step_name
from msdb.dbo.sysjobs a
join msdb.dbo.sysjobsteps b
on a.job_id=b.job_id
join msdb.dbo.sysjobstepslogs c
on b.step_uid=c.step_uid
where a.name='check1db' ----作業名
 

 

1.6       將”log”字段輸出內容復制出來,就可以看到該作業步驟的完整輸出信息

作業“check1db”: 步驟 1,“checkdb”: 開始執行 2016-06-29 11:40:41
消息 8992,嚴重性 16,狀態 1,第 1 行: 請檢查目錄消息 3851,狀態 1: 在系統表 sys.syssingleobjrefs (class=60) 中發現無效的行(class=60,depid=1,depsubid=0)。 [SQLSTATE 42000]
消息 8992,嚴重性 16,狀態 1,第 1 行: 請檢查目錄消息 3851,狀態 1: 在系統表 sys.sysmultiobjrefs (class=26) 中發現無效的行(class=26,depid=1,depsubid=0,indepid=3,indepsubid=0)。 [SQLSTATE 42000]
消息 8992,嚴重性 16,狀態 1,第 1 行: 請檢查目錄消息 3851,狀態 1: 在系統表 sys.syssingleobjrefs (class=60) 中發現無效的行(class=60,depid=2,depsubid=0)。 [SQLSTATE 42000]
消息 8992,嚴重性 16,狀態 1,第 1 行: 請檢查目錄消息 3851,狀態 1: 在系統表 sys.syssingleobjrefs (class=60) 中發現無效的行(class=60,depid=3,depsubid=0)。 [SQLSTATE 42000]
消息 8992,嚴重性 16,狀態 1,第 1 行: 請檢查目錄消息 3851,狀態 1: 在系統表 sys.syssingleobjrefs (class=60) 中發現無效的行(class=60,depid=4,depsubid=0)。 [SQLSTATE 42000]
消息 8992,嚴重性 16,狀態 1,第 1 行: 請檢查目錄消息 3851,狀態 1: 在系統表 sys.syssingleobjrefs (class=60) 中發現無效的行(class=60,depid=5,depsubid=0)。 [SQLSTATE 42000]
消息 8992,嚴重性 16,狀態 1,第 1 行: 請檢查目錄消息 3851,狀態 1: 在系統表 sys.sysmultiobjrefs (class=26) 中發現無效的行(class=26,depid=257,depsubid=0,indepid=3,indepsubid=0)。 [SQLSTATE 42000]
消息 8992,嚴重性 16,狀態 1,第 1 行: 請檢查目錄消息 3851,狀態 1: 在系統表 sys.sysmultiobjrefs (class=26) 中發現無效的行(class=26,depid=258,depsubid=0,indepid=3,indepsubid=0)。 [SQLSTATE 42000]
消息 8992,嚴重性 16,狀態 1,第 1 行: 請檢查目錄消息 3851,狀態 1: 在系統表 sys.sysmultiobjrefs (class=26) 中發現無效的行(class=26,depid=259,depsubid=0,indepid=3,indepsubid=0)。 [SQLSTATE 42000]

消息 2593,嚴重性 16,狀態 1,第 1 行: 對象 'sys.queue_messages_1035150733' 的 0 頁中有 0 行。 [SQLSTATE 01000]
消息 2536,嚴重性 16,狀態 1,第 1 行: sys.queue_messages_1067150847的 DBCC 結果。 [SQLSTATE 01000]
消息 2593,嚴重性 16,狀態 1,第 1 行: 對象 'sys.queue_messages_1067150847' 的 0 頁中有 0 行。 [SQLSTATE 01000]
消息 2536,嚴重性 16,狀態 1,第 1 行: spt_monitor的 DBCC 結果。 [SQLSTATE 01000]
對象 'spt_monitor' 的 1 頁中有 1 行。 [SQLSTATE 01000]
spt_values的 DBCC 結果。 [SQLSTATE 01000]
對象 'spt_values' 的 10 頁中有 2346 行。 [SQLSTATE 01000]
MSreplication_options的 DBCC 結果。 [SQLSTATE 01000]
對象 'MSreplication_options' 的 1 頁中有 3 行。 [SQLSTATE 01000]
CHECKDB 在數據庫 'a' 中發現 1 個分配錯誤和 10 個一致性錯誤。 [SQLSTATE 01000]
DBCC 執行完畢。如果 DBCC 輸出了錯誤信息,請與系統管理員聯系。 [SQLSTATE 01000]
 

二   總結

在SQL SERVER 2005後,可以通過為作業的某個步驟開啟增強的日志記錄功能,然後通過TSQL腳本查詢msdb.dbo.sysjobsteplogs中的”log”字段,查看該作業步驟的完整輸出信息。  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved