Compartilhar via


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 = 1

    HKEY_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:

  1. O conteúdo está ausente da biblioteca de conteúdo (PkgLib, DataLibou FileLib) em um servidor de site primário ou secundário.
  2. 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 pacotes

    Colunas interessantes:

    Coluna Values
    Ação 0 - NENHUM
    1 – ATUALIZAÇÃO
    2 – ADD
    3 – EXCLUIR
    4 – VALIDAR
    5 – CANCELAR
    PackageType 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 VHD
  • PkgServers - 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 – CANCELAR
  • PkgStatus- 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 NOVAMENTE
  • DistributionJobs - 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 – CANCELAR
    Estado 0 – PENDENTE
    1 – PRONTO
    2 – INICIADO
    3 – INPROGRESS
    4 – REINICIALIZAÇÃO PENDENTE
    5 – COMPLETO
    6 – FALHA
    7 – CANCELADO
    8 – SUSPENSO
  • DistributionPoints - 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 – CANCELAR
  • PullDPResponse- Contém temporariamente o pacote status resposta enviada dos DPs pull. O DistMgr processa a resposta e atualiza PkgStatus.

    Colunas interessantes:

    Coluna Values
    ActionState 1 – ÊXITO
    2 – AVISO
    4 – ERRO
    8 – BAIXAR INICIADO
    16 – BAIXAR EM ANDAMENTO
    32 – BAIXADO
    64 – CANCELADO
    128 – CANCELAMENTO SOLICITADO
  • PkgNotification - 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 – TUDO
  • Puxar 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 – CANCELADO

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