콘텐츠 배포를 위한 고급 문제 해결 팁
이 문서에서는 콘텐츠 배포 문제를 식별하고 해결하는 데 도움이 되는 몇 가지 고급 문제 해결 팁을 제공합니다.
원래 제품 버전: Configuration Manager 현재 분기, Microsoft System Center 2012 Configuration Manager, Microsoft System Center 2012 R2 Configuration Manager
자세한 로깅 정보 표시 사용
PkgXferMgr.log
패키지 전송 관리자의 경우 자세한 정보 로깅은 콘텐츠 복사 프로세스, 파일 해시 및 작업 예약에 대한 자세한 정보를 로그에 제공합니다. 다음 레지스트리 값을 0으로 설정하여 자세한 정보 로깅을 사용할 수 있습니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SMS_PACKAGE_TRANSFER_MANAGER\LoggingLevel
패키지 전송 관리자의 경우 디버그 로깅은 콘텐츠 복사 프로세스에 대한 자세한 정보를 제공합니다. 다음 레지스트리 값을 1로 설정하여 디버그 로깅을 사용할 수 있습니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SMS_PACKAGE_TRANSFER_MANAGER\DebugLogging
참고 항목
이러한 레지스트리 변경은 서비스를 다시 시작할
SMS_Executive
필요가 없습니다.클라이언트 로그(끌어오기 DP 및 관리 지점 로그 포함)
다음 레지스트리 값을 0으로 설정하여 자세한 정보 로깅을 사용할 수 있습니다.
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogLevel
다음 레지스트리 값을 true 값으로 REG_SZ 설정하여 디버그 로깅을 사용하도록 설정할 수 있습니다.
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\DebugLogging\Enabled
다음 레지스트리 값을 5242880(10진수)로 설정하여 CCM 로그 크기를 5M으로 늘릴 수 있습니다.
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogMaxSize
또한 다음 레지스트리 값에 대한 DWORD 값을 편집하여 보존할 기록 로그 파일의 수를 늘릴 수 있습니다.
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Logging\@GLOBAL\LogMaxHistory
참고 항목
이러한 레지스트리를 변경하려면 서비스를 다시 시작해야
SMS Agent Host
합니다.StateSys.log
다음 레지스트리 값을 1로 설정하여 StateSys.log 자세한 정보 로깅을 사용하도록 설정할 수 있습니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\COMPONENTS\SMS_STATE_SYSTEM\Verbose logging
참고 항목
이 레지스트리 키를 변경해도 서비스를 다시 시작할
SMS_Executive
필요가 없습니다.(전역 - 사이트 서버만 해당) SQL 쿼리
구성 요소에서
ConfigMgr
실행되는 SQL 쿼리에 대한 정보를 가져오기 위해 다음 레지스트리 값을 1로 설정하여 SQL 추적을 사용하도록 설정할 수 있습니다.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\SqlEnabled
이 레지스트리 값은 모든 사이트 서버 로그에 대한 SQL 추적 로깅을 추가합니다. 이 작업은 문제를 해결하는 동안에만 일시적으로 수행해야 하며 관련 로그를 얻은 후에는 사용하지 않도록 설정해야 합니다.
참고 항목
이 레지스트리를 변경해도 서비스를 다시 시작할
SMS_Executive
필요가 없습니다.(전역 - 사이트 서버만 해당) 로그 보관 사용
요청 시 문제가 재현되지 않고 문제가 재현되기를 기다리는 동안 로그가 롤오버될 위험이 있습니다. 이러한 상황에서 로그 보관을 사용하도록 설정하면 더 많은 기록 로그를 사용할 수 있으므로 유용할 수 있습니다. 이는 사이트 서버 로그에만 관련됩니다.
다음 레지스트리 값을 설정하여 로그 보관을 사용하도록 설정할 수 있습니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\ArchiveEnabled
= 1HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\ArchivePath
= <ArchiveLocation>로그 보관을 사용하도록 설정한 후 ConfigMgr은 롤오버된 로그를 ArchiveLocation>에 <보관하고 각 로그의 복사본 10개는 유지합니다.
로그 보관을 사용할 때 특정 구성 요소에 대해 유지 관리되는 복사본 수를 늘리려면 다음 레지스트리 값을 20으로 설정합니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\COMPONENT_NAME\LogMaxHistory
참고 항목
이러한 레지스트리를 변경하려면 서비스를 다시 시작해야
SMS_Executive
합니다.(로그당 - 사이트 서버만 해당) 로그 파일 크기 늘리기
개별 로그의 로그 파일 크기를 50MB로 늘리려면 구성 요소별 레지스트리 값을 52428800 (10진수)로 설정합니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Tracing\COMPONENT_NAME\MaxFileSize
참고 항목
이 레지스트리를 변경하려면 서비스를 다시 시작해야
SMS_Executive
합니다.
압축된 패키지 복사본을 사이트에 다시 보내기
패키지가 사이트에 처음 배포되면 DistMgr는 패키지의 압축된 복사본을 사이트로 보냅니다. 사이트의 콘텐츠 라이브러리에서 패키지를 추출한 후 동일한 패키지 버전이 사이트의 DP에 배포되는 한 콘텐츠의 로컬 복사본을 사용하여 DP에 패키지를 보냅니다.
사이트에서 패키지의 압축된 복사본을 지정된 사이트에 다시 보내도록 강제해야 하는 경우가 몇 가지 있습니다. 특히 다음과 같은 경우에 필요합니다.
- 콘텐츠가 기본 또는 보조 사이트 서버 자체의 콘텐츠 라이브러리(
PkgLib
DataLib
또는FileLib
)에서 누락되었습니다. - DistMgr.log 부모 사이트에서 도착하지 않은 콘텐츠에 대해 일관되게 불평합니다(예: '패키지 CS100026 콘텐츠가 아직 사이트 CS1에서 도착하지 않았으므로 나중에 다시 시도합니다.).
대부분의 경우 패키지 콘텐츠가 전송되는 동안 '패키지 CS100026 콘텐츠가 사이트 CS1에서 아직 도착하지 않았으므로 나중에 다시 시도합니다.' 메시지가 일시적으로 기록됩니다. 이 메시지가 표시되면 보낸 사람/데스풀러 로그를 검토하여 사이트 통신에 문제가 없는지 확인합니다. 로그 흐름을 이해하려면 사이트 간에 DP에 패키지 배포를 검토합니다.
DistMgr은 현재 사이트에 패키지 복사본이 설치되어 있는지 어떻게 알 수 있나요?
DistMgr는 해당 패키지 버전의 패키지에 PkgStatus
대한 Type 1 행이 있는지 확인합니다. 상태가 = 설치된 사이트에 대한 유형 1 행이 있는 경우 패키지 콘텐츠의 로컬 복사본을 사용하여 DP로 보냅니다. 형식 1 행 PkgStatus
이 없으면 패키지 콘텐츠가 사이트 서버에 아직 설치되지 않았다는 의미입니다.
사이트 서버에 공동 배치된 DP에 패키지를 재배포하면 패키지의 압축된 복사본이 다시 들여쓰기됩니다.
아니요. 패키지를 재배포하는 작업은 패키지 원본 디렉터리에 패키지 콘텐츠가 이미 있는 사이트에 의존합니다. 패키지가 어느 시점에 사이트로 전송되어 설치됨으로 표시된 경우, DistMgr에서 콘텐츠가 이미 설치되어 있고 다음 줄이 DistMgr.log 로그인될 것으로 생각되므로 사이트 서버에 공동 배치된 DP에 대한 재배포 작업은 아무 작업도 수행하지 않습니다.
배포 지점은 siteserver에 있고 패키지는 콘텐츠 형식 패키지입니다. 복사할 항목이 없습니다.
패키지 원본 사이트의 콘텐츠 라이브러리에 콘텐츠가 누락된 경우
패키지 원본 사이트의 콘텐츠 라이브러리에 콘텐츠가 없는 경우 다시 설정하는 SourceVersion
것은 도움이 되지 않습니다. 누락된 콘텐츠를 다시 채워야 하는 유일한 방법은 패키지를 업데이트하는 것입니다. 패키지를 업데이트하면 패키지 원본 사이트에서 패키지 원본 위치에서 패키지 스냅샷을 만들고 콘텐츠를 콘텐츠 라이브러리에 씁니다.
어떻게 할까요? 패키지 원본 사이트에서 패키지의 압축된 복사본을 특정 사이트에 다시 보내도록 강제합니다.
패키지 원본 사이트에 필요한 콘텐츠가 있는지 확인한 후 영향을 받는 사이트의 유형 1 행 PkgStatus
에 대해 0으로 설정 SourceVersion
하여 패키지 원본 사이트에서 패키지 PCK 파일을 특정 사이트에 다시 보내도록 할 수 있습니다. 이 행은 원하는 패키지 및 사이트의 PACKAGEID 및 SITECODE를 바꾼 후 패키지 원본 사이트의 데이터베이스에서 다음 SQL 쿼리를 실행하여 식별할 수 있습니다.
SELECT * FROM PkgStatus WHERE Type = 1 AND ID = 'PACKAGEID' AND SiteCode = 'SITECODE'
이 쿼리가 고유하고 올바른 행을 반환한다는 것을 확인한 후 아래 쿼리를 실행하면 이 행이 0으로 다시 설정 SourceVersion
됩니다.
UPDATE PkgStatus SET SourceVersion = 0 WHERE Type = 1 AND ID = 'PACKAGEID' AND SiteCode = 'SITECODE'
Type 1 행에 SourceVersion
대해 0 으로 다시 설정하면 영향을 받는 사이트의 DP에 패키지를 다시 배포하면 패키지 원본 사이트에서 패키지의 압축된 복사본을 영향을 받는 사이트에 다시 보내도록 강제합니다.
참고 항목
패키지를 소유한 사이트(예: 패키지 원본 사이트)에서 위의 쿼리를 실행하는 것이 매우 중요합니다.
콘텐츠 배포 관련 테이블
SMSPackages
- 모든 패키지 목록을 포함합니다.흥미로운 열:
Column 값 동작 0 - 없음
1 - 업데이트
2 - 추가
3 - DELETE
4 - 유효성 검사
5 - 취소PackageType 0 - 일반 패키지
3 - 드라이버 패키지
4 - 작업 순서
5 - 소프트웨어 업데이트 패키지
6 - 디바이스 설정 패키지
7 - 가상 앱 패키지
8 - 콘텐츠 패키지(애플리케이션)
257 - 운영 체제 이미지
258 - 부팅 이미지
259 - OS 설치 패키지
260 - VHD 패키지PkgServers
- 현재 대상으로 지정된 DP와 함께 모든 패키지 목록을 포함합니다.흥미로운 열:
Column 값 동작 0 - 없음
1 - 업데이트
2 - 추가
3 - DELETE
4 - 유효성 검사
5 - 취소PkgStatus
- 각 DP에 대한 각 패키지의 현재 패키지 상태 목록을 포함합니다.흥미로운 열:
Column 값 Type 1 - SITE(MASTER)
2 - DP(COPY)
패키지가 대상으로 하는 각 사이트에 대해 유형 1 행이 만들어집니다. 이 행의 PkgServer는 사이트 서버 FQDN입니다.
패키지가 대상으로 하는 각 DP에 대해 유형 2 행이 만들어집니다. PkgServer는 DP NALPATH입니다.상태 0 - 없음
1 - SENT
2 - 수신됨
3 - 설치됨
4 - 다시 시도
5 - 실패
6 - 제거됨
7 - REMOVE 보류 중(사용되지 않음)
8 - 제거 실패
9 - 제거 다시 시도DistributionJobs
- 현재 상태와 함께 패키지 전송 관리자 작업 목록을 포함합니다.흥미로운 열:
Column 값 동작 0 - 없음
1 - 업데이트
2 - 추가
3 - DELETE
4 - 유효성 검사
5 - 취소State(상태) 0 - 보류 중
1 - 준비 완료
2 - 시작됨
3 - INPROGRESS
4 - 다시 시작 보류 중
5 - 완료
6 - 실패
7 - 취소됨
8 - 일시 중단됨DistributionPoints
- 모든 배포 지점의 목록을 포함합니다.흥미로운 열:
Column 값 동작 0 - 없음
1 - 업데이트
2 - 추가
3 - DELETE
4 - 유효성 검사
5 - 취소PullDPResponse
- 끌어오기 DP에서 보낸 패키지 상태 응답을 일시적으로 포함합니다. DistMgr은 응답을 처리하고 업데이트합니다PkgStatus
.흥미로운 열:
Column 값 ActionState 1 - 성공
2 - 경고
4 - 오류
8 - 다운로드 시작됨
16 - 다운로드 진행 중
32 - 다운로드됨
64 - 취소됨
128 - 취소 요청됨PkgNotification
- 패키지를 처리하기 위해 DistMgr을 트리거하기 위해 SMSDBMON에서 모니터링하는 알림 테이블입니다. 형식 열은 패키지 알림의 유형을 정의합니다. 이 테이블의 행은 SMSDBMON이 DistMgr을 트리거한 후에 제거됩니다.흥미로운 열:
Column 값 Type 0 - 알 수 없음
1 - 패키지
2 - PROGRAM
4 - 패키지 서버(DP)
8 - 패키지 액세스 계정
15 - 모두끌어오기 DP 상태 메시지 - 끌어오기 DP에서 발생한 상태 메시지 ID 목록
흥미로운 열:
Column 값 State ID 1 - 성공
2 - 경고
4 - 실패
8 - 다운로드 시작됨
16 - 다운로드 진행 중
32 - 다운로드됨
64 - 취소됨샘플 상태 메시지 보고서:
<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>
유용한 SQL 쿼리
다양한 콘텐츠 배포 관련 문제를 해결할 때 도움이 될 수 있는 몇 가지 SQL 쿼리는 다음과 같습니다.
패키지/DP 상태 쿼리
모든 실패한 패키지/DP
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
모든 진행 중인 패키지/DP
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
모든 성공 패키지/DP
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
3일 이상 진행 중인 상태의 모든 패키지/DP
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
3일 이상 실패한 상태의 모든 패키지/DP
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
모든 상태의 수
SELECT MessageState, COUNT(MessageState) AS [Count] FROM vSMS_DPStatusDetails WHERE PackageID <> '' GROUP BY MessageState
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
지정된 패키지에 대한 모든 DP의 상태
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
패키지당 DP 상태 수
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
패키지/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>'
분리된 DP 참조 찾기
아래 쿼리를 사용하여 더 이상 환경에 없는 DP에 대한 분리된 행이 데이터베이스에 남아 있는지 확인할 수 있습니다. DP가 제대로 제거되지 않은 경우 분리된 행이 있을 수 있습니다.
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
특정 사이트의 특정 DP에 대한 유사한 쿼리:
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
SCF(사이트 제어 파일) 속성
현재 사이트의 DistMgr에 대한 SCF 속성
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'
DP에 대한 SCF 속성
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'
지정된 소프트웨어 업데이트를 포함하는 패키지
지정된 업데이트 고유 ID를 포함하는 모든 패키지를 나열합니다.
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>'