Atualizar Pesquisa de Texto Completo (Pesquisa do SQL Server)

Aplica-se a:SQL Server

O SQL Server atualiza a pesquisa de texto completo durante a instalação ou quando você anexa, restaura ou copia arquivos de banco de dados e catálogos de texto completo do SQL Server 2005 (9.x) e versões anteriores.

Atualizar uma instância do servidor

Para uma atualização local, uma instância do SQL Server é instalada lado a lado com a versão anterior do SQL Server, e os dados são migrados. Se a pesquisa de texto completo estava instalada na versão antiga do SQL Server, uma versão nova da pesquisa de texto completo será instalada automaticamente. A instalação lado a lado significa que cada um dos componentes a seguir existe no nível de instância do SQL Server.

Separadores de palavras, lematizadores e filtros

Agora cada instância usa seu próprio conjunto de separadores de palavras, lematizadores e filtros, em vez de utilizar a versão do sistema operacional desses componentes. Esses componentes também são mais fáceis de registrar e configurar por instância. Para mais informações, consulte Configurar e gerenciar separadores de palavras e lematizadores e Configurar e gerenciar filtros.

Host do daemon de filtragem

Os hosts do daemon de filtro de texto completo são processos que carregam e orientam com segurança os componentes externos extensíveis usados para índice e consulta, como separadores de palavras, lematizadores e filtros, sem comprometer a integridade do Mecanismo de Texto Completo. Uma instância de servidor usa um processo multi-threaded para todos os filtros multi-threaded e um processo single-threaded para todos os filtros single-threaded.

O serviço FDHOST Launcher (MSSQLFDLauncher) propaga as informações da conta de serviço para os processos host do daemon de filtro de uma instância específica do Mecanismo de Banco de Dados. Para obter informações sobre como definir a conta de serviço, consulte Definir a conta de serviço para o iniciador do daemon de filtro de texto completo.

Compatibilidade de atualização do SQL Server 2005

Um catálogo de texto completo é um objeto lógico ou virtual que contém um grupo de índices de texto completo. Portanto, um novo catálogo de texto completo não é tratado como um arquivo de banco de dados com um caminho físico. No entanto, se você atualizar do SQL Server 2005 (9.x), um novo grupo de arquivos é criado no mesmo disco para qualquer catálogo de texto completo que contenha arquivos de dados.

Este procedimento mantém o comportamento de E/S do disco antigo após a atualização. Qualquer índice de texto completo desse catálogo será colocado no novo grupo de arquivos se existir o caminho raiz. Se o caminho do antigo catálogo de texto completo for inválido, a atualização manterá o índice de texto completo no mesmo grupo de arquivos que a tabela base ou, no caso de uma tabela particionada, no grupo de arquivos primário.

Opções de atualização de texto completo

Quando você atualiza uma instância do SQL Server, a interface do usuário permite escolher uma das seguintes opções de atualização em texto completo. Essas opções estão disponíveis apenas para bancos de dados SQL Server 2005 (9.x).

Import

Os catálogos de texto completo são importados. A importação costuma ser consideravelmente mais rápida do que a recompilação. Por exemplo, com apenas um núcleo de CPU, a importação roda cerca de 10 vezes mais rápido que a reconstrução. No entanto, um catálogo de texto completo importado não usa os novos separadores de palavras instalados com a versão mais recente do SQL Server. Para garantir a consistência nos resultados da consulta, os catálogos de texto completo precisam ser recompilados.

Observação

O Rebuild pode rodar no modo multithread, e se mais de 10 núcleos de CPU estiverem disponíveis, o rebuild pode rodar mais rápido que importar se você permitir que o rebuild use todos os núcleos.

Se um catálogo de texto completo não estiver disponível, os índices de texto completo associados serão recriados.

Para informações sobre o efeito da importação de um índice em texto completo, veja Considerações para escolher uma opção de atualização em texto completo mais adiante neste artigo.

Rebuild

Catálogos de texto completo são reconstruídos usando os separadores de palavras da versão atual. A recompilação de índices pode demorar um pouco, e uma quantidade significativa de memória e CPU pode ser necessária após a atualização.

