次の方法で共有


コンテンツ配布に関する高度なトラブルシューティングのヒント

この記事では、コンテンツ配布の問題を特定して解決するのに役立つ高度なトラブルシューティングのヒントについて説明します。

元の製品バージョン: 現在のブランチ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

    次のレジストリ値を 5242880 (10 進数) に設定することで、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 クエリ

    コンポーネントによって ConfigMgr 実行される SQL クエリに関する情報を取得するには、次のレジストリ値を 1 に設定することで SQL トレースを有効にすることができます。

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SqlEnabled

    このレジストリ値により、すべてのサイト サーバー ログの SQL トレース ログが追加されます。 これはトラブルシューティング中にのみ一時的に行う必要があり、関連するログを取得した後に無効にする必要があります。

    注:

    このレジストリの変更では、サービスの SMS_Executive 再起動は必要ありません。

  • (グローバル - サイト サーバーのみ)ログ アーカイブを有効にする

    問題がオンデマンドで再現されず、問題が再現されるのを待っている間に、ログがロールオーバーするリスクがあります。 このような状況では、ログのアーカイブを有効にすると、履歴ログを増やすことができるので便利です。 これは、サイト サーバー のログにのみ関連します。

    ログ アーカイブは、次のレジストリ値を設定することで有効にすることができます。

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\ArchiveEnabled = 1

    HKEY_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 (10 進数) に設定します。

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\COMPONENT_NAME\MaxFileSize

    注:

    このレジストリの変更には、サービスの再起動が SMS_Executive 必要です。

パッケージの圧縮コピーをサイトに再送信する

パッケージが最初にサイトに配布されると、DistMgr はパッケージの圧縮コピーをサイトに送信します。 サイトのコンテンツ ライブラリでパッケージを抽出した後、同じパッケージ バージョンがサイト内の DP に配布されている限り、コンテンツのローカル コピーを使用してパッケージを DP に送信します。

特定のサイトにパッケージの圧縮コピーを強制的に再送信する必要がある場合がいくつかあります。 特に、これは次の場合に必要です。

  1. コンテンツは、プライマリ サイト サーバーまたはセカンダリ サイト サーバー自体のコンテンツ ライブラリ (PkgLibDataLib、または FileLib) に存在しません。
  2. DistMgr.log は、コンテンツが親サイトから到着していないことについて一貫して不平を言います (たとえば、「パッケージ CS100026のコンテンツがサイト CS1 からまだ到着していない場合は、後で再試行します」など)。

ほとんどの場合、"パッケージ CS100026の内容はまだサイト CS1 から到着していませんが、後で再試行されます" というメッセージは、パッケージ コンテンツが転送中に一時的にログに記録されます。 このメッセージが表示されたら、Sender/Despooler ログを確認して、サイト通信に問題がないことを確認します。 ログ フロー を理解するには、「サイト間で DP にパッケージを配布 する」を参照してください。

現在のサイトにパッケージのコピーがインストールされているかどうかを DistMgr で確認する方法

DistMgr は、対象のパッケージ バージョンのパッケージに PkgStatus Type 1 行があるかどうかを確認します。 状態 = がインストールされているサイトの種類 1 行がある場合は、パッケージ コンテンツのローカル コピーを使用して、DP に送信します。 に PkgStatusType 1 行がない場合は、パッケージ コンテンツがまだサイト サーバーにインストールされていないことを意味します。

サイト サーバーで併置された DP にパッケージを再配布すると、パッケージの圧縮コピーが再送信されます

いいえ。 パッケージの再配布は、パッケージ ソース ディレクトリにパッケージ コンテンツが既に含まれているサイトに依存します。 ある時点でパッケージがサイトに送信され、[ インストール済み] とマークされている場合、DistMgr がコンテンツが既にインストールされていると考え、次の行が DistMgr.logに記録されるため、サイト サーバーに併置された DP の再配布アクションは何も実行されません。

配布ポイントはサイト サーバー上にあり、パッケージはコンテンツ タイプ パッケージです。 コピーするものは何もありません。

パッケージ ソース サイトのコンテンツ ライブラリにコンテンツが存在しない場合

パッケージ ソース サイトのコンテンツ ライブラリにコンテンツがない場合は、 を SourceVersion リセットしても役に立たなくなります。 不足しているコンテンツを再入力する唯一の方法は、パッケージを更新することです。 パッケージを更新すると、パッケージ ソース サイトはパッケージ ソースの場所からパッケージ スナップショットを取得し、コンテンツ ライブラリにコンテンツを書き込みます。

パッケージ ソース サイト操作方法、パッケージの圧縮されたコピーを特定のサイトに強制的に再送信する

