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

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

Este artigo descreve a alteração da versão do índice em texto completo no SQL Server 2025 (17.x) e versões posteriores. Abrange alterações de comportamento, passos de migração obrigatórios e novos binários de componentes.

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

O SQL Server 2025 (17.x) remove os binários legados de word breaker, stemmer e filter da instalação do SQL Server. Estes componentes são reconstruídos com um conjunto de ferramentas moderno e oferecem suporte alargado para mais linguagens e tipos de documentos. Os componentes instalados com o SQL Server 2025 (17.x) são chamados de versão 2. Os componentes instalados com o 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 especifique o contrário usando a configuração FULLTEXT_INDEX_VERSION com âmbito de base de dados.

Alterações de componentes na versão 2

Os componentes da versão 2 adicionam suporte a linguagem e tipos de documentos, utilizam um novo modelo de personalização e podem devolver resultados de tokenização diferentes dos componentes da versão 1.

Suporte para novas línguas

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

  • Finlandês (LCID 1035)
  • Húngaro (LCID 1038)
  • Estónio (LCID 1061)

Suporte para novos tipos de documentos

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

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 devolver resultados inesperados às aplicações. Por exemplo, considere o quebrador de palavras em inglês (LCID 1033):

Termo Resultados com o divisor de palavras anterior Resultados com novo divisor 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 já não leem os manipuladores de componentes do registo do Windows. Controlas a personalização através de um ficheiro JSON específico para cada 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, consultas em texto completo e populações que usam índices da versão 1 falham após uma atualização no local. Para mais informações, consulte Alterações significativas às funcionalidades do Database Engine no SQL Server 2025.

Use uma das seguintes abordagens após atualizar para o SQL Server 2025 (17.x) ou versões posteriores, ou ao preparar índices da versão 1 para descontinuação no Base de Dados SQL do Azure e no Azure SQL Managed Instance.

Encontrar índices da versão 1

Execute a seguinte consulta em cada base de dados que utilize a Pesquisa de Texto Integral para localizar índices que ainda utilizam 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;

Reconstruir índices existentes com componentes da versão 2

Reconstruir índices de texto completo existentes para usar componentes da versão 2. Verifica que FULLTEXT_INDEX_VERSION está definido como 2, e depois reconstrói os catálogos em texto completo.

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

Note

Uma operação de reconstrução de catálogo reconstrói todos os índices em texto completo. Se quiseres controlar a ordem da construção do índice, ou reduzir os requisitos de recursos, elimina e recria os índices em texto completo individualmente.

Continuar a usar componentes da versão 1

Use esta opção apenas para instâncias do SQL Server onde possa gerir ficheiros na instalação do SQL Server.

Importante

A versão 1 está obsoleta para 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. Tentar instalar versões incompatíveis dos pacotes mssql-server-fts e mssql-server não é suportado e resulta em falhas completas.

Se precisares de manter a versão 1 para compatibilidade com a aplicação, define FULLTEXT_INDEX_VERSION = 1 para evitar uma atualização não intencional da versão 2 durante a reconstrução.

ALTER DATABASE SCOPED CONFIGURATION
    SET FULLTEXT_INDEX_VERSION = 1;

De seguida, copie o word breaker legado, stemmer e filtre binários da pasta de Binn uma instância antiga para a pasta da Binn instância de destino. Consulte Filtros e separadores de palavras na Pesquisa de Texto Completo do SQL Server para obter uma referência sobre quais DLLs e bibliotecas dependentes têm de ser copiadas para cada idioma ou tipo de documento.

Para copiar em massa o conjunto completo de binários da versão 1, copie o script seguinte para um ficheiro 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 numa janela PowerShell de administrador, onde SourceBinn está o caminho para a Binn pasta de uma instância SQL Server 2022 (16.x) ou anterior contendo 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 necessita de suporte contínuo da 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'

Estado da versão 1 e cronologia de descontinuaçã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 no local. Reconstrua ou recrie índices de texto integral com componentes da versão 2. Se precisares da versão 1 para compatibilidade, usa a versão 1 apenas onde for suportada.
Azure SQL Managed Instance na política de atualização do SQL Server 2025 A descontinuação da versão 1 está a ser implementada de forma faseada. Os clientes afetados recebem lembretes periódicos por correio eletrónico antes da descontinuação. Reconstrua ou recrie índices de texto completo com componentes da versão 2 antes de a sua instância ser afetada. Se não puder atualizar imediatamente, contacte o suporte da Microsoft.
Base de Dados SQL do Azure e Azure SQL Managed Instance na política de atualização "Sempre atualizada" Os índices da versão 1 ainda são suportados atualmente, mas a remoção está planeada. Os índices recém-criados ou reconstruídos passarão, por predefinição, a utilizar a versão 2. O inventário versão 1 indexa e planeia reconstruções com componentes da versão 2 antecipadamente 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 SQL do Azure

O Base de Dados SQL do Azure e o Azure SQL Managed Instance ainda não removem os binários da versão 1. Estas ofertas sofrem uma descontinuação faseada para permitir tempo para reconstruir índices existentes, começando pelo Azure SQL Managed Instance na política de atualização do SQL Server 2025. Os clientes afetados recebem lembretes periódicos por email antes da depreciação.

Após a descontinuação da versão 1, as consultas nos índices da versão 1 falham 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.

E as populações falham com os seguintes erros no crawl log:

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.