Reiniciar

Os catálogos de texto completo são reinicializados. Quando você atualiza do SQL Server 2005 (9.x), os arquivos de catálogo em texto completo são removidos, mas os metadados para catálogos e índices em texto completo são mantidos. Após a atualização, todos os índices de texto completo são desabilitados para controle de alterações e os rastreamentos não são iniciados automaticamente. O catálogo permanecerá vazio até você executar uma população completa manualmente, depois que a atualização for concluída.

Considerações sobre como escolher uma opção de atualização de texto completo

Ao escolher a opção de upgrade, considere o seguinte:

  • Você precisa de consistência nos resultados da consulta?

    O Mecanismo de Banco de Dados instala novos separadores de palavras para uso pelo Full-Text e pela Busca Semântica. Os separadores de palavras são usados na indexação e na consulta. Se você não recompilar os catálogos de texto completo, os resultados da pesquisa poderão ser inconsistentes. Se você executar uma consulta de texto completo que busque uma frase segmentada de maneira diferente pelo separador de palavras em uma versão anterior do Mecanismo de Banco de Dados e na versão atual, talvez um documento ou uma linha que contenha a frase não seja recuperado. Isso ocorre porque as frases indexadas foram quebradas usando uma lógica diferente da usada pela consulta. A solução é preencher novamente (recompilar) os catálogos de texto completo com os novos separadores de palavras de forma que os comportamentos de tempo de indexação e de consulta sejam idênticos. Você pode escolher a opção Reconstruir para realizar isso, ou pode reconstruir manualmente após escolher a opção Importar .

  • Algum índice de texto completo foi compilado em colunas de chave de texto completo integer?

    A recompilação faz otimizações internas que, em alguns casos, melhoram o desempenho de consultas do índice de texto completo atualizado. Especificamente, se você tiver catálogos de texto completo que contenham índices de texto completo em que a coluna de chave de texto completo da tabela base seja do tipo de dados inteiro, a recriação proporcionará o desempenho ideal das consultas de texto completo após a atualização. Nesse caso, você deve usar a opção Reconstruir .

    Observação

    Para índices de texto completo, a coluna que serve como chave de texto completo deve ser um tipo de dado inteiro. Para mais informações, veja Melhorar o desempenho dos índices em texto completo.

  • Qual é a prioridade para colocar a instância do servidor em operação?

    A importação ou a recompilação durante a atualização usa muitos recursos da CPU, o que faz com que o restante da instância do servidor demore para ser atualizado e ficar online. Se colocar a instância do servidor online o mais rápido possível é importante, e se você deseja executar uma população manual depois da atualização, a opção Redefinir é adequada.

Assegurar resultados de consulta consistentes após importar um índice de texto completo

Se um catálogo em texto completo for importado ao atualizar um banco de dados do SQL Server 2005 (9.x), podem ocorrer incompatibilidades entre a consulta e o conteúdo do índice em texto completo devido a diferenças no comportamento dos quebradores de palavras antigos e novos. Nesse caso, para garantir compatibilidade total entre as consultas e o conteúdo do índice de texto completo, escolha uma das opções a seguir:

  • Recompile o catálogo de texto completo que contém o índice de texto completo com ALTER FULLTEXT CATALOG:

    ALTER FULLTEXT CATALOG <catalog_name> REBUILD;
    
  • Emita a FULL POPULATION no índice de texto completo com ALTER FULLTEXT INDEX:

    ALTER FULLTEXT INDEX ON <table_name> START FULL POPULATION;
    

Para obter mais informações sobre separadores de palavras, consulte Configurar e gerenciar separadores de palavras e lematizadores para pesquisa.

Atualizar arquivos de palavra de ruído para listas de palavras irrelevantes (stoplist)

Quando um banco de dados é atualizado do SQL Server 2005 (9.x), os arquivos de palavras irrelevantes não são mais usados. No entanto, os antigos arquivos de palavras de ruído ficam armazenados na pasta FTDATA\FTNoiseThesaurusBak, e você poderá usá-los posteriormente quando atualizar ou criar as listas de palavras irrelevantes do SQL Server.

