Atualização da versão do índice de texto completo

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

Este artigo descreve a alteração da versão do índice de texto completo no SQL Server 2025 (17.x) e versões posteriores. Ele aborda alterações de comportamento, etapas de migração necessárias e novos binários de componente.

Alterações na versão do índice de texto completo no SQL Server 2025

SQL Server 2025 (17.x) remove o separador de palavras herdado, o lematizador e os binários de filtro da instalação do SQL Server. Esses componentes são recriados com um conjunto de ferramentas moderno e oferecem suporte expandido para mais idiomas e tipos de documentos. Os componentes instalados com SQL Server 2025 (17.x) são chamados de versão 2. Os componentes instalados com SQL Server 2022 (16.x) e versões anteriores são chamados de versão 1.

Após uma atualização no local, os índices de texto completo existentes têm index_version = 1 em sys.fulltext_indexes. Os índices recém-criados usam a versão 2 e os novos componentes, a menos que você especifique o contrário por meio da configuração no escopo do banco de dados FULLTEXT_INDEX_VERSION.

Alterações nos componentes da versão 2

Os componentes da versão 2 adicionam suporte a idiomas e tipos de documento, usam um novo modelo de personalização e podem retornar resultados de tokens diferentes dos componentes da versão 1.

Suporte para novos idiomas

O SQL Server 2025 (17.x) adiciona suporte para indexação de texto completo em três novos idiomas:

  • Finlandês (LCID 1035)
  • Húngaro (LCID 1038)
  • Estoniano (LCID 1061)

Suporte para novos tipos de documento

O SQL Server 2025 (17.x) adiciona suporte para indexar, por padrão, as seguintes extensões de documento.

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

Resultados inesperados

Novos componentes no SQL Server 2025 (17.x) podem retornar resultados inesperados para aplicativos. Por exemplo, considere o separador de palavras inglês (LCID 1033):

Prazo Resultados com separador de palavras anterior Resultados com novo separador de palavras
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

Modelo de personalização

Os índices de texto completo da versão 2 não leem mais os manipuladores de componentes do registro Windows. Você controla a personalização por meio de um arquivo JSON específico da instância. Para obter mais informações, consulte Exibir ou alterar filtros registrados e separadores de palavras.

Opções de atualização e migração

Como o SQL Server 2025 (17.x) remove todos os binários da versão 1, as consultas de pesquisa de texto completo e os preenchimentos que usam índices da versão 1 falham após uma atualização local. Para obter mais informações, consulte Alterações significativas nos recursos do Mecanismo de Banco de Dados no SQL Server 2025.

Use uma das abordagens a seguir após a atualização para SQL Server 2025 (17.x) ou versões posteriores ou ao preparar índices da versão 1 para substituição em Banco de Dados SQL do Azure e Instância Gerenciada de SQL do Azure.

Localizar índices da versão 1

Execute a consulta a seguir em cada banco de dados que usa Pesquisa de Texto Completo para encontrar índices que ainda usam componentes da versão 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;

Recompilar índices existentes com componentes da versão 2

Recompile os índices de texto completo existentes para usar componentes da versão 2. Verifique se FULLTEXT_INDEX_VERSION está definido como 2 e, em seguida, reconstrua os catálogos de texto completo.

SELECT *
FROM sys.database_scoped_configurations
WHERE [name] = 'FULLTEXT_INDEX_VERSION';
ALTER FULLTEXT CATALOG [FtCatalog] REBUILD;

Note

Uma operação de recompilação de catálogo recria todos os índices de texto completo. Se você quiser controlar a ordem de criação do índice ou reduzir os requisitos de recursos, exclua e recrie os índices de texto completo individualmente.

Continuar usando componentes da versão 1

Use esta opção apenas para instâncias do SQL Server em que você pode gerenciar arquivos na instalação do SQL Server.

Importante

A versão 1 está obsoleta para o SQL Server no Linux. No SQL Server 2025 (17.x) e versões posteriores, o mssql-server-fts pacote não inclui binários da versão 1. A tentativa de instalar versões incompatíveis dos pacotes mssql-server-fts e mssql-server não é suportada e resulta em falhas completas no texto.

Se você precisar permanecer na versão 1 para compatibilidade do aplicativo, defina FULLTEXT_INDEX_VERSION = 1 para evitar uma atualização não intencional para a versão 2 durante a recompilação.

ALTER DATABASE SCOPED CONFIGURATION
    SET FULLTEXT_INDEX_VERSION = 1;

Em seguida, copie o separador de palavras herdado, o lematizador e os binários de filtro da pasta de Binn uma instância mais antiga para a pasta da instância de Binn destino. Consulte Filtros e separadores de palavras na Pesquisa de Texto Completo do SQL Server para saber quais DLLs e bibliotecas dependentes precisam ser copiadas por idioma ou tipo de documento.

Para copiar em massa o conjunto completo de binários da versão 1, copie o script a seguir para um arquivo chamado 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)."

Execute o script em uma janela do PowerShell de administrador, onde SourceBinn está o caminho para a Binn pasta de um SQL Server 2022 (16.x) ou instância anterior que contém binários da versão 1 e TargetBinn é o caminho para a Binn pasta de uma instância SQL Server 2025 (17.x) ou posterior que precisa de suporte contínuo à versão 1.

.\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'

Status da versão 1 e linha do tempo de substituição por ambiente

Ambiente Status Ação necessária
SQL Server 2025 (17.x) e versões posteriores Os binários da versão 1 são removidos da instalação do SQL Server. As consultas e populações da versão 1 falham após a atualização in-loco. Recompile ou recrie índices de texto completo com componentes da versão 2. Se você precisar da versão 1 para compatibilidade, use a versão 1 somente quando houver suporte.
Instância Gerenciada de SQL do Azure na política de atualização do SQL Server 2025 A descontinuação da versão 1 está sendo implementada gradualmente. Os clientes afetados recebem lembretes periódicos por e-mail antes da descontinuação. Recompile ou recrie índices de texto completo com componentes da versão 2 antes que sua instância seja afetada. Se não for possível atualizar imediatamente, entre em contato com Microsoft suporte.
Banco de Dados SQL do Azure e Instância Gerenciada de SQL do Azure na política de atualização "Always-up-to-date" Os índices da versão 1 ainda têm suporte hoje, mas a remoção está planejada. Os índices recém-criados ou recriados passarão a usar a versão 2 por padrão. A versão 1 do inventário cria índices e recria planos antecipadamente com componentes da versão 2 para minimizar o tempo de inatividade.

Cronograma de descontinuação do SQL do Azure

Aplica-se a: Banco de Dados SQL do Azure e Instância Gerenciada de SQL do Azure

Banco de Dados SQL do Azure e Instância Gerenciada de SQL do Azure ainda não removem binários da versão 1. Essas ofertas passam por uma descontinuação gradual para dar tempo de recriar os índices existentes, a começar pelo Instância Gerenciada de SQL do Azure com a política de atualização do SQL Server 2025. Os clientes afetados recebem lembretes periódicos por e-mail antes da descontinuação.

Depois que a versão 1 for preterida, as consultas nos índices da versão 1 falharão com a mensagem de erro:

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.

Além disso, as populações apresentam os seguintes erros no log de rastreamento:

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.