Dicas avançadas de solução de problemas para distribuição de conteúdo
Este artigo fornece algumas dicas avançadas de solução de problemas para ajudá-lo a identificar e resolver problemas de distribuição de conteúdo.
Versão original do produto: Configuration Manager branch atual, Microsoft System Center 2012 Configuration Manager, Microsoft System Center 2012 R2 Configuration Manager
Habilitar o log verboso
PkgXferMgr.log
Para o Gerenciador de Transferência de Pacotes, o log verboso fornece mais informações no log sobre o processo de cópia de conteúdo, hashes de arquivo e agendamento de trabalho. O log verboso pode ser habilitado definindo o seguinte valor do registro como 0:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SMS_PACKAGE_TRANSFER_MANAGER\LoggingLevel
Para o Gerenciador de Transferência de Pacotes, o registro em log de depuração fornece mais informações sobre o processo de cópia de conteúdo. O registro em log de depuração pode ser habilitado definindo o seguinte valor do registro como 1:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SMS_PACKAGE_TRANSFER_MANAGER\DebugLogging
Observação
Essas alterações de registro não exigem uma reinicialização do
SMS_Executive
serviço.Logs de cliente (inclui logs de ponto de gerenciamento e DP de pull)
O log verboso pode ser habilitado definindo o seguinte valor do registro como 0:
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogLevel
O registro em log de depuração pode ser habilitado definindo o seguinte valor do registro como REG_SZ com o valor True:
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\DebugLogging\Enabled
O tamanho do log do CCM pode ser aumentado para 5M definindo o valor do registro a seguir como 5242880 (decimais)
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogMaxSize
Além disso, você pode editar o valor DWORD para o seguinte valor de registro para aumentar o número de arquivos de log de histórico a serem mantidos:
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogMaxHistory
Observação
Essas alterações de registro exigem uma reinicialização do
SMS Agent Host
serviço.StateSys.log
O log verboso para StateSys.log pode ser habilitado definindo o seguinte valor do registro como 1:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\COMPONENTS\SMS_STATE_SYSTEM\Verbose logging
Observação
Essa alteração de chave do registro não requer uma reinicialização do
SMS_Executive
serviço.(Global – somente servidor de site) Consultas SQL
Para obter informações sobre consultas SQL executadas por
ConfigMgr
componentes, o rastreamento de SQL pode ser habilitado definindo o seguinte valor de registro como 1:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SqlEnabled
Esse valor de registro adiciona log de rastreamento SQL para todos os logs do servidor do site. Isso só deve ser feito temporariamente durante a solução de problemas e deve ser desabilitado depois de obter os logs relevantes.
Observação
Essa alteração de registro não requer uma reinicialização do
SMS_Executive
serviço.(Global – somente servidor de site) Habilitar o arquivamento de log
Há ocasiões em que o problema não se reproduz sob demanda e, enquanto aguarda a reprodução do problema, há o risco de os logs rolarem. Nessas situações, habilitar o arquivamento de logs pode ser útil, pois permite que você tenha mais logs históricos. Isso só é relevante para logs de servidores de site.
O arquivamento de logs pode ser habilitado definindo os seguintes valores de registro:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\ArchiveEnabled
= 1HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\ArchivePath
= <ArchiveLocation>Depois de habilitar o arquivamento de logs, ConfigMgr arquivará os logs distribuídos no <ArchiveLocation> e manterá 10 cópias de cada log.
Para aumentar o número de cópias mantidas para um componente específico quando o arquivamento de log estiver habilitado, defina o seguinte valor de registro como 20:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\COMPONENT_NAME\LogMaxHistory
Observação
Essas alterações de registro exigem uma reinicialização do
SMS_Executive
serviço.(Por log – somente servidor de site) Aumentar o tamanho do arquivo de log
Para aumentar o tamanho do arquivo de log para um log individual para 50 MB, defina o valor do registro específico do componente como 52428800 (decimal):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\COMPONENT_NAME\MaxFileSize
Observação
Essa alteração de registro requer uma reinicialização do
SMS_Executive
serviço.
Reenviar a cópia compactada de um pacote para um site
Quando um pacote é distribuído pela primeira vez a um site, o DistMgr envia uma cópia compactada do pacote para o site. Depois que o pacote é extraído na biblioteca de conteúdo no site, a cópia local do conteúdo é usada para enviar o pacote para DPs desde que a mesma versão do pacote esteja sendo distribuída para os DPs no site.
Há algumas ocasiões em que é necessário forçar um site a reenviar a cópia compactada de um pacote para um site especificado. Mais notavelmente, isso é necessário quando:
- O conteúdo está ausente da biblioteca de conteúdo (
PkgLib
,DataLib
ouFileLib
) em um servidor de site primário ou secundário. - DistMgr.log reclama consistentemente sobre o conteúdo não ter chegado do site pai (por exemplo: 'O conteúdo do pacote CS100026 ainda não chegou do site CS1, tentará novamente mais tarde').
Na maioria dos casos, a mensagem "O conteúdo do pacote CS100026 ainda não chegou do site CS1, tentará novamente mais tarde" será registrada temporariamente enquanto o conteúdo do pacote estiver em trânsito. Ao ver essa mensagem, examine os logs do Remetente/Despooler para garantir que não haja problemas com as comunicações do site. Examine Distribuir um pacote para DP entre sites para entender o fluxo de log.
Como o DistMgr sabe se o site atual tem uma cópia do pacote instalado
O DistMgr verifica se há uma linha Tipo 1 no PkgStatus
pacote para a versão do pacote em questão. Se houver uma linha Tipo 1 para o site com Status = Instalado, a cópia local do conteúdo do pacote será usada para enviar aos DPs. Se não houver nenhuma linha tipo 1 no PkgStatus
, significa que o conteúdo do pacote ainda não está instalado no servidor do site.
Redistribuir pacote para DP colocado no servidor do site faz com que a cópia compactada do pacote fique ressentida
Não. A redistribuição do pacote depende do site já ter o conteúdo do pacote no diretório de origem do pacote. Se o pacote foi enviado para o site em algum momento e marcado como Instalado, uma ação de redistribuição no DP colocado no servidor do site não fará nada, pois o DistMgr acha que o conteúdo já está instalado e a seguinte linha será registrada em DistMgr.log:
O ponto de distribuição está no siteerver e o pacote é um pacote de tipo de conteúdo. Não há nada a ser copiado.
E se o conteúdo estiver ausente na biblioteca de conteúdo no site de origem do pacote
Se o conteúdo estiver ausente na biblioteca de conteúdo no site de origem do pacote, a redefinição SourceVersion
do não ajudará. A única maneira de repovoar o conteúdo ausente é atualizar o pacote. A atualização do pacote faz com que o site de origem do pacote tire um pacote instantâneo do local de origem do pacote e escreva o conteúdo na biblioteca de conteúdo.
Como fazer forçar o site de origem do pacote a reenviar a cópia compactada do pacote para um site específico
Depois de confirmar que o site de origem do pacote tem o conteúdo necessário, é possível forçar o site de origem do pacote a reenviar o arquivo PCK do pacote para um site específico definindo SourceVersion
como 0 para a linha Tipo 1 no PkgStatus
site afetado. Essa linha pode ser identificada executando a seguinte consulta SQL no banco de dados do site de origem do pacote depois de substituir o PACKAGEID e o SITECODE do pacote e do site desejados:
SELECT * FROM PkgStatus WHERE Type = 1 AND ID = 'PACKAGEID' AND SiteCode = 'SITECODE'
Depois de confirmar que essa consulta retorna uma linha exclusiva e correta, a execução da consulta abaixo será redefinida SourceVersion
para esta linha para 0:
UPDATE PkgStatus SET SourceVersion = 0 WHERE Type = 1 AND ID = 'PACKAGEID' AND SiteCode = 'SITECODE'
Depois de redefinir o SourceVersion
para 0 para a linha Tipo 1, redistribuir o pacote para qualquer DP no site afetado forçará o site de origem do pacote a reenviar a cópia compactada do pacote para o site afetado.
Observação
É muito importante executar a consulta acima no site que possui o pacote, ou seja, o site de origem do pacote.
Tabelas relevantes para distribuição de conteúdo
SMSPackages
- Contém uma lista de todos os pacotesColunas interessantes:
Coluna Values Ação 0 - NENHUM
1 – ATUALIZAÇÃO
2 – ADD
3 – EXCLUIR
4 – VALIDAR
5 – CANCELARPackageType 0 – Pacote Regular
3 – Pacote driver
4 – Sequência de tarefas
5 – Pacote de Atualizações de software
6 – Pacote configurações do dispositivo
7 – Pacote de Aplicativo Virtual
8 – Pacote de conteúdo (aplicativo)
257 – Imagem do sistema operacional
258 – Imagem de inicialização
259 – Pacote de instalação do sistema operacional
260 – Pacote VHDPkgServers
- Contém uma lista de todos os pacotes, juntamente com os DPs aos quais eles estão atualmente direcionados.Colunas interessantes:
Coluna Values Ação 0 - NENHUM
1 – ATUALIZAÇÃO
2 – ADD
3 – EXCLUIR
4 – VALIDAR
5 – CANCELARPkgStatus
- Contém uma lista do pacote atual status para cada pacote para cada DP.Colunas interessantes:
Coluna Values Tipo 1 – SITE (MESTRE)
2 – DP (COPY)
As linhas tipo 1 são criadas para cada site ao qual o pacote é direcionado. PkgServer para essa linha é o FQDN do servidor de site.
As linhas tipo 2 são criadas para cada DP a que o pacote é direcionado. PkgServer é o DP NALPATH.Status 0 - NENHUM
1 - ENVIADO
2 – RECEBIDO
3 – INSTALADO
4 – RETRY
5 – FALHA
6 – REMOVIDO
7 – REMOÇÃO PENDENTE (não usada)
8 – REMOVER FALHA
9 – REMOVER NOVAMENTEDistributionJobs
- Contém uma lista de trabalhos do Gerenciador de Transferência de Pacotes junto com seu estado atual.Colunas interessantes:
Coluna Values Ação 0 - NENHUM
1 – ATUALIZAÇÃO
2 – ADD
3 – EXCLUIR
4 – VALIDAR
5 – CANCELAREstado 0 – PENDENTE
1 – PRONTO
2 – INICIADO
3 – INPROGRESS
4 – REINICIALIZAÇÃO PENDENTE
5 – COMPLETO
6 – FALHA
7 – CANCELADO
8 – SUSPENSODistributionPoints
- Contém uma lista de todos os pontos de distribuição.Colunas interessantes:
Coluna Values Ação 0 - NENHUM
1 – ATUALIZAÇÃO
2 – ADD
3 – EXCLUIR
4 – VALIDAR
5 – CANCELARPullDPResponse
- Contém temporariamente o pacote status resposta enviada dos DPs pull. O DistMgr processa a resposta e atualizaPkgStatus
.Colunas interessantes:
Coluna Values ActionState 1 – ÊXITO
2 – AVISO
4 – ERRO
8 – BAIXAR INICIADO
16 – BAIXAR EM ANDAMENTO
32 – BAIXADO
64 – CANCELADO
128 – CANCELAMENTO SOLICITADOPkgNotification
- Tabela de notificação monitorada por SMSDBMON para disparar o DistMgr para processar um pacote. A coluna Type define o tipo de notificação de pacote. As linhas nesta tabela são removidas após o SMSDBMON disparar o DistMgr.Colunas interessantes:
Coluna Values Tipo 0 – DESCONHECIDO
1 – PACOTE
2 – PROGRAMA
4 – SERVIDOR DE PACOTE (DP)
8 – CONTA DE ACESSO A PACOTES
15 – TUDOPuxar mensagens de estado DP – Lista de IDs de mensagem de estado levantadas por pull DP
Colunas interessantes:
Coluna Values ID do Estado 1 – ÊXITO
2 – AVISO
4 – FALHA
8 – BAIXAR INICIADO
16 – BAIXAR EM ANDAMENTO
32 – BAIXADO
64 – CANCELADORelatório de mensagem de estado de exemplo:
<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>
Consultas SQL úteis
Aqui estão algumas consultas SQL que podem ser úteis ao solucionar vários problemas relacionados à distribuição de conteúdo.
Consultas de status de pacote/DP
Todos os pacotes/DPs com falha
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
Todos os pacotes/DPs em andamento
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
Todos os pacotes/DPs de sucesso
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
Todos os pacotes/DPs no estado em andamento por mais de três dias
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
Todos os pacotes/DPs no estado com falha por mais de três dias
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
Contagem de todos os estados
SELECT MessageState, COUNT(MessageState) AS [Count] FROM vSMS_DPStatusDetails WHERE PackageID <> '' GROUP BY MessageState
Contagens de estados de pacote por 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
Estado de todos os DPs para um determinado pacote
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
Contagem de estados DP por pacote
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
Estado atual do pacote/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>'
Encontrar referências de DP órfãs
A consulta abaixo pode ser usada para identificar se há linhas órfãs no banco de dados para um DP que não está mais no ambiente. Poderia haver linhas órfãs se o DP não fosse removido corretamente.
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
Consulta semelhante para um DP específico em um site específico:
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
Propriedades do SCF (Arquivo de Controle de Site)
Propriedades SCF para DistMgr para o site atual
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'
Propriedades SCF para um 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'
Pacotes que contêm a atualização de software especificada
Liste todos os pacotes que contêm a ID exclusiva de atualização fornecida.
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>'
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários