Partager via


Mise à niveau de la fonction de recherche en texte intégral

S’applique à : SQL Server Azure SQL Database

SQL Server met à niveau la recherche en texte intégral lors de l’installation ou quand vous joignez, restaurez ou copiez des fichiers de base de données et des catalogues de texte intégral à partir d’une version antérieure de SQL Server.

Mise à niveau d’une instance de serveur

Pour une mise à niveau sur place, une instance de SQL Server est installée côte à côte avec l'ancienne version de SQL Server, et les données sont migrées. Si l'ancienne version de SQL Server intégrait la recherche en texte intégral, une nouvelle version de cette fonctionnalité est installée automatiquement. Une installation côte à côte signifie que chacun des composants suivants existe au niveau de l'instance de SQL Server.

Analyseurs lexicaux, générateurs de formes dérivées et filtres
Chaque instance utilise désormais son propre ensemble d'analyseurs lexicaux, de générateur de formes dérivées et de filtres, au lieu de s'appuyer sur la version de système d'exploitation de ces composants. Ces composants sont également plus faciles à inscrire et à configurer au niveau de l'instance. Pour plus d’informations, consultez Configurer et gérer les analyseurs lexicaux et générateurs de formes dérivées pour la recherche et Configurer et gérer des filtres pour la recherche.

Hôte de démon de filtre
Les démons de filtre de texte intégral sont des processus qui se chargent en toute sécurité ; par ailleurs, ils gèrent l'exécution des composants extensibles externes utilisés pour un index et une requête, par exemple les analyseurs lexicaux, les générateurs de formes dérivées et les filtres, sans altérer l'intégrité du moteur de texte intégral. Une instance de serveur utilise un processus multithread pour tous les filtres multithreads et un processus monothread pour tous les filtres monothreads.

Remarque

SQL Server 2008 (10.0.x) a introduit un compte de service pour le service de lancement FDHOST (MSSQLFDLauncher). Ce service propage les informations sur le compte de services aux processus d'hôte de démon de filtre d'une instance spécifique de SQL Server. Pour plus d’informations sur la définition du compte de service, consultez Définir le compte du service du Lanceur de démon de filtre de texte intégral.

Dans SQL Server 2005 (9.x), chaque index de recherche en texte intégral réside dans un catalogue de texte intégral qui appartient à un groupe de fichiers, a un chemin d'accès physique et est traité en tant que fichier de base de données. Dans SQL Server 2008 (10.0.x) et versions ultérieures, un catalogue de texte intégral est un objet logique ou virtuel qui contient un groupe d'index de recherche en texte intégral. Par conséquent, un nouveau catalogue de texte intégral n'est pas traité en tant que fichier de base de données avec un chemin d'accès physique. Toutefois, un nouveau groupe de fichiers est créé sur le même disque pendant la mise à niveau de tout catalogue de texte intégral qui contient des fichiers de données. Cela maintient le comportement d'E/S de l'ancien disque après la mise à niveau. Tout index de recherche en texte intégral de ce catalogue est placé dans le nouveau groupe de fichiers si le chemin d'accès racine existe. Si l'ancien chemin de catalogue de texte intégral est non valide, la mise à niveau conserve l'index de recherche en texte intégral dans le même groupe de fichiers comme table de base ou, pour une table partitionnée, dans le groupe de fichiers principal.

Options de mise à niveau de texte intégral

Lors de la mise à niveau vers une instance de SQL Server, l'interface utilisateur vous permet de choisir l'une des options de mise à niveau de texte intégral suivantes.

Importer
Les catalogues de texte intégral sont importés. En général, l'importation est considérablement plus rapide que lors d'une reconstruction (rebuild). Par exemple, lorsque vous utilisez un seul processeur, l'importation s'exécute approximativement 10 fois plus vite que lors de la reconstruction. Toutefois, un catalogue de texte intégral importé n'utilise pas les nouveaux analyseurs lexicaux installés avec la dernière version de SQL Server. Pour garantir la cohérence dans les résultats de la requête, les catalogues de texte intégral doivent être reconstruits.

Remarque

Le processus de reconstruction peut s'exécuter en mode multithread, et si plus de 10 processeurs sont disponibles, la reconstruction peut s'effectuer plus vite que l'importation si vous la laissez utiliser tous les processeurs.

Si aucun catalogue de texte intégral n'est disponible, les index de recherche en texte intégral associés sont reconstruits. Cette option est disponible uniquement pour les bases de données SQL Server 2005 (9.x) .

Pour plus d'informations sur l'impact de l'importation de l'index de recherche en texte intégral, consultez « Considérations relatives au choix d'une option de mise à niveau », plus loin dans cette rubrique.

