Дополнительные советы по устранению неполадок при распространении содержимого
В этой статье содержатся некоторые расширенные советы по устранению неполадок, которые помогут выявить и устранить проблемы с распространением содержимого.
Исходная версия продукта: 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
= 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 МБ, задайте для параметра реестра для конкретного компонента значение 52428800 (десятичное число):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\COMPONENT_NAME\MaxFileSize
Примечание.
Это изменение реестра требует перезапуска
SMS_Executive
службы.
Повторная отправка сжатой копии пакета на сайт
При первом распространении пакета на сайт DistMgr отправляет на сайт сжатую копию пакета. После извлечения пакета в библиотеке содержимого на сайте локальная копия содержимого используется для отправки пакета в DPs при условии, что одна и та же версия пакета распространяется на DPs на сайте.
Существует несколько случаев, когда необходимо принудительно отправить сайту повторную отправку сжатой копии пакета на указанный сайт. В первую очередь это необходимо, когда:
- Содержимое отсутствует в библиотеке содержимого (
PkgLib
,DataLib
илиFileLib
) на сервере первичного или вторичного сайта. - 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 — пакет VHDPkgServers
— содержит список всех пакетов вместе с конечными клиентами, на которые они нацелены в данный момент.Интересные столбцы:
Столбец 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>'