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

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

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

    Colunas interessantes:

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

    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 SOLICITADO
  • PkgNotification - 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 - TODOS
  • Mensagens 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 - CANCELADO

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