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: ramificação atual do Configuration Manager, Microsoft System Center 2012 Configuration Manager, Microsoft System Center 2012 R2 Configuration Manager
Habilitar registro em log detalhado
PkgXferMgr.log
Para o Gerenciador de Transferência de Pacotes, o log detalhado fornece mais informações no log sobre o processo de cópia de conteúdo, hashes de arquivo e agendamento de trabalho. O log detalhado 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 log de depuração fornece mais informações sobre o processo de cópia de conteúdo. O 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 no Registro não exigem uma reinicialização do
SMS_Executive
serviço.Logs de cliente (inclui DP de pull e logs de ponto de gerenciamento)
O log detalhado pode ser habilitado definindo o seguinte valor do Registro como 0:
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogLevel
O 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 seguinte valor do Registro como 5242880 (decimal)
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogMaxSize
Além disso, você pode editar o valor DWORD para o seguinte valor do Registro para aumentar o número de arquivos de log de histórico a serem retidos:
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogMaxHistory
Observação
Essas alterações no Registro exigem uma reinicialização do
SMS Agent Host
serviço.StateSys.log
O log detalhado 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 do site) Consultas SQL
Para obter informações sobre consultas SQL executadas por
ConfigMgr
componentes, o rastreamento SQL pode ser habilitado definindo o seguinte valor do Registro como 1:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SqlEnabled
Esse valor do Registro adiciona o 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 desativado após obter os logs relevantes.
Observação
Essa alteração do Registro não requer uma reinicialização do
SMS_Executive
serviço.(Global - somente servidor do site) Habilitar o arquivamento de logs
Há ocasiões em que o problema não é reproduzido sob demanda e, enquanto aguarda a reprodução do problema, há o risco de rolagem de logs. 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 do servidor do site.
O arquivamento de log pode ser habilitado definindo os seguintes valores do 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, o ConfigMgr arquivará os logs acumulados <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 do Registro como 20:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\COMPONENT_NAME\LogMaxHistory
Observação
Essas alterações no Registro exigem uma reinicialização do
SMS_Executive
serviço.(Por log - somente servidor do site) Aumentar o tamanho do arquivo de log
Para aumentar o tamanho do arquivo de log de 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 do Registro requer uma reinicialização do
SMS_Executive
serviço.
Reenviar cópia compactada de um pacote para um site
Quando um pacote é distribuído pela primeira vez para 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 que o conteúdo não chegou 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" é registrada temporariamente enquanto o conteúdo do pacote está em trânsito. Ao ver essa mensagem, revise 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 instalada
DistMgr verifica se há uma linha Tipo 1 para PkgStatus
o 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.
A redistribuição do pacote para DP colocado no servidor do site faz com que a cópia compactada do pacote seja reenviada
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 faz nada, pois o DistMgr pensa que o conteúdo já está instalado e a seguinte linha será registrada DistMgr.log:
O ponto de distribuição está no servidor do site 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, redefinir o SourceVersion
não ajudará. A única maneira de preencher novamente o conteúdo ausente é atualizar o pacote. A atualização do pacote faz com que o site de origem do pacote tire um instantâneo do pacote do local de origem do pacote e grave o conteúdo na biblioteca de conteúdo.
Como 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 para PkgStatus
o site afetado. Essa linha pode ser identificada executando a seguinte consulta SQL no banco de dados do site de origem do pacote após 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 essa linha como 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 Valores Ação 0 – NONE
1 - ATUALIZAÇÃO
2 - ADICIONAR
3 - EXCLUIR
4 - VALIDAR
5 - CANCELARPackageType 0 - Pacote Regular
3 - Pacote de Driver
4 - Sequência de Tarefas
5 - Pacote de Atualizações de Software
6 - Pacote de configurações do dispositivo
7 - Pacote de Aplicativos Virtuais
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 junto com os DPs para os quais eles estão direcionados no momento.Colunas interessantes:
Coluna Valores Ação 0 – NONE
1 - ATUALIZAÇÃO
2 - ADICIONAR
3 - EXCLUIR
4 - VALIDAR
5 - CANCELARPkgStatus
- Contém uma lista do status atual do pacote para cada pacote para cada DP.Colunas interessantes:
Coluna Valores Tipo 1 - SITE (MASTER)
2 - DP (CÓPIA)
As linhas do tipo 1 são criadas para cada site para o qual o pacote é direcionado. PkgServer para esta linha é o FQDN do servidor do site.
As linhas do tipo 2 são criadas para cada DP para o qual o pacote é direcionado. PkgServer é o DP NALPATH.Status 0 – NONE
1 - ENVIADO
2 - RECEBIDO
3 - INSTALADO
4 - TENTAR NOVAMENTE
5 - REPROVADO
6 - REMOVIDO
7 - REMOÇÃO PENDENTE (Não Utilizado)
8 - FALHA NA REMOÇÃO
9 - TENTAR REMOVER NOVAMENTEDistributionJobs
- Contém uma lista de trabalhos do Gerenciador de Transferência de Pacotes junto com seu estado atual.Colunas interessantes:
Coluna Valores Ação 0 – NONE
1 - ATUALIZAÇÃO
2 - ADICIONAR
3 - EXCLUIR
4 - VALIDAR
5 - CANCELAREstado 0 - PENDENTE
1 - PRONTO
2 - INICIADO
3 - INPROGRESS
4 - REINICIALIZAÇÃO PENDENTE
5 - COMPLETO
6 - REPROVADO
7 - CANCELADO
8 - SUSPENSODistributionPoints
- Contém uma lista de todos os pontos de distribuição.Colunas interessantes:
Coluna Valores Ação 0 – NONE
1 - ATUALIZAÇÃO
2 - ADICIONAR
3 - EXCLUIR
4 - VALIDAR
5 - CANCELARPullDPResponse
- Contém temporariamente a resposta de status do pacote enviada dos DPs de pull. DistMgr processa a resposta e atualizaPkgStatus
.Colunas interessantes:
Coluna Valores Estado de ação 1 - SUCCESS
2 - ATENÇÃO
4 - ERRO
8 - DOWNLOAD INICIADO
16 - DOWNLOAD EM ANDAMENTO
32 - BAIXADO
64 - CANCELADO
128 - CANCELAMENTO SOLICITADOPkgNotification
- Tabela de notificação monitorada pelo SMSDBMON para acionar o DistMgr para processar um pacote. A coluna Type define o tipo de notificação de pacote. As linhas nesta tabela são removidas depois que o SMSDBMON dispara DistMgr.Colunas interessantes:
Coluna Valores Tipo 0 - DESCONHECIDO
1 - EMBALAGEM
2 - PROGRAMAÇÃO
4 - SERVIDOR DE PACOTES (DP)
8 - CONTA DE ACESSO AO PACOTE
15 - TODOSMensagens de estado do DP de pull - Lista de IDs de mensagem de estado geradas pelo DP de pull
Colunas interessantes:
Coluna Valores Estado ID 1 - SUCCESS
2 - ATENÇÃO
4 - FALHA
8 - DOWNLOAD INICIADO
16 - DOWNLOAD EM ANDAMENTO
32 - BAIXADO
64 - CANCELADOExemplo de relatório de mensagem de estado:
<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 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 de 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>'
Localizando referências de DP órfãs
A consulta abaixo pode ser usada para identificar se há linhas órfãs restantes no banco de dados para um DP que não está mais no ambiente. Pode haver linhas órfãs se o DP não for 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 do 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 contendo 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>'