전체 텍스트 인덱스 버전 업그레이드

적용 대상:SQL ServerAzure SQL DatabaseAzure 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_indexesindex_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_dog
cat
dog
$100 $100
nn100usd
\$100
nn100\$
2026-01-09 2026-01-09
2026
nn2026
01
09
2026-01-09
dd20260109
2026
01
09

사용자 지정 모델

버전 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.