Condividi tramite


Suggerimenti avanzati per la risoluzione dei problemi per la distribuzione del contenuto

Questo articolo fornisce alcuni suggerimenti avanzati per la risoluzione dei problemi che consentono di identificare e risolvere i problemi di distribuzione del contenuto.

Versione originale del prodotto: Configuration Manager Current Branch, Microsoft System Center 2012 Configuration Manager, Microsoft System Center 2012 R2 Configuration Manager

Abilitare la registrazione dettagliata

  • PkgXferMgr.log

    Per Package Transfer Manager, la registrazione dettagliata fornisce altre informazioni nel log sul processo di copia del contenuto, sugli hash dei file e sulla pianificazione dei processi. La registrazione dettagliata può essere abilitata impostando il valore del Registro di sistema seguente su 0:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SMS_PACKAGE_TRANSFER_MANAGER\LoggingLevel

    Per Package Transfer Manager, la registrazione di debug fornisce altre informazioni sul processo di copia del contenuto. La registrazione di debug può essere abilitata impostando il valore del Registro di sistema seguente su 1:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SMS_PACKAGE_TRANSFER_MANAGER\DebugLogging

    Note

    Queste modifiche al Registro di sistema non richiedono un riavvio del SMS_Executive servizio.

  • Log client (inclusi i log pull del punto di gestione e dping)

    La registrazione dettagliata può essere abilitata impostando il valore del Registro di sistema seguente su 0:

    HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogLevel

    La registrazione di debug può essere abilitata impostando il valore del Registro di sistema seguente come REG_SZ con valore True:

    HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\DebugLogging\Enabled

    Le dimensioni del log CCM possono essere aumentate a 5M impostando il valore del Registro di sistema seguente su 5242880 (decimale)

    HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogMaxSize

    Inoltre, è possibile modificare il valore DWORD per il valore del Registro di sistema seguente per aumentare il numero di file di log di cronologia da conservare:

    HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogMaxHistory

    Note

    Queste modifiche del Registro di sistema richiedono un riavvio del SMS Agent Host servizio.

  • StateSys.log

    La registrazione dettagliata per StateSys.log può essere abilitata impostando il valore del Registro di sistema seguente su 1:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\COMPONENTS\SMS_STATE_SYSTEM\Verbose logging

    Note

    Questa modifica della chiave del Registro di sistema non richiede un riavvio del SMS_Executive servizio.

  • (Globale - solo server del sito) Query SQL

    Per ottenere informazioni sulle query SQL eseguite dai ConfigMgr componenti, è possibile abilitare la traccia SQL impostando il valore del Registro di sistema seguente su 1:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SqlEnabled

    Questo valore del Registro di sistema aggiunge la registrazione di traccia SQL per tutti i log del server del sito. Questa operazione deve essere eseguita solo temporaneamente durante la risoluzione dei problemi e deve essere disabilitata dopo aver ottenuto i log pertinenti.

    Note

    Questa modifica del Registro di sistema non richiede un riavvio del SMS_Executive servizio.

  • (Globale - solo server del sito) Abilitare l'archiviazione dei log

    In alcuni casi il problema non viene riprodotto su richiesta e durante l'attesa che il problema venga riprodotto, si rischia di eseguire il rollover dei log. In queste situazioni, l'abilitazione dell'archiviazione dei log può essere utile perché consente di avere più log cronologici. Questo è rilevante solo per i log del server del sito.

    L'archiviazione dei log può essere abilitata impostando i valori del Registro di sistema seguenti:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\ArchiveEnabled = 1

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\ArchivePath = <ArchiveLocation>

    Dopo aver abilitato l'archiviazione dei log, ConfigMgr archivierà i log di cui è stato eseguito il <roll over in ArchiveLocation> e manterrà 10 copie di ogni log.

    Per aumentare il numero di copie gestite per un componente specifico quando è abilitata l'archiviazione dei log, impostare il valore del Registro di sistema seguente su 20:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\COMPONENT_NAME\LogMaxHistory

    Note

    Queste modifiche del Registro di sistema richiedono un riavvio del SMS_Executive servizio.

  • (Per log - solo server del sito) Aumentare le dimensioni del file di log

    Per aumentare le dimensioni del file di log per un singolo log su 50 MB, impostare il valore del Registro di sistema specifico del componente su 52428800 (decimale):

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\COMPONENT_NAME\MaxFileSize

    Note

    Questa modifica del Registro di sistema richiede un riavvio del SMS_Executive servizio.

