內容發佈進階疑難解答秘訣
本文提供一些進階疑難解答秘訣,可協助您識別並解決內容發佈問題。
原始產品版本: 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
藉由將下列登錄值設定為值為 True 的 REG_SZ,即可啟用偵錯記錄:
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\DebugLogging\Enabled
CCM 記錄大小可藉由將下列登錄值設定為 5242880 (十進位) 來增加至 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 查詢
若要取得元件所
ConfigMgr
執行 SQL 查詢的相關信息,您可以將下列登錄值設定為 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 (decimal):
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 會檢查套件中 PkgStatus
是否有類型 1 數據列,以取得有問題的套件版本。 如果月臺有類型 1 資料列且狀態 = 已安裝,則會使用套件內容的本機副本傳送至 DP。 如果 中 PkgStatus
沒有 Type 1 資料列,表示套件內容尚未安裝在月臺伺服器上。
將套件重新發佈至月台伺服器上共置的 DP 是否會導致封裝的壓縮複本重新傳送
否。 轉散發套件仰賴已在套件來源目錄中具有套件內容的網站。 如果套件在某個時間點傳送至月臺,並標示為 [已安裝],則月臺伺服器上共置的 DP 重新發佈動作不會執行任何動作,因為 DistMgr 認為已經安裝內容,且下列這一行會記錄DistMgr.log:
發佈點位於站台伺服器上,而套件是內容類型套件。 沒有什麼可複製的。
如果套件來源網站上的內容庫中遺漏內容,該怎麼辦
如果套件來源網站上的內容庫中遺漏內容,則重設 SourceVersion
將無濟於事。 重新填入遺漏內容的唯一方法是更新套件。 更新套件會導致套件來源月臺從套件來源位置擷取套件快照集,並將內容寫入內容庫。
如何? 強制套件來源月臺將封裝的壓縮複本重新傳送至特定月臺
確認套件來源月臺具有必要的內容之後,可以強制套件來源月臺將套件 PCK 檔案重新傳送至特定月臺,方法是針對受影響網站的 [類型 1] 數據列PkgStatus
設定SourceVersion
為 0。 在取代 所需套件和月臺的 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 - 無
1 - UPDATE
2 - ADD
3 - DELETE
4 - VALIDATE
5 - 取消PackageType 0 - 一般套件
3 - 驅動程式套件
4 - 工作順序
5 - 軟體更新套件
6 - 裝置設定套件
7 - 虛擬應用程式套件
8 - 內容套件 (應用程式)
257 - 作業系統映射
258 - 開機映射
259 - OS 安裝套件
260 - VHD 套件PkgServers
- 包含所有套件的清單,以及他們目前的目標 DP。有趣的資料列:
資料行 值 動作 0 - 無
1 - UPDATE
2 - ADD
3 - DELETE
4 - VALIDATE
5 - 取消PkgStatus
- 包含每個 DP 之每個套件的目前套件狀態清單。有趣的資料列:
資料行 值 類型 1 - 網站 (MASTER)
2 - DP (COPY)
系統會針對套件的目標每個月臺建立類型 1 數據列。 此數據列的 PkgServer 是站台伺服器 FQDN。
系統會針對套件的目標每個 DP 建立類型 2 數據列。 PkgServer 是 DP NALPATH。狀態 0 - 無
1 - SENT
2 - 已接收
3 - 已安裝
4 - 重試
5 - 失敗
6 - 已移除
7 - PENDING REMOVE (未使用)
8 - 移除失敗
9 - 重試移除DistributionJobs
- 包含套件傳輸管理員作業及其目前狀態的清單。有趣的資料列:
資料行 值 動作 0 - 無
1 - UPDATE
2 - ADD
3 - DELETE
4 - VALIDATE
5 - 取消州/省 0 - 擱置中
1 - 就緒
2 - 已啟動
3 - INPROGRESS
4 - 擱置重新啟動
5 - 完成
6 - 失敗
7 - 已取消
8 - 暫止DistributionPoints
- 包含所有發佈點的清單。有趣的資料列:
資料行 值 動作 0 - 無
1 - UPDATE
2 - ADD
3 - DELETE
4 - VALIDATE
5 - 取消PullDPResponse
- 暫時包含從提取 DP 傳送的套件狀態回應。 DistMgr 會處理回應並更新PkgStatus
。有趣的資料列:
資料行 值 ActionState 1 - 成功
2 - 警告
4 - 錯誤
8 - 已啟動下載
16 - 正在下載
32 - 已下載
64 - 已取消
128 - 要求取消PkgNotification
- 由 SMSDBMON 監視的通知數據表,以觸發 DistMgr 來處理套件。 類型數據行會定義套件通知的類型。 此數據表中的數據列會在SMSDBMON觸發 DistMgr 之後移除。有趣的資料列:
資料行 值 類型 0 - 未知
1 - 套件
2 - 程式
4 - 封裝伺服器 (DP)
8 - 套件存取帳戶
15 - ALL提取 DP 狀態訊息 - 提取 DP 所引發的狀態訊息識別碼清單
有趣的資料列:
資料行 值 狀態標識碼 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 狀態查詢
所有 失敗的 套件/DP
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
所有 進行 中的套件/DP
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
所有 成功 套件/DP
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
處於進行中狀態的所有套件/DP 超過三天
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
處於 失敗 狀態的所有套件/DP 超過三天
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
指定套件的所有 DP 狀態
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>'