コンテンツ配布に関する高度なトラブルシューティングのヒント
この記事では、コンテンツ配布の問題を特定して解決するのに役立つ高度なトラブルシューティングのヒントをいくつか紹介します。
元の製品バージョン: Configuration Manager Current Branch、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
Note
これらのレジストリの変更では、
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
次のレジストリ値を 5242880 (10 進数) に設定することで、CCM ログ サイズを 5M に増やすことができます
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogMaxSize
さらに、次のレジストリ値の DWORD 値を編集して、保持する履歴ログ ファイルの数を増やすことができます。
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogMaxHistory
Note
これらのレジストリの変更には、
SMS Agent Host
サービスの再起動が必要です。StateSys.log
StateSys.logの詳細ログを有効にするには、次のレジストリ値を 1 に設定します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\COMPONENTS\SMS_STATE_SYSTEM\Verbose logging
Note
このレジストリ キーの変更では、
SMS_Executive
サービスを再起動する必要はありません。(グローバル - サイト サーバーのみ)SQL クエリ
ConfigMgr
コンポーネントによって実行される SQL クエリに関する情報を取得するには、次のレジストリ値を 1 に設定することで、SQL トレースを有効にすることができます。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SqlEnabled
このレジストリ値により、すべてのサイト サーバー ログの SQL トレース ログが追加されます。 これは、トラブルシューティング中にのみ一時的に行う必要があり、関連するログを取得した後に無効にする必要があります。
Note
このレジストリの変更では、
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
Note
これらのレジストリの変更には、
SMS_Executive
サービスの再起動が必要です。(ログごと - サイト サーバーのみ)ログ ファイルのサイズを増やす
個々のログのログ ファイル サイズを 50 MB に増やすには、コンポーネント固有のレジストリ値を 52428800 (10 進数) に設定します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\COMPONENT_NAME\MaxFileSize
Note
このレジストリの変更には、
SMS_Executive
サービスの再起動が必要です。
パッケージの圧縮コピーをサイトに再送信する
パッケージが最初にサイトに配布されると、DistMgr はパッケージの圧縮コピーをサイトに送信します。 サイトのコンテンツ ライブラリでパッケージが抽出された後、サイト内の SP に同じパッケージ バージョンが配布されている限り、コンテンツのローカル コピーを使用してパッケージを SP に送信します。
特定のサイトにパッケージの圧縮コピーを強制的に再送信する必要がある場合がいくつかあります。 特に、これは次の場合に必要です。
- プライマリ またはセカンダリ サイト サーバー自体のコンテンツ ライブラリ (
PkgLib
、DataLib
、またはFileLib
) にコンテンツがありません。 - DistMgr.log 、親サイトから到着していないコンテンツについて常に不平を言います (たとえば、"パッケージ CS100026のコンテンツがまだサイト CS1 から到着していない場合は、後で再試行されます" など)。
ほとんどの場合、"パッケージ CS100026のコンテンツはサイト CS1 からまだ到着していません。後で再試行されます' というメッセージは、パッケージ コンテンツの転送中に一時的にログに記録されます。 このメッセージが表示されたら、Sender/Despooler ログを確認して、サイト通信に問題がないことを確認します。 サイト間でパッケージを DP に分散させるログ フローを理解します。
現在のサイトにパッケージのコピーがインストールされているかどうかを DistMgr が認識する方法
DistMgr は、対象のパッケージ バージョンのパッケージの PkgStatus
に Type 1 行があるかどうかを確認します。 サイトに Status = Installed の Type 1 行がある場合は、パッケージ コンテンツのローカル コピーを使用して、SP に送信します。 PkgStatus
に Type 1 行がない場合は、パッケージコンテンツがまだサイト サーバーにインストールされていないことを意味します。
サイト サーバーに併置された DP にパッケージを再配布すると、パッケージの圧縮コピーが再送信されます
その必要はありません。 パッケージの再配布は、パッケージ ソース ディレクトリに既にパッケージ コンテンツが含まれているサイトに依存します。 ある時点でパッケージがサイトに送信され、 Installed としてマークされている場合、DistMgr はコンテンツが既にインストールされていると考え、次の行が DistMgr.logにログインするため、サイト サーバーに併置された DP の再配布アクションは何も行いません。
配布ポイントはサイト サーバー上にあり、パッケージはコンテンツ タイプ パッケージです。 コピーするものはありません。
パッケージ ソース サイトのコンテンツ ライブラリにコンテンツがない場合
パッケージ ソース サイトのコンテンツ ライブラリにコンテンツがない場合、 SourceVersion
のリセットは役に立たなくなります。 不足しているコンテンツを再入力する唯一の方法は、パッケージを更新することです。 パッケージを更新すると、パッケージ ソース サイトはパッケージ ソースの場所からパッケージ スナップショットを取得し、コンテンツ ライブラリにコンテンツを書き込みます。
操作方法パッケージ ソース サイトでパッケージの圧縮コピーを特定のサイトに強制的に再送信する
パッケージ ソース サイトに必要なコンテンツがあることを確認した後、影響を受けるサイトの PkgStatus
の Type 1 行に対して SourceVersion
を 0 に設定することで、パッケージ ソース サイトがパッケージ PCK ファイルを特定のサイトに再送信するように強制できます。 この行を識別するには、目的のパッケージとサイトの 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'
Type 1 行の SourceVersion
を 0 にリセットした後、影響を受けるサイトの DP にパッケージを再配布すると、パッケージ ソース サイトはパッケージの圧縮コピーを影響を受けるサイトに強制的に再送信されます。
Note
パッケージを所有するサイト (つまり、パッケージ ソース サイト) で上記のクエリを実行することが非常に重要です。
コンテンツ配布に関連するテーブル
SMSPackages
- すべてのパッケージの一覧が含まれています興味深い列:
列 値 アクション 0 - NONE
1 - 更新
2 - ADD
3 - DELETE
4 - 検証
5 - キャンセルPackageType 0 - 標準パッケージ
3 - ドライバー パッケージ
4 - タスク シーケンス
5 - ソフトウェア更新プログラム パッケージ
6 - デバイス設定パッケージ
7 - 仮想アプリ パッケージ
8 - コンテンツ パッケージ (アプリケーション)
257 - オペレーティング システム イメージ
258 - ブート イメージ
259 - OS インストール パッケージ
260 - VHD パッケージPkgServers
- 現在対象になっている SP と共にすべてのパッケージの一覧が含まれます。興味深い列:
列 値 アクション 0 - NONE
1 - 更新
2 - ADD
3 - DELETE
4 - 検証
5 - キャンセルPkgStatus
- 各 DP の各パッケージの現在のパッケージの状態の一覧が含まれています。興味深い列:
列 値 Type 1 - サイト (マスター)
2 - DP (コピー)
種類 1 の行は、パッケージの対象となるサイトごとに作成されます。 この行の PkgServer はサイト サーバーの FQDN です。
種類 2 の行は、パッケージの対象となる DP ごとに作成されます。 PkgServer は DP NALPATH です。状態 0 - NONE
1 - SENT
2 - 受信済み
3 - インストール済み
4 - 再試行
5 - 失敗しました
6 - 削除済み
7 - 保留中の REMOVE (使用されていません)
8 - 削除に失敗しました
9 - 削除を再試行するDistributionJobs
- パッケージ転送マネージャー ジョブとその現在の状態の一覧が含まれています。興味深い列:
列 値 アクション 0 - NONE
1 - 更新
2 - ADD
3 - DELETE
4 - 検証
5 - キャンセル状態コード 0 - 保留中
1 - 準備完了
2 - 開始
3 - INPROGRESS
4 - 再起動待ち
5 - 完了
6 - 失敗しました
7 - キャンセル済み
8 - 中断DistributionPoints
- すべての配布ポイントの一覧が含まれています。興味深い列:
列 値 アクション 0 - NONE
1 - 更新
2 - ADD
3 - DELETE
4 - 検証
5 - キャンセルPullDPResponse
- プルDPから送信されたパッケージステータス応答を一時的に格納します。 DistMgr は応答を処理し、PkgStatus
を更新します。興味深い列:
列 値 ActionState 1 - 成功
2 - 警告
4 - エラー
8 - ダウンロードの開始
16 - 進行中のダウンロード
32 - ダウンロード済み
64 - キャンセル済み
128 - キャンセルが要求されましたPkgNotification
- パッケージを処理する DistMgr をトリガーするために SMSDBMON によって監視される通知テーブル。 Type 列は、パッケージ通知の種類を定義します。 このテーブルの行は、SMSDBMON によって DistMgr がトリガーされた後に削除されます。興味深い列:
列 値 Type 0 - 不明
1 - パッケージ
2 - プログラム
4 - パッケージ サーバー (DP)
8 - パッケージ アクセス アカウント
15 - すべてプル DP 状態メッセージ - プル DP によって発生した状態メッセージ ID の一覧
興味深い列:
列 値 状態 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 状態クエリ
すべての Failed パッケージ/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
すべての In Progress packages/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
すべての Success パッケージ/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
In Progress 状態のすべてのパッケージ/DP が 3 日を超えています
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
Failed状態のすべてのパッケージ/DPが3日以上
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'
指定されたソフトウェア更新プログラムを含むパッケージ
特定の更新プログラムの一意の ID を含むすべてのパッケージを一覧表示します。
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>'