적용 대상:SQL Server
Azure SQL Database
Azure SQL Managed Instance
이 문서에서는 SQL Server 2025(17.x) 이상 버전의 전체 텍스트 인덱스 버전 변경에 대해 설명합니다. 동작 변경, 필수 마이그레이션 단계 및 새 구성 요소 이진 파일을 다룹니다.
2025년 SQL Server 전체 텍스트 인덱스 버전 변경
SQL Server 2025 (17.x)에서는 SQL Server 설치본에서 레거시 단어 분리기, 스테머 및 필터 이진 파일이 제거됩니다. 이러한 구성 요소는 최신 도구 집합을 사용하여 다시 빌드되며 더 많은 언어 및 문서 형식에 대한 확장된 지원을 제공합니다. SQL Server 2025(17.x)와 함께 설치된 구성 요소를 버전 2라고 합니다. SQL Server 2022(16.x) 및 이전 버전과 함께 설치된 구성 요소를 버전 1이라고 합니다.
제자리 업그레이드 후 기존 전체 텍스트 인덱스는 sys.fulltext_indexes에 index_version = 1가 있습니다. 새로 만든 인덱스는 FULLTEXT_INDEX_VERSION 데이터베이스 범위 구성을 사용하여 달리 지정하지 않는 한 버전 2 및 새 구성 요소를 사용합니다.
버전 2 구성 요소 변경
버전 2 구성 요소는 언어 및 문서 유형 지원을 추가하고, 새 사용자 지정 모델을 사용하며, 버전 1 구성 요소와 다른 토큰화 결과를 반환할 수 있습니다.
새 언어 지원
SQL Server 2025(17.x)는 세 가지 새로운 언어로 전체 텍스트 인덱싱을 지원합니다.
- 핀란드어(LCID 1035)
- 헝가리어(LCID 1038)
- 에스토니아어(LCID 1061)
새 문서 형식 지원
SQL Server 2025(17.x)는 기본적으로 다음 문서 확장의 인덱싱을 지원합니다.
| 필터 | Extension |
|---|---|
msgfilt02.dll |
.msg |
odffilt02.dll |
.odp, .ods, .odt |
offfilt02.dll |
.doc, .dot, .obd, .obt, .pot, .pps, .ppt, .xlb.xlc, .xls.xlt |
offfiltx02.dll |
.docm,.docx, .dotx, .pptm, .pptx, .xlsb.xlsm, .xlsx.zip |
onfilter02.dll |
.one |
예기치 않은 결과
SQL Server 2025(17.x)의 새 구성 요소는 애플리케이션에 예기치 않은 결과를 반환할 수 있습니다. 예를 들어 영어(LCID 1033) 단어 분리기를 고려합니다.
| 용어 | 이전 단어 분리기를 사용하여 결과 | 새 단어 분리기를 사용하여 결과 |
|---|---|---|
cat_dog |
cat_dog |
cat_dogcatdog |
$100 |
$100nn100usd |
\$100nn100\$ |
2026-01-09 |
2026-01-092026nn20260109 |
2026-01-09dd2026010920260109 |
사용자 지정 모델
버전 2 전체 텍스트 인덱스는 더 이상 Windows 레지스트리에서 구성 요소 처리기를 읽지 않습니다. 인스턴스별 JSON 파일을 통해 사용자 지정을 제어합니다. 자세한 내용은 등록된 필터 및 단어 분리기 보기 또는 변경을 참조하세요.
업그레이드 및 마이그레이션 옵션
SQL Server 2025(17.x)에서는 버전 1 바이너리가 모두 제거되므로, 버전 1 인덱스를 사용하는 전체 텍스트 쿼리 및 채우기 작업은 현재 위치 업그레이드 후 실패합니다. 자세한 내용은 SQL Server 2025의 데이터베이스 엔진 기능 주요 변경 사항을 참조하세요.
SQL Server 2025(17.x) 이상 버전으로 업그레이드하거나 Azure SQL Database 및 Azure SQL Managed Instance 사용 중단을 위해 버전 1 인덱스를 준비할 때 다음 방법 중 하나를 사용합니다.
버전 1 인덱스 찾기
Full-Text Search를 사용하는 각 데이터베이스에서 다음 쿼리를 실행하여 버전 1 구성 요소를 계속 사용하는 인덱스를 찾습니다.
SELECT fc.[name] AS catalog_name,
OBJECT_SCHEMA_NAME(fi.object_id) AS schema_name,
OBJECT_NAME(fi.object_id) AS table_name,
fi.object_id,
fi.*
FROM sys.fulltext_indexes AS fi
INNER JOIN sys.fulltext_catalogs AS fc
ON fi.fulltext_catalog_id = fc.fulltext_catalog_id
WHERE fi.index_version = 1;
버전 2 구성 요소를 사용하여 기존 인덱스 다시 작성
버전 2 구성 요소를 사용하도록 기존 전체 텍스트 인덱스를 다시 작성합니다.
FULLTEXT_INDEX_VERSION이(가) 2(으)로 설정되어 있는지 확인한 다음, 전체 텍스트 카탈로그를 다시 빌드합니다.
SELECT *
FROM sys.database_scoped_configurations
WHERE [name] = 'FULLTEXT_INDEX_VERSION';
ALTER FULLTEXT CATALOG [FtCatalog] REBUILD;
메모
카탈로그 다시 작성 작업은 모든 전체 텍스트 인덱스를 다시 작성합니다. 인덱스 빌드의 순서를 제어하거나 리소스 요구 사항을 줄이려면 전체 텍스트 인덱스를 개별적으로 삭제하고 다시 만듭니 다.
버전 1 구성 요소 계속 사용
SQL Server 설치에서 파일을 관리할 수 있는 SQL Server 인스턴스에 대해서만 이 옵션을 사용합니다.
Important
버전 1은 SQL Server on Linux에서 더 이상 사용되지 않습니다. SQL Server 2025(17.x) 이상 버전에서는 mssql-server-fts 패키지에 버전 1 이진 파일이 포함되지 않습니다. 일치하지 않는 버전의 mssql-server-fts 패키지 및 mssql-server 패키지를 설치하려고 시도하면 지원되지 않으며 전체 텍스트 오류가 발생합니다.
애플리케이션 호환성을 위해 버전 1을 유지해야 하는 경우 다시 빌드하는 동안 의도하지 않은 버전 2로 업그레이드하지 않도록 설정합니다 FULLTEXT_INDEX_VERSION = 1 .
ALTER DATABASE SCOPED CONFIGURATION
SET FULLTEXT_INDEX_VERSION = 1;
다음으로, 이전 인스턴스의 Binn 폴더에서 대상 인스턴스의 Binn 폴더로 레거시 단어 분리기, 형태소 분석기 및 필터 이진 파일을 복사합니다. 언어 또는 문서 유형별로 DLL 및 종속 라이브러리를 복사해야 하는 참조는 SQL Server Full-Text 검색에서 필터 및 단어 분리기를 참조하세요.
버전 1 이진 파일의 전체 집합을 대량 복사하려면 다음 스크립트를 이름이 지정된 Copy-FulltextV1Components.ps1파일에 복사합니다.
<#
.SYNOPSIS
Copies the Full-Text V1 components from one SQL install's Binn folder to another.
Existing files are never overwritten; each file reports OK, SKIP or FAIL.
.EXAMPLE
.\Copy-FulltextV1Components.ps1 `
-SourceBinn 'C:\Program Files\Microsoft SQL Server\MSSQL16.INST1\MSSQL\Binn' `
-TargetBinn 'C:\Program Files\Microsoft SQL Server\MSSQL17.INST2\MSSQL\Binn'
#>
param(
[Parameter(Mandatory)] [string] $SourceBinn,
[Parameter(Mandatory)] [string] $TargetBinn
)
$components = @(
'infosoft.dll',
'LangWrbk.dll',
'korwbrkr.dll',
'korwbrkr.lex',
'msfte.dll',
'xmlfilt.dll',
'MsWb7.dll',
'MsWb70011.dll',
'MsWb7001e.dll',
'MsWb70404.dll',
'MsWb70804.dll',
'NaturalLanguage6.dll',
'NL7Data0011.dll',
'NL7Data001e.dll',
'NL7Data0404.dll',
'NL7Data0804.dll',
'NL7Lexicons0011.dll',
'NL7Lexicons001e.dll',
'NL7Lexicons0404.dll',
'NL7Lexicons0804.dll',
'NL7Models0011.dll',
'NL7Models001e.dll',
'NL7Models0404.dll',
'NL7Models0804.dll',
'nlhtml.dll',
'nls400.dll',
'NlsData0000.dll',
'NlsData0002.dll',
'NlsData0003.dll',
'NlsData000a.dll',
'NlsData000c.dll',
'NlsData000d.dll',
'NlsData000f.dll',
'NlsData0010.dll',
'NlsData0018.dll',
'NlsData001a.dll',
'NlsData001b.dll',
'NlsData001D.dll',
'NlsData0020.dll',
'NlsData0021.dll',
'NlsData0022.dll',
'NlsData0024.dll',
'NlsData0026.dll',
'NlsData0027.dll',
'NlsData002a.dll',
'NlsData0039.dll',
'NlsData003e.dll',
'NlsData0045.dll',
'NlsData0046.dll',
'NlsData0047.dll',
'NlsData0049.dll',
'NlsData004a.dll',
'NlsData004b.dll',
'NlsData004c.dll',
'NlsData004e.dll',
'NlsData0414.dll',
'NlsData0416.dll',
'NlsData0816.dll',
'NlsData081a.dll',
'NlsData0c1a.dll',
'Nlsdl.dll',
'NlsLexicons0002.dll',
'NlsLexicons0003.dll',
'NlsLexicons000a.dll',
'NlsLexicons000c.dll',
'NlsLexicons000d.dll',
'NlsLexicons000f.dll',
'NlsLexicons0010.dll',
'NlsLexicons0018.dll',
'NlsLexicons001a.dll',
'NlsLexicons001b.dll',
'NlsLexicons001D.dll',
'NlsLexicons0020.dll',
'NlsLexicons0021.dll',
'NlsLexicons0022.dll',
'NlsLexicons0024.dll',
'NlsLexicons0026.dll',
'NlsLexicons0027.dll',
'NlsLexicons002a.dll',
'NlsLexicons0039.dll',
'NlsLexicons003e.dll',
'NlsLexicons0045.dll',
'NlsLexicons0046.dll',
'NlsLexicons0047.dll',
'NlsLexicons0049.dll',
'NlsLexicons004a.dll',
'NlsLexicons004b.dll',
'NlsLexicons004c.dll',
'NlsLexicons004e.dll',
'NlsLexicons0414.dll',
'NlsLexicons0416.dll',
'NlsLexicons0816.dll',
'NlsLexicons081a.dll',
'NlsLexicons0c1a.dll',
'Prm0001.bin',
'Prm0005.bin',
'Prm0006.bin',
'Prm0007.bin',
'Prm0008.bin',
'Prm0009.bin',
'Prm0013.bin',
'Prm0015.bin',
'Prm0019.bin',
'Prm001f.bin'
)
if (-not (Test-Path -LiteralPath $SourceBinn -PathType Container)) { throw "Source Binn folder not found: $SourceBinn" }
if (-not (Test-Path -LiteralPath $TargetBinn -PathType Container)) { throw "Target Binn folder not found: $TargetBinn" }
if ((Split-Path -Leaf $SourceBinn) -ne 'Binn') { throw "Source path must be a Binn folder: $SourceBinn" }
if ((Split-Path -Leaf $TargetBinn) -ne 'Binn') { throw "Target path must be a Binn folder: $TargetBinn" }
$ok = 0; $skip = 0; $fail = 0
foreach ($name in $components) {
$srcFile = Join-Path $SourceBinn $name
$dstFile = Join-Path $TargetBinn $name
if (-not (Test-Path -LiteralPath $srcFile)) {
Write-Host "[FAIL] $name (source not found)" -ForegroundColor Red
$fail++
}
elseif (Test-Path -LiteralPath $dstFile) {
Write-Warning "[SKIP] $name already exists in target; not overwritten"
$skip++
}
else {
try {
Copy-Item -LiteralPath $srcFile -Destination $dstFile -ErrorAction Stop
Write-Host "[ OK ] $name" -ForegroundColor Green
$ok++
}
catch {
Write-Host "[FAIL] $name ($($_.Exception.Message))" -ForegroundColor Red
$fail++
}
}
}
Write-Host ""
Write-Host "Copied $ok, skipped $skip, failed $fail of $($components.Count)."
관리자 PowerShell 창에서 스크립트를 실행합니다. 여기서 SourceBinnBinn 버전 1 이진 파일이 포함된 SQL Server 2022(16.x) 또는 이전 인스턴스의 폴더에 대한 TargetBinn 경로이며Binn, 지속적인 버전 1 지원이 필요한 SQL Server 2025(17.x) 이상 인스턴스의 폴더에 대한 경로입니다.
.\Copy-FulltextV1Components.ps1 `
-SourceBinn 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Binn' `
-TargetBinn 'C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Binn'
환경별 버전 1 상태 및 사용 중단 타임라인
| 환경 | 상태 | 조치 필요 |
|---|---|---|
| SQL Server 2025(17.x) 이상 버전 | 버전 1 이진 파일은 SQL Server 설치에서 제거됩니다. 인플레이스 업그레이드 후 버전 1 쿼리 및 populations가 실패합니다. | 버전 2 구성 요소를 사용하여 전체 텍스트 인덱스를 다시 작성하거나 다시 만듭니다. 호환성을 위해 버전 1이 필요한 경우 지원되는 경우에만 버전 1을 사용합니다. |
| Azure SQL Managed Instance의 SQL Server 2025 업데이트 정책 | 버전 1 사용 중단은 단계적으로 진행 중입니다. 영향을 받는 고객은 사용 중단 전에 정기적인 이메일 미리 알림을 받습니다. | 인스턴스가 영향을 받기 전에 버전 2 구성 요소를 사용하여 전체 텍스트 인덱스를 다시 빌드하거나 다시 만듭니다. 즉시 업그레이드할 수 없는 경우 Microsoft 지원에 문의하세요. |
| "Always-up-to-date" 업데이트 정책을 사용하는 Azure SQL Database 및 Azure SQL Managed Instance | 버전 1 인덱스는 현재도 지원되지만 제거는 계획되어 있습니다. 새로 만들거나 다시 빌드한 인덱스는 기본적으로 버전 2를 사용하기 시작합니다. | 인벤토리 버전 1은 가동 중지 시간을 최소화하기 위해 버전 2 구성 요소를 미리 사용하여 인덱스 및 계획을 다시 작성합니다. |
Azure SQL 사용 중단 타임라인
적용 대상: Azure SQL Database 및 Azure SQL Managed Instance.
Azure SQL Database 및 Azure SQL Managed Instance 버전 1 이진 파일을 아직 제거하지 않습니다. 이러한 서비스는 기존 인덱스를 다시 빌드할 시간을 확보할 수 있도록 SQL Server 2025 업데이트 정책의 Azure SQL Managed Instance부터 단계적으로 사용 중단됩니다. 영향을 받는 고객은 사용 중단 전에 주기적인 이메일 미리 알림을 받습니다.
버전 1이 더 이상 사용되지 않으면 버전 1 인덱스에 대한 쿼리가 오류 메시지와 함께 실패합니다.
Msg 30011, Level 16, State 1, Line 37
Full-text index version 1 is not supported by this instance configuration. Rebuild or recreate the index with database scoped configuration FULLTEXT_INDEX_VERSION = 2. For more information, see https://aka.ms/fts-version-upgrade. If unable to upgrade, contact support for assistance.
크롤링 로그에서 다음 오류가 발생하여 채우기가 실패합니다.
Error: 30011, Severity: 16, State: 1.
Full-text index version 1 is not supported by this instance configuration. Rebuild or recreate the index with database scoped configuration FULLTEXT_INDEX_VERSION = 2. For more information, see https://aka.ms/fts-version-upgrade. If unable to upgrade, contact support for assistance.
Error: 30059, Severity: 16, State: 1.
A fatal error occurred during a full-text population and caused the population to be cancelled. Population type is: <population_type>; database name is <database_name> (id: <database_id>); catalog name is <catalog_name> (id: <catalog_id>); table name <table_name> (id: <table_id>). Fix the errors that are logged in the full-text crawl log. Then, resume the population. The basic Transact-SQL syntax for this is: ALTER FULLTEXT INDEX ON table_name RESUME POPULATION.