Após atualizar o SQL Server 2005 (9.x):

  • Se você nunca adicionou, modificou ou excluiu arquivos de palavras de ruído da sua instalação do SQL Server 2005 (9.x), a lista de palavras irrelevantes do sistema deve atender às suas necessidades.

  • Se os arquivos da palavra de ruído foram modificados no SQL Server 2005 (9.x), essas modificações serão perdidas durante a atualização. Para recriar essas atualizações, recrie manualmente essas modificações na lista de palavras irrelevantes correspondente. Para obter mais informações, consulte ALTER FULLTEXT STOPLIST.

  • Caso não deseje aplicar palavras irrelevantes aos índices de texto completo (por exemplo, se você excluiu ou apagou os arquivos de palavras irrelevantes da sua instalação do SQL Server 2005 (9.x)), é necessário desativar a lista de palavras irrelevantes para cada índice de texto completo atualizado. Execute a seguinte instrução Transact-SQL (substituindo database pelo nome do banco de dados atualizado e table pelo nome da tabela):

    USE [database];
    GO
    
    ALTER FULLTEXT INDEX ON [table]
    SET STOPLIST OFF;
    GO
    

    A cláusula STOPLIST OFF remove a filtragem de palavras irrelevantes e aciona a população da tabela, sem filtrar nenhuma palavra considerada ruído.

Backup e catálogos de texto completo importados

Para catálogos em texto completo que são reconstruídos ou reiniciados durante a atualização (e para novos catálogos em texto completo), o catálogo em texto completo é um conceito lógico e não reside em um grupo de arquivos. Portanto, para fazer backup de um catálogo de texto completo, é necessário identificar cada grupo de arquivos que contém um índice de texto completo do catálogo e fazer backup de cada um deles. Para obter mais informações, consulte Fazer backup e restaurar índices e catálogos de texto completo.

Nos catálogos de texto completo importados do SQL Server 2005 (9.x), o catálogo de texto completo ainda é um arquivo de banco de dados em seu próprio grupo de arquivos. O processo de backup do SQL Server 2005 (9.x) para catálogos de texto completo ainda se aplica, exceto que o serviço MSFTESQL não existe no SQL Server. Para obter informações sobre o processo do SQL Server 2005 (9.x), veja Fazer backup e restaurar catálogos de texto completo nos Manuais Online SQL Server 2005.

Migrar índices de texto completo ao atualizar um banco de dados

Os arquivos de banco de dados e catálogos de texto completo de uma versão anterior do SQL Server podem ser atualizados para uma instância existente por meio de anexação, restauração ou do Assistente para Copiar Banco de Dados. Índices de texto completo do SQL Server 2005 (9.x), se houver, serão importados, restaurados ou recompilados. A upgrade_option propriedade do servidor especifica qual opção de atualização de texto completo a instância do servidor usa durante essas atualizações de banco de dados.

Após anexar, restaurar ou copiar qualquer banco de dados do SQL Server 2005 (9.x) para uma instância mais recente, o banco de dados fica disponível imediatamente e é automaticamente atualizado. Dependendo da quantidade de dados a ser indexada, a importação poderá levar várias horas e a recompilação poderá ser até dez vezes mais demorada. Quando a opção de atualização está definida para importar, se um catálogo de texto completo não estiver disponível, os índices de texto completo associados serão recriados.

Alterar o comportamento de atualização de texto completo em uma instância de servidor

Considerações para restaurar um catálogo de texto completo do SQL Server 2005 (9.x)

Um método para atualizar dados em texto completo de um banco de dados do SQL Server 2005 (9.x) é restaurar um backup completo do banco de dados em uma instância mais recente do SQL Server.

Ao importar um catálogo de texto completo do SQL Server 2005 (9.x), é possível fazer backup e restaurar o banco de dados e o arquivo de catálogo. É o mesmo comportamento encontrado no SQL Server 2005 (9.x):

  • O backup completo do banco de dados inclui o catálogo de texto completo. Para consultar o catálogo de texto completo, use o nome de arquivo do SQL Server 2005 (9.x), sysft_+catalog-name.

  • Se o catálogo de texto completo estiver offline, o backup falhará.