Recréation
Les catalogues de texte intégral sont reconstruits à l'aide des analyseurs lexicaux nouveaux et améliorés. La reconstruction des index peut prendre du temps, et une quantité importante de ressources en termes d'UC et de mémoire peut être requise après la mise à niveau.

Réinitialiser
Les catalogues de texte intégral sont réinitialisés. Lors de la mise à niveau depuis SQL Server 2005 (9.x), les fichiers de catalogue de texte intégral sont supprimés, mais les métadonnées pour les catalogues de texte intégral et les index de recherche en texte intégral sont conservés. Après leur mise à niveau, tous les index de recherche en texte intégral ont le suivi des modifications désactivé et aucune analyse n'est démarrée automatiquement. Le catalogue reste vide tant que vous n'avez pas procédé manuellement à une alimentation complète, au terme de la mise à niveau.

Considérations relatives au choix d’une option de mise à niveau de texte intégral

Au moment de choisir l'option de mise à niveau pour votre mise à niveau, tenez compte des éléments suivants :

  • Avez-vous besoin de cohérence dans les résultats de la requête ?

    SQL Server installe de nouveaux analyseurs lexicaux pour la recherche en texte intégral et sémantique. Les analyseurs lexicaux sont utilisés au moment de l'indexation et au moment de la requête. Si vous ne reconstruisez pas les catalogues de texte intégral, vos résultats de recherche peuvent être incohérents. Si vous exécutez une requête de texte intégral qui recherche une expression qui est divisée différemment par l'analyseur lexical dans une version précédente de SQL Server et l'analyseur lexical actuel, une ligne ou un document contenant l'expression peut ne pas être extrait. Cela est dû au fait que les expressions indexées ont été divisées à l'aide d'une logique différente de celle de la requête utilise. La solution consiste à réalimenter (reconstruire) les catalogues de texte intégral avec les nouveaux analyseurs lexicaux afin que le temps d'indexation et le comportement de cette requête soient identiques. Vous pouvez choisir l'option Reconstruire pour y parvenir, ou vous pouvez reconstruire manuellement après le choix de l'option Importer.

  • Certains index de recherche en texte intégral ont-ils été construits sur la base de colonnes clés de texte intégral de type Integer ?

    La reconstruction effectue, dans quelques cas, des optimisations internes qui améliorent le performances des requêtes de l'index de recherche en texte intégral mis à niveau. Spécifiquement, si vous avez des catalogues de texte intégral qui contiennent des index de recherche en texte intégral dont la colonne clé de texte intégral de la table de base correspond à un type de données Integer, la reconstruction permet d'obtenir une performance idéale des requêtes de texte intégral après la mise à niveau. Nous recommandons vivement que vous utilisiez l'option Reconstruire dans ce cas.

    Remarque

    Pour les index de texte intégral, nous recommandons que la colonne servant de clé de texte intégral corresponde à un type de données Integer. Pour plus d’informations, consultez Améliorer les performances des index de recherche en texte intégral.

  • Quelle est la priorité pour obtenir votre instance de serveur en ligne ?

    L'importation ou la reconstruction pendant la mise à niveau mobilise beaucoup de ressources processeur, ce qui retarde la mise à niveau et en ligne du reste de l'instance serveur. Si le fait d'avoir l'instance de serveur en ligne dès que possible est important et si vous êtes disposé à exécuter une alimentation manuelle après la mise à niveau, la réinitialisation est appropriée.

Garantie de résultats de requête cohérents après l’importation d’un index de recherche en texte intégral

Si un catalogue de texte intégral a été importé lors de la mise à niveau d’une base de données SQL Server 2005 (9.x), des discordances entre la requête et le contenu de l’index de recherche en texte intégral peuvent se produire en raison de différences dans le comportement des analyseurs lexicaux anciens et nouveaux. Dans ce cas, pour garantir une correspondance totale entre requêtes et contenu d'index de recherche en texte intégral, choisissez l'une des options suivantes :

  • reconstruisez le catalogue de texte intégral contenant l’index de recherche en texte intégral (ALTER FULLTEXT CATALOGnom_catalogue REBUILD) ;

  • publiez un FULL POPULATION sur l’index de recherche en texte intégral (ALTER FULLTEXT INDEX ON nom_table START FULL POPULATION).

Pour plus d’informations sur les analyseurs lexicaux, consultez Configurer et gérer les analyseurs lexicaux et générateurs de formes dérivées pour la recherche.

Mise à niveau des fichiers de mots parasites vers des listes de mots vides

