String-Pool 유효성 검사

Windows Installer는 데이터베이스 크기를 줄이고 성능을 향상시키기 위해 모든 데이터베이스 문자열을 단일 공유 문자열 풀에 저장합니다. 문자열 풀의 유효성을 검사하는 유일한 방법은 Windows Installer SDK에 있는 MsiInfo 도구를 사용하는 것입니다.

문자열 풀 확인은 다음 두 가지 주요 검사로 구성됩니다.

DBCS 문자열 테스트

DBCS 문자열 테스트는 데이터베이스의 각 문자열에 대해 다음 두 가지 조건을 검사합니다. 중립 코드 페이지가 표시된 패키지의 경우 문자가 확장 문자(127자 초과)이면 문자열에 플래그가 지정되고 이러한 문자는 특정 코드 페이지가 모든 시스템에서 일관되게 렌더링되어야 하기 때문에 데이터베이스의 코드 페이지가 유효하지 않음을 나타내는 메시지가 표시됩니다.

데이터베이스에 코드 페이지가 있는 경우 각 문자열에서 잘못된 DBCS 표시기를 검색합니다. 비중립 문자열이 잘못 표시된 경우 문자가 올바르게 렌더링되지 않습니다. (이는 데이터베이스에 이미 비중립 문자열이 있는 _ForceCodepage 테이블을 통해 코드 페이지를 특정 값으로 강제 적용하여 가장 일반적으로 발생합니다.) 이 검사를 수행하려면 데이터베이스의 코드 페이지가 시스템에 설치되어 있어야 합니다.

코드 페이지 문제가 있는 경우 사용자는 _ForceCodepage 테이블을 통해 데이터베이스의 코드 페이지를 적절한 값으로 강제 적용하여 오류를 수정할 수 있습니다. 자세한 내용은 코드 페이지 처리를 참조하세요.

참조 개수 확인

모든 문자열의 참조 수를 확인하기 위해 모든 테이블이 문자열 값을 검사하고, 각 고유 문자열 수를 유지하며, 해당 결과는 데이터베이스 문자열 풀의 저장된 참조 개수와 비교됩니다.

문자열 참조 개수 문제가 있는 경우 사용자는 MsiDatabaseExport를 사용하여 데이터베이스의 각 테이블을 즉시 내보내고, 새 데이터베이스를 만들고, MsiDatabaseImport를 사용하여 테이블을 새 데이터베이스로 가져와야 합니다. 그러면 새 데이터베이스의 콘텐츠는 이전 데이터베이스와 동일하지만 문자열 참조 개수는 정확합니다. 손상된 문자열 풀이 있는 데이터베이스에서 데이터를 추가하거나 삭제하면 데이터베이스 손상 및 데이터 손실이 증가할 수 있으므로 해당 단계를 신속하게 수행하여 추가 데이터 손실을 방지하는 것이 중요합니다.

데이터베이스를 다시 빌드할 때 새 데이터베이스에 필요한 스토리지와 스트림을 포함하고(_Streams 테이블_Storages 테이블 참조) 코드 페이지 문제를 알고 있어야 합니다. 또한 필요한 요약 정보 스트림 속성을 각각 설정해야 합니다.