Inviare di nuovo una copia compressa di un pacchetto in un sito

Quando un pacchetto viene distribuito per la prima volta a un sito, DistMgr invia una copia compressa del pacchetto al sito. Dopo l'estrazione del pacchetto nella raccolta contenuto nel sito, la copia locale del contenuto viene usata per inviare il pacchetto ai provider di dominio purché la stessa versione del pacchetto venga distribuita ai provider di dominio nel sito.

In alcuni casi è necessario forzare un sito a inviare nuovamente la copia compressa di un pacchetto a un sito specificato. In particolare, questo è necessario quando:

  1. Il contenuto non è presente nella raccolta contenuto (PkgLib, DataLibo FileLib) in un server del sito primario o secondario stesso.
  2. DistMgr.log si lamenta costantemente del contenuto che non è arrivato dal sito padre (ad esempio: "Il contenuto del pacchetto CS100026 non è ancora arrivato dal sito CS1, riprova più tardi".

Nella maggior parte dei casi, il messaggio "Il contenuto del pacchetto CS100026 non è ancora arrivato dal sito CS1, riprova più tardi" viene registrato temporaneamente mentre il contenuto del pacchetto è in transito. Quando viene visualizzato questo messaggio, esaminare i log sender/despooler per assicurarsi che non siano presenti problemi con le comunicazioni del sito. Per informazioni sul flusso di log, vedere Distribuire un pacchetto a Dp in più siti .

In che modo DistMgr sa se nel sito corrente è installata una copia del pacchetto

DistMgr controlla se è presente una riga di tipo 1 in PkgStatus per il pacchetto per la versione del pacchetto in questione. Se è presente una riga di tipo 1 per il sito con Stato = installato, la copia locale del contenuto del pacchetto viene usata per inviare ai provider di dominio. Se non è presente alcuna riga di tipo 1 in PkgStatus, significa che il contenuto del pacchetto non è ancora installato nel server del sito.

Esegue la ridistribuzione del pacchetto nel servizio Device Provisioning nel server del sito, in modo che la copia compressa del pacchetto venga reinviata

No. La ridistribuzione del pacchetto si basa sul sito in cui il contenuto del pacchetto è già presente nella directory di origine del pacchetto. Se il pacchetto è stato inviato al sito a un certo punto e contrassegnato come Installato, un'azione di ridistribuzione nel dispositivo di distribuzione sul server del sito non esegue alcuna operazione come DistMgr ritiene che il contenuto sia già installato e che la riga seguente venga registrata DistMgr.log:

Il punto di distribuzione si trova nel server del sito e il pacchetto è un pacchetto di tipo di contenuto. Non c'è niente da copiare.

Cosa accade se il contenuto non è presente nella raccolta contenuto nel sito di origine del pacchetto

Se il contenuto non è presente nella raccolta contenuto nel sito di origine del pacchetto, la reimpostazione SourceVersion di non sarà più utile. L'unico modo per ripopolare il contenuto mancante consiste nell'aggiornare il pacchetto. L'aggiornamento del pacchetto determina la creazione di uno snapshot del pacchetto dal percorso di origine del pacchetto e la scrittura del contenuto nella raccolta contenuto.

Ricerca per categorie forzare il sito di origine del pacchetto a inviare nuovamente la copia compressa del pacchetto in un sito specifico

Dopo aver confermato che il sito di origine del pacchetto ha il contenuto necessario, è possibile forzare il sito di origine del pacchetto a inviare nuovamente il file PCK del pacchetto a un sito specifico impostando SourceVersion su 0 per la riga di tipo 1 in PkgStatus per il sito interessato. Questa riga può essere identificata eseguendo la query SQL seguente nel database del sito di origine del pacchetto dopo aver sostituito PACKAGEID e SITECODE del pacchetto e del sito desiderati:

SELECT * FROM PkgStatus WHERE Type = 1 AND ID = 'PACKAGEID' AND SiteCode = 'SITECODE'

Dopo aver verificato che la query restituisce una riga univoca e corretta, l'esecuzione della query seguente verrà reimpostata SourceVersion su 0:

UPDATE PkgStatus SET SourceVersion = 0 WHERE Type = 1 AND ID = 'PACKAGEID' AND SiteCode = 'SITECODE'

Dopo aver reimpostato su SourceVersion 0 per la riga tipo 1, la ridistribuzione del pacchetto in qualsiasi dp nel sito interessato forza il sito di origine del pacchetto a inviare nuovamente la copia compressa del pacchetto al sito interessato.

Note

È molto importante eseguire la query precedente nel sito proprietario del pacchetto, ad esempio il sito di origine del pacchetto.

Tabelle pertinenti per la distribuzione del contenuto

  • SMSPackages - Contiene un elenco di tutti i pacchetti

    Colonne interessanti:

    Colonna Valori
    Azione 0: nessuno
    1 - AGGIORNAMENTO
    2 - AGGIUNGI
    3 - ELIMINAZIONE
    4 - CONVALIDA
    5 - ANNULLA
    PackageType 0 - Pacchetto normale
    3 - Pacchetto driver
    4 - Sequenza di attività
    5 - Pacchetto aggiornamenti software
    6 - Pacchetto impostazioni dispositivo
    7 - Pacchetto di app virtuali
    8 - Pacchetto di contenuto (applicazione)
    257 - Immagine del sistema operativo
    258 - Immagine d'avvio
    259 - Pacchetto di installazione del sistema operativo
    260 - Pacchetto VHD
  • PkgServers : contiene un elenco di tutti i pacchetti insieme ai provider di dominio a cui sono attualmente destinati.

    Colonne interessanti:

    Colonna Valori
    Azione 0: nessuno
    1 - AGGIORNAMENTO
    2 - AGGIUNGI
    3 - ELIMINAZIONE
    4 - CONVALIDA
    5 - ANNULLA
  • PkgStatus - Contiene un elenco dello stato corrente del pacchetto per ogni pacchetto per ogni dp.

    Colonne interessanti:

    Colonna Valori
    Type 1 - SITO (MASTER)
    2 - DP (COPY)

    Vengono create righe di tipo 1 per ogni sito a cui è destinato il pacchetto. PkgServer per questa riga è il nome di dominio completo del server del sito.

    Vengono create righe di tipo 2 per ogni dp a cui è destinato il pacchetto. PkgServer è DP NALPATH.
    Stato 0: nessuno
    1 - INVIATO
    2 - RICEVUTO
    3 - INSTALLATO
    4 - RIPROVARE
    5 - NON RIUSCITO
    6 - RIMOSSO
    7 - RIMOZIONE IN SOSPESO (non usata)
    8 - RIMOZIONE NON RIUSCITA
    9 - RIPROVARE A RIMUOVERE
  • DistributionJobs - Contiene un elenco di processi di Package Transfer Manager insieme al relativo stato corrente.

    Colonne interessanti:

    Colonna Valori
    Azione 0: nessuno
    1 - AGGIORNAMENTO
    2 - AGGIUNGI
    3 - ELIMINAZIONE
    4 - CONVALIDA
    5 - ANNULLA
    Provincia 0 - IN SOSPESO
    1 - PRONTO
    2 - AVVIATO
    3 - INPROGRESS
    4 - RIAVVIO IN SOSPESO
    5 - COMPLETA
    6 - NON RIUSCITO
    7 - ANNULLATO
    8 - SOSPESO
  • DistributionPoints : contiene un elenco di tutti i punti di distribuzione.

    Colonne interessanti:

    Colonna Valori
    Azione 0: nessuno
    1 - AGGIORNAMENTO
    2 - AGGIUNGI
    3 - ELIMINAZIONE
    4 - CONVALIDA
    5 - ANNULLA
  • PullDPResponse - Contiene temporaneamente la risposta dello stato del pacchetto inviata dai provider di dominio pull. DistMgr elabora la risposta e aggiorna PkgStatus.

    Colonne interessanti:

    Colonna Valori
    ActionState 1 - SUCCESS
    2 - AVVISO
    4 - ERRORE
    8 - DOWNLOAD AVVIATO
    16 - DOWNLOAD IN CORSO
    32 - SCARICATO
    64 - ANNULLATO
    128 - ANNULLAMENTO RICHIESTO
  • PkgNotification - Tabella di notifica monitorata da SMSDBMON per attivare DistMgr per elaborare un pacchetto. La colonna Type definisce il tipo di notifica del pacchetto. Le righe in questa tabella vengono rimosse dopo che SMSDBMON attiva DistMgr.

    Colonne interessanti:

    Colonna Valori
    Type 0 - SCONOSCIUTO
    1 - PACCHETTO
    2 - PROGRAMMA
    4 - PACKAGE SERVER (DP)
    8 - ACCOUNT DI ACCESSO AL PACCHETTO
    15 - ALL
  • Eseguire il pull dei messaggi di stato dp - Elenco degli ID dei messaggi di stato generati dal dp pull

    Colonne interessanti:

    Colonna Valori
    ID stato 1 - SUCCESS
    2 - AVVISO
    4 - ERRORE
    8 - DOWNLOAD AVVIATO
    16 - DOWNLOAD IN CORSO
    32 - SCARICATO
    64 - ANNULLATO

    Report messaggio di stato di esempio:

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

Query SQL utili

Di seguito sono riportate alcune query SQL che possono essere utili per la risoluzione di vari problemi correlati alla distribuzione del contenuto.

Query sullo stato del pacchetto/dp

  • Tutti i pacchetti/DP non riusciti

    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
    
  • Tutti i pacchetti/DP in corso

    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
    
  • Tutti i pacchetti/DP riusciti

    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
    
  • Tutti i pacchetti/DP in corso per più di tre giorni

    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
    
  • Tutti i pacchetti/DP nello stato Non riuscito per più di tre giorni

    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
    
  • Conteggio di tutti gli stati

    SELECT MessageState,
    COUNT(MessageState) AS [Count]
    FROM vSMS_DPStatusDetails
    WHERE PackageID <> ''
    GROUP BY MessageState
    
  • Conteggio degli stati del pacchetto per 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
    
  • Stato di tutti i provider di dominio per un determinato pacchetto

    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
    
  • Conteggio degli stati dp per pacchetto

    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
    
  • Stato corrente del pacchetto/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>'
    

Ricerca di riferimenti dp orfani

La query seguente può essere usata per identificare se nel database sono presenti righe orfane che non sono più presenti nell'ambiente. Se il dp non è stato rimosso correttamente, potrebbero essere presenti righe orfane.

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

Query simile per un dp specifico in un sito specifico:

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

Proprietà SCF (Site Control File)

  • Proprietà SCF per DistMgr per il sito corrente

    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'
    
  • Proprietà SCF per un 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'
    

Pacchetti contenenti l'aggiornamento software specificato

Elencare tutti i pacchetti contenenti l'ID univoco di aggiornamento specificato.

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