Дополнительные советы по устранению неполадок при распространении содержимого

В этой статье содержатся некоторые расширенные советы по устранению неполадок, которые помогут выявить и устранить проблемы с распространением содержимого.

Исходная версия продукта: 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

    Примечание.

    Эти изменения реестра не требуют перезапуска 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

    Размер журнала CCM можно увеличить до 5 МЛН, задав для следующего параметра реестра значение 5242880 (десятичное)

    HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogMaxSize

    Кроме того, можно изменить значение DWORD для следующего значения реестра, чтобы увеличить количество сохраняемых файлов журнала:

    HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogMaxHistory

    Примечание.

    Эти изменения реестра требуют перезапуска SMS Agent Host службы.

  • StateSys.log

    Подробное ведение журнала для StateSys.log можно включить, задав для следующего параметра реестра значение 1:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\COMPONENTS\SMS_STATE_SYSTEM\Verbose logging

    Примечание.

    Это изменение раздела реестра не требует перезапуска SMS_Executive службы.

  • (Глобальный — только сервер сайта) SQL-запросы

    Чтобы получить сведения о SQL-запросах, выполняемых ConfigMgr компонентами, можно включить трассировку SQL, задав для следующего значения реестра значение 1:

    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 МБ, задайте для параметра реестра для конкретного компонента значение 52428800 (десятичное число):

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

    Примечание.

    Это изменение реестра требует перезапуска SMS_Executive службы.

Повторная отправка сжатой копии пакета на сайт

При первом распространении пакета на сайт DistMgr отправляет на сайт сжатую копию пакета. После извлечения пакета в библиотеке содержимого на сайте локальная копия содержимого используется для отправки пакета в DPs при условии, что одна и та же версия пакета распространяется на DPs на сайте.