Lorsqu'une base de données est mise à niveau à partir de SQL Server 2005 (9.x), les fichiers de mots parasites ne sont plus utilisés. Toutefois, les anciens fichiers de mots parasites sont stockés dans le FTDATA\ FTNoiseThesaurusBak dossier et vous pouvez les utiliser ultérieurement lors de la mise à jour ou de la génération des listes de mots vides correspondantes de SQL Server.

Après la mise à niveau à partir de SQL Server 2005 (9.x) :

  • Si vous n'avez jamais ajouté, modifié ou supprimé des fichiers de mots parasites de votre installation de SQL Server 2005 (9.x), la liste de mots vides système doit correspondre à vos besoins.

  • Si vos fichiers de mots parasites ont été modifiés dans SQL Server 2005 (9.x), ces changements sont perdus pendant la mise à niveau. Pour recréer ces mises à jour, vous devez recréer manuellement ces changements dans la liste de mots vides correspondante. Pour plus d’informations, consultez ALTER FULLTEXT STOPLIST (Transact-SQL).

  • Si vous ne souhaitez pas appliquer de mots vides à vos index de recherche en texte intégral (par exemple, si vous avez supprimé ou effacé vos fichiers de mots parasites dans votre installation SQL Server 2005 (9.x)), vous devez désactiver la liste de mots vides pour chaque index de recherche en texte intégral mis à niveau. Exécutez l’instruction Transact-SQL suivante (en remplaçant database par le nom de la base de données mise à niveau et table par le nom de la table) :

    Use database;   
    ALTER FULLTEXT INDEX ON table  
       SET STOPLIST OFF;  
    GO  
    

    La clause STOPLIST OFF supprime le filtrage par mot vide et déclenche une alimentation de la table, sans filtrer les mots considérés comme des mots parasites.

Sauvegarde et catalogues de texte intégral importés

Pour les catalogues de texte intégral qui sont reconstruits ou réinitialisés pendant la mise à niveau (et pour les nouveaux catalogues de texte intégral), le catalogue de texte intégral est un concept logique et ne réside pas dans un groupe de fichiers. Par conséquent, pour sauvegarder un catalogue de texte intégral, vous devez identifier tous les groupes de fichiers contenant un index de recherche en texte intégral du catalogue et les sauvegarder un par un. Pour plus d’informations, consultez Sauvegarder et restaurer des catalogues et des index de recherche en texte intégral.

Pour les catalogues de texte intégral importés à partir de SQL Server 2005 (9.x), le catalogue de texte intégral est encore un fichier de base de données dans son propre groupe de fichiers. Le processus de sauvegarde SQL Server 2005 (9.x) pour les catalogues de texte intégral s'applique encore mais le service MSFTESQL n'existe pas dans SQL Server. Pour plus d’informations sur le processus SQL Server 2005 (9.x), consultez Sauvegarde et restauration d’un catalogue de texte intégral dans la documentation en ligne de SQL Server 2005.

Migration d’index de recherche en texte intégral lors de la mise à niveau d’une base de données

Les fichiers de base de données et les catalogues de texte intégral d'une version précédente de SQL Server peuvent être mis à niveau vers une instance existante en utilisant un attachement, une restauration ou l'Assistant Copie de base de données. Les index de recherche en texte intégral de SQL Server 2005 (9.x) sont, le cas échéant, importés, réinitialisés ou reconstruits. La propriété de serveur upgrade_option détermine l’option de mise à niveau de texte intégral que l’instance de serveur utilise pendant ces mises à niveau de base de données.

Après que vous avez attaché, restauré ou copié toute base de données SQL Server 2005 (9.x) vers une instance plus récente, la base de données est immédiatement disponible et est ensuite automatiquement mise à niveau. Selon le volume de données indexé, l'importation peut prendre plusieurs heures et la reconstruction jusqu'à dix fois plus longtemps. Notez également que lorsque l'option de mise à niveau est Importer, si le catalogue de texte intégral n'est pas disponible, les index de recherche en texte intégral associés sont reconstruits.

Pour modifier le comportement de mise à niveau de texte intégral sur une instance de serveur

Considérations relatives à la restauration d’un catalogue de texte intégral SQL Server 2005 (9.x)

Une méthode de mise à niveau de données de texte intégral d’une base de données SQL Server 2005 (9.x) est de restaurer une sauvegarde de la base de données complète sur une instance de SQL Server plus récente.

