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

La mise à niveau de recherche en texte intégral vers SQL Server 2008 est effectuée pendant l'installation et lorsque des fichiers de base de données et des catalogues de texte intégral d'une version précédente de SQL Server sont joints, sont restaurés ou sont copiés à l'aide de l'Assistant Copie de base de données.

Cette rubrique traite des aspects fondamentaux suivants de la mise à niveau de texte intégral :

  • Mise à niveau d'une instance de serveur

  • Options de mise à niveau de texte intégral

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

  • Migration d'index de texte intégral lors de la mise à niveau d'une base de données vers SQL Server 2008

  • Considérations relatives à la restauration d'un catalogue de texte intégral SQL Server 2005 vers SQL Server 2008

  • Attachement d'une base de données SQL Server 2005 à SQL Server 2008

Mise à niveau d'une instance de serveur

Pour une mise à niveau sur place, une instance de SQL Server 2008 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.

Composant

Description

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 Analyseurs lexicaux et générateurs de formes dérivées et Filtres de recherche en texte intégral.

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 tiers 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.

RemarqueRemarque
SQL Server 2008 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 configuration de ce compte de service, consultez Procédure : définir le compte de service de lancement FDHOST (MSSQLFDLauncher) pour la recherche en texte intégral (Gestionnaire de configuration SQL Server).

Dans SQL Server 2005 et les versions antérieures, chaque index de 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, un catalogue de texte intégral est un concept logique – objet virtuel – qui renvoie à un groupe d'index de 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 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 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.

Pour plus d'informations sur l'architecture de la recherche en texte intégral dans SQL Server 2008, consultez Architecture de la recherche en texte intégral.

[!REMARQUE]

Les instructions DDL Transact-SQLSQL Server 2005 qui spécifient des catalogues de texte intégral fonctionnent correctement.

Options de mise à niveau de texte intégral