Para obter mais informações sobre como fazer backup e restaurar catálogos de texto completo do SQL Server 2005 (9.x), consulte Backup e restauração de catálogos de texto completo e índices e Backup e restauração de arquivos e catálogos de texto completo nos Manuais Online do SQL Server 2005 (9.x).

Quando o banco de dados é restaurado em uma instância mais recente do SQL Server, um novo arquivo de banco de dados é criado para o catálogo de texto completo. O nome padrão desse arquivo é ftrow_catalog-name.ndf. Por exemplo, se o seu catalog-name for cat1, o nome padrão do arquivo de banco de dados do SQL Server será ftrow_cat1.ndf. Mas, se o nome padrão já estiver em uso no diretório de destino, o novo arquivo de banco de dados seria nomeado ftrow_nome-do-catálogo{GUID}.ndf, em que GUID é o identificador globalmente exclusivo do novo arquivo.

Depois que os catálogos são importados, sys.database_files e sys.master_files são atualizados para remover as entradas do catálogo e a coluna path em sys.fulltext_catalogs é definida como NULL.

Fazer o backup de um banco de dados

Restaurar um backup de banco de dados

Exemplo

O exemplo a seguir usa a MOVE cláusula na RESTORE instrução para restaurar um banco de dados do SQL Server 2005 (9.x) chamado ftdb1. O banco de dados SQL Server 2005 (9.x), o log e os arquivos de catálogo são movidos para novos locais da instância de servidor do SQL Server, desta forma:

  • O arquivo de banco de dados, ftdb1.mdf, é movido para C:\Program Files\Microsoft SQL Server\MSSQL.1MSSQL13.MSSQLSERVER\MSSQL\DATA\ftdb1.mdf.

  • O arquivo de log, ftdb1_log.ldf, é movido para um diretório de log na unidade de disco de log, log_drive:\log_directory\ftdb1_log.ldf.

  • Os arquivos de catálogo que correspondem ao catálogo sysft_cat90 são movidos para C:\temp. Após a importação dos índices em texto completo, eles são automaticamente colocados em um arquivo de banco de dados, C:\ftrow_sysft_cat90.ndf, e C:\temp serão excluídos.

RESTORE DATABASE [ftdb1] FROM DISK = N'C:\temp\ftdb1.bak'
    WITH FILE = 1,
    MOVE N'ftdb1' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\ftdb1.mdf',
    MOVE N'ftdb1_log' TO N'log_drive:\log_directory\ftdb1_log.ldf',
    MOVE N'sysft_cat90' TO N'C:\temp';

Anexar um banco de dados do SQL Server 2005

No SQL Server 2008 (10.0.x) e em versões posteriores, o catálogo de texto completo é um conceito lógico que se refere a um grupo de índices de texto completo. O catálogo de texto completo é um objeto virtual que não pertence a nenhum grupo de arquivos. Porém, quando você anexa um banco de dados do SQL Server 2005 (9.x) que contém arquivos de catálogo de texto completo a uma instância de servidor do SQL Server mais nova, os arquivos de catálogo são anexados de seus locais anteriores junto com os outros arquivos de banco de dados, assim como ocorre no SQL Server 2005 (9.x).

O estado de cada catálogo de texto completo anexado no SQL Server é o mesmo de quando o banco de dados foi desanexado do SQL Server 2005 (9.x). Se uma população de índice de texto completo for suspensa pela operação de desanexação, ela será retomada no SQL Server, e o índice de texto completo ficará disponível para pesquisa de texto completo.

Se o SQL Server não conseguir encontrar um arquivo de catálogo de texto completo ou se o arquivo de texto completo tiver sido movido durante a operação de anexação sem especificar um novo local, o comportamento dependerá da opção de atualização de texto completo selecionada. Se a opção de atualização de texto completo for Importar ou Recriar, o catálogo de texto completo anexado será recriado. Se a opção de atualização de texto completo for Redefinir, o catálogo de texto completo anexado será redefinido.

Para mais informações sobre como desanexar e anexar um banco de dados, veja Separar e anexar banco de dados, CREATE DATABASE, sp_attach_db e sp_detach_db.