適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
この記事では、SQL Server 2025 (17.x) 以降のバージョンでのフルテキスト インデックスバージョンの変更について説明します。 動作の変更、必要な移行手順、および新しいコンポーネント バイナリについて説明します。
SQL Server 2025 でのフルテキスト インデックスバージョンの変更
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) では、次の 3 つの新しい言語でのフルテキスト インデックス作成のサポートが追加されました。
- フィンランド語 (LCID 1035)
- ハンガリー語 (LCID 1038)
- エストニア語 (LCID 1061)
新しいドキュメントの種類のサポート
SQL Server 2025 (17.x) では、既定で次のドキュメント拡張機能のインデックス作成のサポートが追加されています。
| Filter | 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) 以降のバージョンにアップグレードした後、またはバージョン 1 のインデックスをAzure SQL DatabaseおよびAzure SQL Managed Instanceで非推奨として準備する場合は、次のいずれかの方法を使用します。
バージョン 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;
Note
カタログ再構築操作では、すべてのフルテキスト インデックスが再構築されます。 インデックスのビルド順序を制御したり、リソース要件を減らしたりする場合は、フルテキスト インデックスを個別に 削除して再作成 します。
バージョン 1 のコンポーネントを使用し続ける
このオプションは、SQL Serverインストールでファイルを管理できるSQL Serverインスタンスにのみ使用します。
Important
SQL Server on Linux では、バージョン 1 は非推奨です。 SQL Server 2025 (17.x) 以降のバージョンでは、 mssql-server-fts パッケージにはバージョン 1 バイナリは含まれません。
mssql-server-ftsパッケージとmssql-server パッケージの一致しないバージョンをインストールしようとするとサポートされていないため、フルテキスト エラーが発生します。
アプリケーションの互換性のためにバージョン 1 を維持する必要がある場合は、 FULLTEXT_INDEX_VERSION = 1 を設定して、再構築中に意図しないバージョン 2 へのアップグレードを回避します。
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 ウィンドウでスクリプトを実行します。SourceBinnはバージョン 1 バイナリを含む SQL Server 2022 (16.x) 以前のインスタンスのBinn フォルダーへのパスであり、TargetBinnはバージョン 1 のサポートを継続する必要がある SQL Server 2025 (17.x) 以降のインスタンスのBinn フォルダーへのパスです。
.\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 の状態と非推奨のタイムライン (環境別)
| 環境 | Status | 必要なアクション |
|---|---|---|
| SQL Server 2025 (17.x) 以降のバージョン | バージョン 1 のバイナリは、SQL Serverインストールから削除されます。 バージョン 1 のクエリとポピュレーションは、インプレース アップグレード後に失敗します。 | バージョン 2 のコンポーネントを使用してフルテキスト インデックスを再構築または再作成します。 互換性のためにバージョン 1 が必要な場合は、サポートされている場合にのみバージョン 1 を使用してください。 |
| SQL Server 2025 更新ポリシーにおける Azure SQL Managed Instance | バージョン 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.