Lors de la mise à niveau d'une instance de serveur vers SQL Server 2008, 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 analyseurs lexicaux nouveaux et améliorés introduits dans SQL Server 2008, ce qui fait que vous pouvez le cas échéant reconstruire vos catalogues de texte intégral au final.

    [!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.

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

  • Reconstruire
    Les catalogues de texte intégral sont reconstruits à l'aide des analyseurs lexicaux nouveaux et améliorés. La reconstruction des index peut prendre un moment, 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. Les fichiers de catalogue de texte intégral SQL Server 2005 sont supprimés, mais les métadonnées pour les catalogues de texte intégral et les index de 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 :

  • Comment est-ce que vous utilisez les analyseurs lexicaux ?

    Le service de recherche en texte intégral SQL Server 2008 inclut de nouveaux analyseurs lexicaux et générateurs de formes dérivées. Ceux-ci peuvent modifier les résultats de requêtes de texte intégral de versions précédentes pour un modèle ou scénario de texte spécifique. Par conséquent, la manière dont vous utilisez les analyseurs lexicaux est importante lors du choix d'une option de mise à niveau appropriée :

    • Si les analyseurs lexicaux de la langue de texte intégral que vous utilisez n'ont pas changé dans SQL Server 2008, ou si l'exactitude de rappel n'est pas critique pour vous, l'importation est appropriée. Ultérieurement, si vous rencontrez des problèmes de rappel, vous pouvez effectuer une mise à niveau vers les nouveaux analyseurs lexicaux en reconstruisant vos catalogues de texte intégral. Pour plus d'informations, consultez « Analyseurs lexicaux et index de texte intégral importés », plus loin dans cette section.

    • Si vous tenez à l'exactitude de rappel et que vous utilisez l'un des analyseurs lexicaux améliorés dans SQL Server 2008, la reconstruction est appropriée.

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

    La reconstruction effectue, dans quelques cas, des optimisations internes qui améliorent les performances des requêtes de l'index de texte intégral mis à niveau. Spécifiquement, si vous avez des catalogues de texte intégral qui contiennent des index de texte intégral dont la colonne de 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 dans SQL Server 2008, nous recommandons que la colonne servant de clé de texte intégral corresponde à un type de données Integer. Pour plus d'informations, consultez Paramétrage et optimisation des 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.

Utilisation de nouveaux analyseurs lexicaux après l'importation d'un index de texte intégral SQL Server 2005

Lors de l'importation d'un index de texte intégral SQL Server 2005, il est important de se rendre compte que SQL Server 2008 inclue de nouveaux analyseurs lexicaux pour beaucoup de langues qui existent dans SQL Server 2005. Seuls les analyseurs lexicaux pour l'anglais, le coréen, le thaï et le chinois (traditionnel et simplifié) restent inchangés. Pour d'autres langues, SQL Server 2008 présente une nouvelle génération d'analyseurs lexicaux, qui peuvent se comporter potentiellement légèrement différemment des analyseurs lexicaux SQL Server 2005 dans les index de texte intégral SQL Server 2005 importés.

Si un catalogue de texte intégral a été importé lorsqu'une base de données SQL Server 2005 a été mise à niveau vers SQL Server 2008, une ou plusieurs langues utilisées par les index de texte intégral dans le catalogue de texte intégral peuvent maintenant être associées aux nouveaux analyseurs lexicaux. Pour ces langues, quand une requête utilise les nouveaux analyseurs lexicaux, des discordances entre la requête et le contenu de l'index de texte intégral peuvent parfois se produire à la suite de légères 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 texte intégral, procédez à l'une des opérations suivantes :

  • reconstruisez le catalogue de texte intégral contenant l'index de texte intégral (ALTER FULLTEXT CATALOGcatalog_name REBUILD) ;

  • publiez un FULL POPULATION sur l'index de texte intégral (ALTER FULLTEXT INDEX ON table_name START FULL POPULATION).

Important

Si vos catalogues et index de texte intégral utilisent des analyseurs lexicaux inchangés, à l'instar des analyseurs lexicaux anglais, aucune incompatibilité ne peut avoir lieu. Les analyseurs lexicaux utilisés lors des requêtes seront ceux utilisés lorsque l'index a été créé lors de l'indexation et dans les futures requêtes.

Pour plus d'informations sur les analyseurs lexicaux, consultez Analyseurs lexicaux et générateurs de formes dérivées.

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

Les mots parasites SQL Server 2005 ont été remplacés par les mots vides SQL Server 2008. Lorsqu'une base de données est mise à niveau vers SQL Server 2008 à partir d'une version précédente, les fichiers de mots parasites ne sont plus utilisés dans SQL Server 2008. Toutefois, les anciens fichiers de mots parasites sont stockés dans le dossier FTDATA\ FTNoiseThesaurusBak, et vous pouvez les utiliser ultérieurement lors de la mise à jour ou de la génération des listes de mots vides SQL Server 2008 correspondantes.

Après la mise à niveau :

  • Si vous n'avez jamais ajouté, modifié ou supprimé des fichiers de mots parasites de votre installation de SQL Server 2005, 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, 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 SQL Server 2008 correspondante. Pour plus d'informations, consultez ALTER FULLTEXT STOPLIST (Transact-SQL).

  • Si vous ne souhaitez pas appliquer de mots vides à vos index de texte intégral (par exemple, si vous avez supprimé ou effacé vos fichiers de mots parasites dans votre installation SQL Server 2005 ), vous devez désactiver la liste de mots vides pour chaque index de 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 OF 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 dans SQL Server 2008, 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 Sauvegarde et restauration d'un catalogue de texte intégral SQL Server 2008.

Pour les catalogues de texte intégral importés à partir de SQL Server 2005, 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 pour les catalogues de texte intégral s'applique encore mais le service MSFTESQL n'existe pas dans SQL Server 2008. Pour plus d'informations sur le processus SQL Server 2005, consultez Sauvegarde et restauration d'un catalogue de texte intégral dans la documentation en ligne de SQL Server 2005.

[!REMARQUE]

Pour plus d'informations sur la sauvegarde et la restauration d'une base de données SQL Server 2008, consultez Sauvegarde et restauration d'un catalogue de texte intégral SQL Server 2008.

Migration d'index de texte intégral lors de la mise à niveau d'une base de données vers SQL Server 2008

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 de serveur SQL Server 2008 existante en utilisant un attachement, une restauration ou l'Assistant Copie de base de données. Les index de recherche en texte intégral SQL Server 2005 sont, le cas échéant, importés, réinitialisés ou reconstruits. Dans SQL Server 2000, les index de recherche en texte intégral sont, le cas échéant, reconstruits ou réinitialisés. 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 avoir attaché, restauré ou copié une éventuelle base de données SQL Server 2005 ou SQL Server 2000 dans SQL Server 2008, 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 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 vers SQL Server 2008

Une méthode de mise à niveau de données de texte intégral d'une base de données SQL Server 2005 vers SQL Server 2008 est de restaurer une sauvegarde de la base de données complète vers SQL Server 2008.

En important un catalogue, vous pouvez sauvegarder et restaurer la base de données et le fichier catalogue. Le comportement est identique à celui de SQL Server 2005 :

  • 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, sysft_+catalog-name.

  • 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, consultez Sauvegarde et restauration de catalogues de texte intégral et Restauration et sauvegarde de fichiers et catalogues de texte intégraldans la documentation en ligne de SQL Server 2005.

Lorsque la base de données est restaurée sur SQL Server 2008, un nouveau fichier de base de données est crée pour le catalogue de texte intégral. Le nom par défaut de ce fichier est ftrow_catalog-name.ndf. Par exemple, si nom-catalogue est cat1, le nom par défaut du fichier de base de données SQL Server 2008 serait ftrow_cat1.ndf. Mais 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_catalog-name{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_files sont mis à jour pour supprimer les entrées de catalogue et la colonne de chemin d'accès dans sys.fulltext_catalogs prend la valeur NULL.

Pour sauvegarder une base de données

Pour restaurer une sauvegarde de la base de données

[!REMARQUE]

Pour plus d'informations sur la restauration des index de texte intégral SQL Server 2008, consultez Restauration fragmentaire et index de recherche en texte intégral.

Exemple

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

  • Le fichier de base de données, ftdb1.mdf, est déplacé vers C:\Program Files\Microsoft SQL Server\MSSQL.1MSSQL10.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, log_drive:\log_directory\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 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\MSSQL10.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';

Attachement d'une base de données SQL Server 2005 à SQL Server 2008

Dans SQL Server 2008, un catalogue de texte intégral est un concept logique qui fait référence à un groupe d'index de texte intégral. Le catalogue de texte intégral est un objet virtuel qui n'appartient à aucun groupe de fichiers. Cependant, lorsque vous attachez une base de données SQL Server 2005 qui contient des fichiers catalogue de texte intégral à une instance de serveur SQL Server 2008, 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.

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

Si SQL Server 2008 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 Attachement et détachement des bases de données, CREATE DATABASE (Transact-SQL), sp_attach_db et sp_detach_db (Transact-SQL).