Существует несколько случаев, когда необходимо принудительно отправить сайту повторную отправку сжатой копии пакета на указанный сайт. В первую очередь это необходимо, когда:

  1. Содержимое отсутствует в библиотеке содержимого (PkgLib, DataLibили FileLib) на сервере первичного или вторичного сайта.
  2. DistMgr.log постоянно жалуется на то, что содержимое не поступило с родительского сайта (например: "Содержимое пакета CS100026 еще не прибыло с сайта CS1, повторите попытку позже".

В большинстве случаев сообщение "Содержимое пакета CS100026 еще не прибыло с сайта CS1, будет повторяться позже" временно регистрируется во время передачи содержимого пакета. Когда вы увидите это сообщение, просмотрите журналы Sender/Despooler, чтобы убедиться в отсутствии проблем с взаимодействием с сайтом. Ознакомьтесь с разделом Распространение пакета в DP между сайтами , чтобы понять поток журнала.

Как DistMgr узнает, установлена ли на текущем сайте копия пакета

DistMgr проверяет, есть ли строка типа 1 для PkgStatus пакета для соответствующей версии пакета. Если для сайта имеется строка типа 1 с состоянием = "Установлено", локальная копия содержимого пакета используется для отправки в DPs. Если в отсутствует строка типа 1 в PkgStatus, это означает, что содержимое пакета еще не установлено на сервере сайта.

Перераспределяет ли пакет в dp, совместно размещенный на сервере сайта, приводит к тому, что сжатая копия пакета получает повторное изменение

Нет. При распространении пакета используется сайт, который уже имеет содержимое пакета в исходном каталоге пакета. Если пакет был отправлен на сайт в какой-то момент и помечен как Установленный, то действие повторного распространения на сервере сайта не выполняет никаких действий, так как DistMgr считает, что содержимое уже установлено, и следующая строка будет зарегистрирована в DistMgr.log:

Точка распространения находится на сервере сайта, а пакет является пакетом типа контента. Копировать нечего.

Что делать, если содержимое отсутствует в библиотеке содержимого на исходном сайте пакета

Если содержимое отсутствует в библиотеке содержимого на исходном сайте пакета, сброс SourceVersion не поможет. Единственный способ повторно заполнить отсутствующий контент — обновить пакет. Обновление пакета приводит к тому, что исходный сайт пакета принимает пакет snapshot из исходного расположения пакета и записывает содержимое в библиотеку содержимого.

Разделы справки принудительное повторное отправку сжатой копии пакета на определенный сайт

Убедившись, что исходный сайт пакета содержит требуемое содержимое, можно принудительно отправить файл PCK пакета повторно на определенный сайт, задав SourceVersion значение 0 для строки типа 1 для PkgStatus затронутого сайта. Эту строку можно определить, выполнив следующий SQL-запрос к базе данных исходного сайта пакета после замены PACKAGEID и SITECODE нужного пакета и сайта:

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'

После сброса SourceVersion до 0 для строки типа 1 при повторном распространении пакета на любой DP на затронутом сайте исходный сайт пакета повторно отправить сжатую копию пакета на затронутый сайт.

Примечание.

Очень важно выполнить приведенный выше запрос на сайте, которому принадлежит пакет, т. е. на исходном сайте пакета.

Релевантные таблицы для распространения содержимого

  • SMSPackages — содержит список всех пакетов.

    Интересные столбцы:

    Столбец Values
    Действие 0 — НЕТ
    1 — ОБНОВЛЕНИЕ
    2 . ДОБАВИТЬ
    3. DELETE
    4. ПРОВЕРКА
    5 — ОТМЕНА
    PackageType 0 — обычный пакет
    3. Пакет драйверов
    4. Последовательность задач
    5. Пакет Обновления программного обеспечения
    6. Пакет параметров устройства
    7. Пакет виртуального приложения
    8 . Пакет содержимого (приложение)
    257 — образ операционной системы
    258 — загрузочный образ
    259 — пакет установки ОС
    260 — пакет VHD
  • PkgServers — содержит список всех пакетов вместе с конечными клиентами, на которые они нацелены в данный момент.

    Интересные столбцы:

    Столбец Values
    Действие 0 — НЕТ
    1 — ОБНОВЛЕНИЕ
    2 . ДОБАВИТЬ
    3. DELETE
    4. ПРОВЕРКА
    5 — ОТМЕНА
  • PkgStatus — Содержит список текущего состояния пакета для каждого пакета для каждого dp.

    Интересные столбцы:

    Столбец Values
    Тип 1 — SITE (MASTER)
    2 — DP (COPY)

    Строки типа 1 создаются для каждого сайта, на который предназначен пакет. PkgServer для этой строки — полное доменное имя сервера сайта.

    Строки типа 2 создаются для каждого dp, на который предназначен пакет. PkgServer — это DP NALPATH.
    Состояние 0 — НЕТ
    1 — ОТПРАВЛЕНО
    2 — ПОЛУЧЕНО
    3 — УСТАНОВЛЕНО
    4. ПОВТОРНАЯ ПОПЫТКА
    5 — СБОЙ
    6 — УДАЛЕНО
    7 — ОЖИДАНИЕ УДАЛЕНИЯ (не используется)
    8. СБОЙ УДАЛЕНИЯ
    9. ПОВТОРНАЯ ПОПЫТКА УДАЛЕНИЯ
  • DistributionJobs — содержит список заданий диспетчера передачи пакетов, а также их текущее состояние.

    Интересные столбцы:

    Столбец Values
    Действие 0 — НЕТ
    1 — ОБНОВЛЕНИЕ
    2 . ДОБАВИТЬ
    3. DELETE
    4. ПРОВЕРКА
    5 — ОТМЕНА
    State 0 — ОЖИДАНИЕ
    1 — ГОТОВО
    2 — ЗАПУЩЕНО
    3 . INPROGRESS
    4 . ОЖИДАНИЕ ПЕРЕЗАПУСКА
    5 - COMPLETE
    6 — СБОЙ
    7 — ОТМЕНЕНО
    8 — ПРИОСТАНОВЛЕНО
  • DistributionPoints — содержит список всех точек распространения.

    Интересные столбцы:

    Столбец Values
    Действие 0 — НЕТ
    1 — ОБНОВЛЕНИЕ
    2 . ДОБАВИТЬ
    3. DELETE
    4. ПРОВЕРКА
    5 — ОТМЕНА
  • PullDPResponse — Временно содержит ответ о состоянии пакета, отправленный от поставщиков по запросу. DistMgr обрабатывает ответ и обновляет PkgStatus.

    Интересные столбцы:

    Столбец Values
    ActionState 1 — УСПЕШНО
    2 . ПРЕДУПРЕЖДЕНИЕ
    4 — ОШИБКА
    8 . СКАЧИВАНИЕ НАЧАЛОСЬ
    16 . СКАЧИВАНИЕ ВЫПОЛНЯЕТСЯ
    32 — СКАЧАН
    64 — ОТМЕНЕНО
    128 — ЗАПРОШЕНА ОТМЕНА
  • PkgNotification — таблица уведомлений, отслеживаемая SMSDBMON для активации DistMgr для обработки пакета. Столбец type определяет тип уведомления о пакете. Строки в этой таблице удаляются после того, как SMSDBMON активирует DistMgr.

    Интересные столбцы:

    Столбец Values
    Тип 0 — НЕИЗВЕСТНО
    1 — PACKAGE
    2 . ПРОГРАММА
    4 . PACKAGE SERVER (DP)
    8. УЧЕТНАЯ ЗАПИСЬ ДОСТУПА К ПАКЕТУ
    15 - ВСЕ
  • Сообщения о состоянии DP по запросу — список идентификаторов сообщений о состоянии, вызванных опрашиваемым DP

    Интересные столбцы:

    Столбец Values
    State 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
    
  • Все пакеты и поставщики данных в состоянии выполняется более трех дней

    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
    
  • Все пакеты и поставщики данных в состоянии "Сбой" более трех дней

    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)

  • Свойства SCF для DistMgr для текущего сайта

    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'
    
  • Свойства SCF для DP

    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>'