En important un catalogue SQL Server 2005 (9.x), vous pouvez sauvegarder et restaurer la base de données et le fichier catalogue. Le comportement est le même que dans SQL Server 2005 (9.x) :

  • La sauvegarde de base de données complète inclut alors le catalogue de texte intégral. Pour faire référence au catalogue de texte intégral, utilisez son nom de fichier SQL Server 2005 (9.x), sysft_+nom-catalogue.

  • Si le catalogue de texte intégral est hors connexion, la sauvegarde échouera.

Pour plus d’informations sur la sauvegarde et la restauration de catalogues de texte intégral SQL Server 2005 (9.x), consultez Sauvegarde et restauration de catalogues de texte intégral et Restauration et sauvegarde de fichiers et catalogues de texte intégral dans la documentation en ligne de SQL Server 2005 (9.x).

Quand la base de données est restaurée sur une instance de SQL Server plus récente, un nouveau fichier de base de données est créé pour le catalogue de texte intégral. Le nom par défaut de ce fichier est ftrow_nom-catalogue.ndf. Par exemple, si catalog-name est cat1, le nom par défaut du fichier de base de données SQL Server serait ftrow_cat1.ndf. En revanche, si le nom par défaut est déjà utilisé dans le répertoire cible, le nouveau fichier de base de données serait nommé ftrow_nom-catalogue{GUID}.ndf, où GUID est l’identificateur global unique du nouveau fichier.

Après avoir importé les catalogues, les fichiers sys.database_files et sys.master_filesont mis à jour pour supprimer les entrées de catalogue et la colonne de chemin d’accès dans sys.fulltext_catalogs a la valeur Null.

Pour sauvegarder une base de données

Pour restaurer une sauvegarde de la base de données

Exemple

L'exemple suivant utilise la clause MOVE dans l'instruction RESTORE , afin de restaurer une base de données SQL Server 2005 (9.x) nommée ftdb1. Les fichiers catalogue, le journal et la base de données de SQL Server 2005 (9.x) sont déplacés vers les nouveaux emplacements sur l'instance de serveur SQL Server, comme suit :

  • Le fichier de base de données, ftdb1.mdf, est déplacé vers C:\Program Files\Microsoft SQL Server\MSSQL.1MSSQL13.MSSQLSERVER\MSSQL\DATA\ftdb1.mdf.

  • Le fichier journal, ftdb1_log.ldf, est déplacé vers un répertoire de journal sur votre lecteur de disque journal, lecteur_journal:\répertoire_journal\ftdb1_log.ldf.

  • Les fichiers catalogue qui correspondent au catalogue sysft_cat90 sont déplacés vers C:\temp. Après avoir importé les index de recherche en texte intégral, ceux-ci sont automatiquement placés dans un fichier de base de données, C:\ftrow_sysft_cat90.ndf, et C:\temp est supprimé.

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';  

Joindre une base de données SQL Server 2005

Dans SQL Server 2008 (10.0.x) et les versions ultérieures, un catalogue de texte intégral est un concept logique qui renvoie à un groupe d'index de recherche en texte intégral. Le catalogue de texte intégral est un objet virtuel qui n'appartient à aucun groupe de fichiers. Cependant, quand vous attachez une base de données SQL Server 2005 (9.x) qui contient des fichiers catalogue de texte intégral à une instance de serveur SQL Server plus récente, les fichiers catalogue sont attachés à partir de leur emplacement précédent avec les autres fichiers de base de données, les mêmes que dans SQL Server 2005 (9.x).

L'état de chaque catalogue de texte intégral attaché sur SQL Server est le même que lors du détachement de la base de données de SQL Server 2005 (9.x). Si le remplissage de l'index de recherche en texte intégral est interrompu par l'opération de détachement, le remplissage reprend sur SQL Server, et l'index de recherche en texte intégral devient disponible pour la recherche en texte intégral.

Si SQL Server ne parvient pas à trouver un fichier catalogue de texte intégral ou si ce dernier a été déplacé durant l'opération d'attachement sans spécification du nouvel emplacement, le comportement dépend de l'option de mise à niveau de texte intégral sélectionnée. Si l’option de mise à niveau de texte intégral a la valeur Importer ou Reconstruire, le catalogue de texte intégral attaché est reconstruit. Si l’option de mise à niveau de texte intégral a la valeur Réinitialiser, le catalogue de texte intégral attaché est réinitialisé.

Pour plus d’informations sur le détachement et l’attachement d’une base de données, consultez Attacher et détacher une base de données (SQL Server), CREATE DATABASE (SQL Server Transact-SQL), sp_attach_db et sp_detach_db (Transact-SQL).

Voir aussi

Commencer à utiliser la recherche en texte intégral
Configurer et gérer les analyseurs lexicaux et générateurs de formes dérivées pour la recherche
Configurer et gérer des filtres pour la recherche