內容發佈進階疑難解答秘訣
本文提供一些進階疑難解答秘訣,協助您找出並解決內容發佈問題。
原始產品版本:Configuration Manager 最新分支、Microsoft System Center 2012 Configuration Manager、Microsoft System Center 2012 R2 Configuration Manager
啟用詳細信息記錄
PkgXferMgr.log
針對套件傳輸管理員,詳細信息記錄會在記錄中提供內容複製程序、檔案哈希和作業排程的詳細資訊。 將下列登入值設定為 0,即可啟用詳細資訊記錄:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SMS_PACKAGE_TRANSFER_MANAGER\LoggingLevel
針對套件傳輸管理員,偵錯記錄會提供內容複製程式的詳細資訊。 將下列登入值設定為 1,即可啟用偵錯記錄:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SMS_PACKAGE_TRANSFER_MANAGER\DebugLogging
注意事項
這些登錄變更 () 不需要重新啟動
SMS_Executive
服務。客戶端記錄 (包含提取 DP 和管理點記錄)
將下列登入值設定為 0,即可啟用詳細資訊記錄:
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogLevel
您可以將下列登入值設定為 REG_SZ值 True,以啟用偵錯記錄:
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\DebugLogging\Enabled
將下列登錄值設定為 5242880 (十進位數,即可將 CCM 記錄大小增加到 5M)
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogMaxSize
此外,您可以編輯下列登錄值的 DWORD 值,以增加要保留的記錄檔數目:
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogMaxHistory
注意事項
這些登錄變更 () 需要重新啟動
SMS Agent Host
服務。StateSys.log
將下列登入值設定為 1,即可啟用StateSys.log的詳細資訊記錄:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\COMPONENTS\SMS_STATE_SYSTEM\Verbose logging
注意事項
此登錄機碼變更不需要重新啟動
SMS_Executive
服務。(全域 - 月台伺服器僅) SQL 查詢
若要取得元件所執行之 SQL 查詢的
ConfigMgr
相關信息,您可以將下列登錄值設定為 1 來啟用 SQL 追蹤:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SqlEnabled
此登錄值會新增所有月台伺服器記錄的 SQL 追蹤記錄。 這應該只在進行疑難解答時暫時完成,而且應該在取得相關的記錄之後停用。
注意事項
此登錄變更不需要重新啟動
SMS_Executive
服務。(全域 - 僅限月台伺服器) 啟用記錄封存
有時候,問題不會視需要重現,而在等候問題重現時,會有記錄變換的風險。 在這些情況下,啟用記錄檔封存會很有用,因為它可讓您擁有更多歷程記錄。 這僅與月台伺服器記錄相關。
您可以藉由設定下列登入值來啟用記錄封存:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\ArchiveEnabled
= 1HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\ArchivePath
= <ArchiveLocation>啟用記錄封存之後,ConfigMgr 會將已變數的記錄封存至 <ArchiveLocation>,並保留每個記錄的 10 份復本。
若要在啟用記錄封存時增加為特定元件維護的複本數目,請將下列登錄值設定為 20:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\COMPONENT_NAME\LogMaxHistory
注意事項
這些登錄變更 () 需要重新啟動
SMS_Executive
服務。(每一記錄 - 月台伺服器僅) 增加記錄檔大小
若要將個別記錄檔的記錄檔大小增加至 50 MB,請將元件特定登錄值設定為 52428800 ( 十進位) :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\COMPONENT_NAME\MaxFileSize
注意事項
此登錄變更需要重新啟動
SMS_Executive
服務。
將封裝的壓縮複本重新傳送至網站
當套件第一次散發至網站時,DistMgr 會將封裝的壓縮複本傳送至月臺。 在網站的內容庫中擷取套件之後,只要將相同的套件版本散發至網站中的 DP,就會使用內容的本地副本將套件傳送給 DP。
在某些情況下,必須強制網站將封裝的壓縮複本重新傳送至指定的網站。 最值得注意的是,在下列情況下,這是必要的:
- 主要或次要月臺伺服器本身上的內容庫 (
PkgLib
、DataLib
或FileLib
) 遺失內容。 - DistMgr.log 一直抱怨內容未從上層網站抵達 (例如:「套件CS100026的內容尚未從網站 CS1 抵達,稍後會重試 ) 。
在大部分情況下,當套件內容正在傳輸時,會暫時記錄「套件內容CS100026尚未從網站 CS1 抵達,稍後會重試」訊息。 當您看到此訊息時,請檢閱寄件者/Despooler 記錄,以確保網站通訊沒有任何問題。 檢閱 跨網站將套件散發至 DP ,以了解記錄流程。
DistMgr 如何知道目前網站是否已安裝套件複本
DistMgr 會檢查有問題的套件版本是否有套件的 Type 1 PkgStatus
數據列。 如果已安裝狀態 = 的網站有類型 1 數據列,則會使用套件內容的本地副本傳送至 DPS。 如果 中 PkgStatus
沒有 Type 1 資料列,表示封裝內容尚未安裝在月臺伺服器上。
將套件重新發佈至月台伺服器上共置的 DP 是否造成封裝的壓縮複本重新傳送
不能。 轉散發套件需仰賴已在套件來源目錄中具有套件內容的網站。 如果套件已在某個時間點傳送至月臺,並標示為已 安裝,則在月臺伺服器上共置的 DP 上重新發佈動作不會執行任何動作,因為 DistMgr 認為內容已安裝,且下列這一行將會 登入DistMgr.log:
發佈點位於 siteserver 上,而套件是內容類型套件。 沒有任何項目可複製。
如果套件來源網站上的內容庫中缺少內容,該怎麼辦
如果套件來源網站上的內容庫中缺少內容,則重設 SourceVersion
將不會有説明。 重新填入遺漏內容的唯一方法是更新套件。 更新套件會導致套件來源月臺從封裝來源位置擷取套件快照集,並將內容寫入內容庫。
如何? 強制套件來源月臺將封裝的壓縮複本重新傳送至特定月臺
確認套件來源月臺具有必要的內容之後,您可以針對受影響網站的 [類型 1PkgStatus
] 數據列,強制套件來源月臺將套件 PCK 檔案重新傳送至特定網站SourceVersion
。 取代所需套件和月臺的 PACKAGEID 和 SITECODE 之後,在封裝來源月臺的資料庫上執行下列 SQL 查詢,即可識別此數據列:
SELECT * FROM PkgStatus WHERE Type = 1 AND ID = 'PACKAGEID' AND SiteCode = 'SITECODE'
確認此查詢傳回唯一且正確的數據列之後,執行下列查詢會將此數據列重設 SourceVersion
為 0:
UPDATE PkgStatus SET SourceVersion = 0 WHERE Type = 1 AND ID = 'PACKAGEID' AND SiteCode = 'SITECODE'
將類型 1 資料列的 重設 SourceVersion
為 0 之後,將套件重新發佈至受影響站台中的任何 DP,將會強制套件來源月臺將封裝的壓縮複本重新傳送至受影響的網站。
注意事項
請務必在擁有套件的站臺上執行上述查詢,也就是套件來源月臺。
內容散發的相關數據表
SMSPackages
- 包含所有套件的清單有趣的資料列:
欄 值 動作 0 - NONE
1 - UPDATE
2 - ADD
3 - DELETE
4 - 驗證
5 - CANCELPackageType 0 - 一般套件
3 - 驅動程式套件
4 - 工作順序
5 - 軟體 匯報 套件
6 - 裝置設定套件
7 - 虛擬應用程式套件
8 - 應用程式 (內容套件)
257 - 作業系統映射
258 - 開機映射
259 - OS 安裝套件
260 - VHD 套件PkgServers
- 包含所有套件的清單,以及它們目前的目標 DP。有趣的資料列:
欄 值 動作 0 - NONE
1 - UPDATE
2 - ADD
3 - DELETE
4 - 驗證
5 - CANCELPkgStatus
- 包含每個 DP 之每個套件的目前套件狀態清單。有趣的資料列:
欄 值 類型 1 - SITE (MASTER)
2 - DP (COPY)
系統會針對封裝的目標每個月臺建立 1 個數據列類型。 此數據列的 PkgServer 是站台伺服器 FQDN。
系統會針對封裝的目標每個 DP 建立類型 2 數據列。 PkgServer 是 DP NALPATH。狀態 0 - NONE
1 - SENT
2 - 已接收
3 - 已安裝
4 - 重試
5 - 失敗
6 - 已移除
7 - 擱置移除 (未使用)
8 - 移除失敗
9 - RETRY REMOVEDistributionJobs
- 包含套件傳輸管理員作業及其目前狀態的清單。有趣的資料列:
欄 值 動作 0 - NONE
1 - UPDATE
2 - ADD
3 - DELETE
4 - 驗證
5 - CANCEL狀態 0 - 擱置中
1 - 就緒
2 - 已啟動
3 - 輸入
4 - 擱置重新啟動
5 - 完成
6 - 失敗
7 - 已取消
8 - 已暫停DistributionPoints
- 包含所有發佈點的清單。有趣的資料列:
欄 值 動作 0 - NONE
1 - UPDATE
2 - ADD
3 - DELETE
4 - 驗證
5 - CANCELPullDPResponse
- 暫時包含從提取IP傳送的套件狀態回應。 DistMgr 會處理回應並更新PkgStatus
。有趣的資料列:
欄 值 ActionState 1 - 成功
2 - 警告
4 - 錯誤
8 - 下載開始
16 - 下載進行中
32 - 已下載
64 - 已取消
128 - 要求取消PkgNotification
- SMSDBMON 監視的通知數據表,以觸發 DistMgr 來處理套件。 類型數據行會定義封裝通知的類型。 在SMSDBMON觸發 DistMgr 之後,會移除此資料表中的數據列。有趣的資料列:
欄 值 類型 0 - UNKNOWN
1 - PACKAGE
2 - PROGRAM
4 - 套件伺服器 (DP)
8 - 套件存取帳戶
15 - 全部提取 DP 狀態訊息 - 提取 DP 所引發的狀態訊息識別碼清單
有趣的資料列:
欄 值 縣/市 ID 1 - 成功
2 - 警告
4 - 失敗
8 - 下載開始
16 - 下載進行中
32 - 已下載
64 - 已取消範例狀態消息報表:
<Report> <ReportHeader> <Identification> <Machine> <ClientInstalled>0</ClientInstalled> <ClientType>1</ClientType> <Unknown>0</Unknown> <ClientID IDType="0" IDFlag="1">925b0ab0-247b-466b-be0f-93d7cb032c87</ClientID> <ClientVersion>5.00.0000.0000</ClientVersion> <NetBIOSName>P01PDP1.CONTOSO.COM</NetBIOSName> <CodePage>437</CodePage> <SystemDefaultLCID>1033</SystemDefaultLCID> </Machine> </Identification> <ReportDetails> <ReportContent>StateMessage</ReportContent> <ReportType>Full</ReportType> <Date>20190107200618.000000+000</Date> <Version>1.0</Version> <Format>1.1</Format> </ReportDetails> </ReportHeader> <ReportBody> <StateMessage MessageTime="20190107200618.000000+000" SerialNumber="3"> <Topic ID="P010000F" Type="902" IDType="0"/> <State ID="1" Criticality="0"/> <UserParameters Flags="0" Count="4"> <Param>P010000F</Param> <Param>["Display=\\P01PDP1.CONTOSO.COM\"]MSWNET:["SMS_SITE=P01"]\\P01PDP1.CONTOSO.COM\</Param> <Param>{04AD1BB3-5E54-457A-9873-DFB2E8035090}</Param> <Param/> </UserParameters> </StateMessage> </ReportBody> </Report>
有用的 SQL 查詢
以下是針對各種內容發佈相關問題進行疑難解答時可能很有説明的一些 SQL 查詢。
套件/DP 狀態查詢
所有 失敗的 套件/DPS
SELECT distinct DPSD.DPName, DPSD.PackageID, SP.Name, DPSD.MessageState, DPSD.LastStatusTime, DPSD.SiteCode FROM vSMS_DPStatusDetails DPSD JOIN SMSPackages_All SP ON DPSD.PackageID = SP.PkgID WHERE MessageState = 4
所有 進行中的 套件/DPS
SELECT distinct DPSD.DPName, DPSD.PackageID, SP.Name, DPSD.MessageState, DPSD.LastStatusTime, DPSD.SiteCode FROM vSMS_DPStatusDetails DPSD JOIN SMSPackages_All SP ON DPSD.PackageID = SP.PkgID WHERE MessageState = 2
所有 成功 套件/DPS
SELECT distinct DPSD.DPName, DPSD.PackageID, SP.Name, DPSD.MessageState, DPSD.LastStatusTime, DPSD.SiteCode FROM vSMS_DPStatusDetails DPSD JOIN SMSPackages_All SP ON DPSD.PackageID = SP.PkgID WHERE MessageState = 1
所有處於 進行中 狀態超過三天的套件/DPS
SELECT distinct DPSD.DPName, DPSD.PackageID, SP.Name, DPSD.MessageState, DPSD.LastStatusTime, DPSD.SiteCode FROM vSMS_DPStatusDetails DPSD JOIN SMSPackages_All SP ON DPSD.PackageID = SP.PkgID WHERE DPSD.LastStatusTime < DATEAdd(dd,-3,GETDate()) AND MessageState = 2
所有封裝/DPS 都處於 失敗 狀態超過三天
SELECT distinct DPSD.DPName, DPSD.PackageID, SP.Name, DPSD.MessageState, DPSD.LastStatusTime, DPSD.SiteCode FROM vSMS_DPStatusDetails DPSD JOIN SMSPackages_All SP ON DPSD.PackageID = SP.PkgID WHERE DPSD.LastStatusTime < DATEAdd(dd,-3,GETDate()) AND MessageState = 4
所有狀態的計數
SELECT MessageState, COUNT(MessageState) AS [Count] FROM vSMS_DPStatusDetails WHERE PackageID <> '' GROUP BY MessageState
每個 DP 的套件狀態計數
SELECT DPName, CASE WHEN MessageState = 1 THEN 'Success' WHEN MessageState = 2 THEN 'InProgress' WHEN MessageState = 4 THEN 'Failed' END AS [State], COUNT(MessageState) AS [Count] FROM vSMS_DPStatusDetails WHERE PackageID <> '' AND DPName = 'PS1DP1.CONTOSO.COM' GROUP BY DPName, MessageState ORDER BY DPName
指定套件的所有 DPS 狀態
SELECT DPName, CASE WHEN MessageState = 1 THEN 'Success' WHEN MessageState = 2 THEN 'InProgress' WHEN MessageState = 4 THEN 'Failed' END AS [State] FROM vSMS_DPStatusDetails WHERE PackageID = '<PackageID>' GROUP BY DPName, MessageState ORDER BY State
每個套件的 DP 狀態計數
SELECT CASE WHEN MessageState = 1 THEN 'Success' WHEN MessageState = 2 THEN 'InProgress' WHEN MessageState = 4 THEN 'Failed' END AS [State], COUNT(MessageState) AS [Count] FROM vSMS_DPStatusDetails WHERE PackageID = '<PackageID>' GROUP BY MessageState
套件/DP 目前狀態
SELECT distinct DPSD.DPName, DPSD.PackageID, SP.Name, DPSD.LastStatusTime, DPSD.SiteCode, DPSD.MessageState, CASE WHEN MessageState = 1 THEN 'Success' WHEN MessageState = 2 THEN 'InProgress' WHEN MessageState = 4 THEN 'Failed' END AS [State] FROM vSMS_DPStatusDetails DPSD JOIN SMSPackages_All SP ON DPSD.PackageID = SP.PkgID WHERE DPName = 'PS1DP1.CONTOSO.COM' AND DPSD.PackageID = '<PackageID>'
尋找孤立的 DP 參考
下列查詢可用來識別資料庫中是否有任何遺失的數據列,用於不再存在於環境中的 DP。 如果未正確移除 DP,可能會有孤立的數據列。
DECLARE @DPName NVARCHAR(100)
SET @DPName = 'PS1DP.CONTOSO.COM'
SELECT * FROM ContentDPMap WHERE ServerName = @DPName
SELECT * FROM DistributionPoints WHERE ServerName = @DPName
SELECT * FROM DPInfo WHERE ServerName = @DPName
SELECT * FROM PkgServers_G WHERE NALPath like '%' + @DPName + '%'
SELECT * FROM PkgServers_L WHERE NALPath like '%' + @DPName + '%'
SELECT * FROM PkgStatus_G WHERE PkgServer like '%' + @DPName + '%'
SELECT * FROM PkgStatus_L WHERE PkgServer like '%' + @DPName + '%'
SELECT * FROM SysResList WHERE RoleName = 'SMS Distribution Point' AND ServerName = @DPName
SELECT * FROM SC_SysResUse WHERE NALPath like '%' + @DPName + '%' AND RoleTypeID = 3
特定網站中特定 DP 的類似查詢:
DECLARE @DPName NVARCHAR(100)
DECLARE @DPSiteCode NVARCHAR(3)
SET @DPName = 'DPNAME.CONTOSO.COM'
SET @DPSiteCode = 'PS1'
SELECT * FROM ContentDPMap WHERE ServerName = @DPName AND SiteCode = @DPSiteCode
SELECT * FROM DistributionPoints WHERE ServerName = @DPName AND SMSSiteCode = @DPSiteCode
SELECT * FROM DPInfo WHERE ServerName = @DPName AND SiteCode = @DPSiteCode
SELECT * FROM PkgServers_L WHERE NALPath like '%' + @DPName + '%' AND SiteCode = @DPSiteCode
SELECT * FROM PkgServers_G WHERE NALPath like '%' + @DPName + '%' AND SiteCode = @DPSiteCode
SELECT * FROM PkgStatus_L WHERE PkgServer like '%' + @DPName + '%' AND SiteCode = @DPSiteCode
SELECT * FROM PkgStatus_G WHERE PkgServer like '%' + @DPName + '%' AND SiteCode = @DPSiteCode
SELECT * FROM SysResList WHERE RoleName = 'SMS Distribution Point' AND ServerName = @DPName AND SiteCode = @DPSiteCode
SELECT * FROM SC_SysResUse WHERE NALPath like '%' + @DPName + '%SMS_SITE=' + @DPSiteCode + '%' AND RoleTypeID = 3
月臺控制檔案 (SCF) 屬性
目前網站的 DistMgr SCF 屬性
SELECT SD.SiteCode, SC.ComponentName, SCP.Name, SCP.Value1, SCP.Value2, SCP.Value3 FROM SC_Component SC JOIN SC_SiteDefinition SD ON SD.SiteNumber = SC.SiteNumber JOIN SC_Component_Property SCP ON SCP.ComponentID = SC.ID WHERE SD.SiteCode = dbo.fnGetSiteCode() AND SC.ComponentName = 'SMS_DISTRIBUTION_MANAGER'
DP 的 SCF 屬性
SELECT SRU.RoleName, SRU.ServerName, SRUP.* FROM vSMS_SC_SysResUse SRU JOIN vSMS_SC_SysResUse_Properties SRUP ON SRU.ID = SRUP.ID WHERE SRU.RoleName = 'SMS Distribution Point' AND SRU.ServerName = 'PS1DP1.CONTOSO.COM'
包含指定軟體更新的套件
列出包含指定更新的唯一標識碼的所有套件。
SELECT distinct UI.ArticleID, CI.CI_UniqueID, CP.PkgID, P.Name FROM v_UpdateInfo UI
JOIN v_ConfigurationItems CI ON UI.CI_ID = CI.CI_ID
JOIN v_CIContents_All CIC ON CI.CI_ID = CIC.CI_ID
JOIN CI_ContentPackages CP ON CP.Content_ID = CIC.Content_ID
JOIN v_Package P ON CP.PkgID = P.PackageID
WHERE CI.CI_UniqueID = '<UniqueID>'