パッケージ ソース サイトに必要なコンテンツがあることを確認した後、影響を受けるサイトの Type 1 行に 0 を設定 SourceVersion することで、パッケージ ソース サイトでパッケージ PCK ファイルを特定の PkgStatus サイトに強制的に再送信できます。 この行は、目的のパッケージとサイトの PACKAGEIDSITECODE を置き換えた後、パッケージ ソース サイトのデータベースで次の SQL クエリを実行することで識別できます。

SELECT * FROM PkgStatus WHERE Type = 1 AND ID = 'PACKAGEID' AND SiteCode = 'SITECODE'

このクエリによって一意の正しい行が返されることを確認した後、次のクエリを実行すると、この行が 0 にリセット SourceVersion されます。

UPDATE PkgStatus SET SourceVersion = 0 WHERE Type = 1 AND ID = 'PACKAGEID' AND SiteCode = 'SITECODE'

Type 1 行の を SourceVersion0 にリセットした後、影響を受けるサイト内の任意の DP にパッケージを再配布すると、パッケージの圧縮されたコピーが影響を受けるサイトに強制的に再送信されます。

注:

パッケージを所有するサイト (つまり、パッケージ ソース サイト) で上記のクエリを実行することが非常に重要です。

コンテンツ配布に関連するテーブル

  • SMSPackages - すべてのパッケージの一覧が含まれています

    興味深い列:

    Column
    アクション 0 - NONE
    1 - 更新
    2 - ADD
    3 - DELETE
    4 - 検証
    5 - キャンセル
    PackageType 0 - 標準パッケージ
    3 - ドライバー パッケージ
    4 - タスク シーケンス
    5 - ソフトウェア 更新 パッケージ
    6 - デバイス設定パッケージ
    7 - 仮想アプリ パッケージ
    8 - コンテンツ パッケージ (アプリケーション)
    257 - オペレーティング システム イメージ
    258 - ブート イメージ
    259 - OS インストール パッケージ
    260 - VHD パッケージ
  • PkgServers - すべてのパッケージの一覧と、現在対象となっている DP が含まれます。

    興味深い列:

    Column
    アクション 0 - NONE
    1 - 更新
    2 - ADD
    3 - DELETE
    4 - 検証
    5 - キャンセル
  • PkgStatus - 各 DP の各パッケージの現在のパッケージの状態の一覧が含まれます。

    興味深い列:

    Column
    1 - サイト (マスター)
    2 - DP (COPY)

    タイプ 1 の行は、パッケージの対象となるサイトごとに作成されます。 この行の PkgServer はサイト サーバーの FQDN です。

    タイプ 2 行は、パッケージの対象となる DP ごとに作成されます。 PkgServer は DP NALPATH です。
    状態 0 - NONE
    1 - SENT
    2 - 受信済み
    3 - インストール済み
    4 - 再試行
    5 - 失敗しました
    6 - 削除済み
    7 - 保留中の削除 (使用されていません)
    8 - 削除に失敗しました
    9 - 削除を再試行する
  • DistributionJobs - パッケージ転送マネージャー ジョブの一覧と現在の状態が含まれます。

    興味深い列:

    Column
    アクション 0 - NONE
    1 - 更新
    2 - ADD
    3 - DELETE
    4 - 検証
    5 - キャンセル
    状態 0 - 保留中
    1 - 準備完了
    2 - 開始
    3 - INPROGRESS
    4 - 再起動待ち
    5 - 完了
    6 - 失敗しました
    7 - 取り消されました
    8 - 中断
  • DistributionPoints - すべての配布ポイントの一覧が含まれます。

    興味深い列:

    Column
    アクション 0 - NONE
    1 - 更新
    2 - ADD
    3 - DELETE
    4 - 検証
    5 - キャンセル
  • PullDPResponse - プル DP から送信されたパッケージ状態の応答を一時的に含みます。 DistMgr は応答と更新 PkgStatusを処理します。

    興味深い列:

    Column
    ActionState 1 - 成功
    2 - 警告
    4 - エラー
    8 - ダウンロードの開始
    16 - 進行中のダウンロード
    32 - ダウンロード済み
    64 - 取り消されました
    128 - キャンセルが要求されました
  • PkgNotification - パッケージを処理するために DistMgr をトリガーするために SMSDBMON によって監視される通知テーブル。 Type 列は、パッケージ通知の種類を定義します。 このテーブルの行は、SMSDBMON によって DistMgr がトリガーされた後に削除されます。

    興味深い列:

    Column
    0 - 不明
    1 - パッケージ
    2 - プログラム
    4 - パッケージ サーバー (DP)
    8 - パッケージ アクセス アカウント
    15 - ALL
  • プル DP 状態メッセージ - プル DP によって発生した状態メッセージ ID の一覧

    興味深い列:

    Column
    都道府県 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 状態クエリ

  • すべての失敗したパッケージ/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 が 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
    
  • 3 日を超える 失敗 状態のすべてのパッケージ/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'
    

指定されたソフトウェア更新プログラムを含むパッケージ

特定の更新プログラムの一意の 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>'