フルテキスト検索のアップグレード

フルテキスト検索の SQL Server 2008 へのアップグレードは、セットアップ時のほか、以前のバージョンの SQL Server のデータベース ファイルとフルテキスト カタログのアタッチ時、復元時、またはデータベース コピー ウィザードによるコピー時に行われます。

このトピックでは、フルテキスト アップグレードの次の側面について説明します。

  • サーバー インスタンスのアップグレード

  • フルテキスト アップグレード オプション

  • フルテキスト アップグレード オプションの選択に関する注意点

  • データベースを SQL Server 2008 にアップグレードする際のフルテキスト インデックスの移行

  • SQL Server 2005 のフルテキスト カタログを SQL Server 2008 に復元する際の注意点

  • SQL Server 2005 データベースの SQL Server 2008 へのアタッチ

サーバー インスタンスのアップグレード

インプレース アップグレードでは、SQL Server 2008 のインスタンスが SQL Server の旧バージョンとサイド バイ サイドでセットアップされ、データが移行されます。旧バージョンの SQL Server にフルテキスト検索がインストールされている場合、新しいバージョンのフルテキスト検索が自動的にインストールされます。サイド バイ サイド インストールとは、SQL Server のインスタンスごとに次のコンポーネントが存在することを意味します。

コンポーネント

説明

ワード ブレーカ、ステミング機能、フィルタ

各インスタンスは、オペレーティング システムのバージョンと関係なく、固有のワード ブレーカ、ステミング機能、フィルタのセットを使用するようになりました。これらのコンポーネントは、インスタンス レベルで簡単に登録し、構成できます。詳細については、「ワード ブレーカとステミング機能」および「フルテキスト検索フィルタ」を参照してください。

フィルタ デーモン ホスト

フルテキスト フィルタ デーモン ホストは、インデックスとクエリに使用するサードパーティの拡張コンポーネント (ワード ブレーカ、ステミング機能、フィルタなど) を、Full-Text Engine の整合性を損なわずに安全に読み込み、駆動するプロセスです。サーバー インスタンスでは、マルチスレッド フィルタに対してはすべてマルチスレッド処理が使用され、シングル スレッド フィルタに対してはすべてシングル スレッド処理が使用されます。

注意注意
SQL Server 2008 では、FDHOST ランチャー サービス (MSSQLFDLauncher) のサービス アカウントが導入されます。このサービスにより、SQL Server の特定インスタンスのフィルタ デーモン ホスト プロセスに対してサービス アカウント情報が反映されます。サービス アカウントの設定の詳細については、「フルテキスト検索の FDHOST ランチャー (MSSQLFDLauncher) サービス アカウントを設定する方法 (SQL Server 構成マネージャ)」を参照してください。

SQL Server 2005 以前のバージョンでは、各フルテキスト インデックスは、ファイル グループに属するフルテキスト カタログに存在し、物理パスを持ち、データベース ファイルとして扱われます。SQL Server 2008 では、フルテキスト カタログは、フルテキスト インデックスのグループを指す論理的概念 (仮想オブジェクト) です。したがって、新しいフルテキスト カタログは、物理パスを持つデータベース ファイルとしては扱われません。ただし、データ ファイルを含むフルテキスト カタログのアップグレード時に、新しいファイル グループが同じディスク上に作成されます。これにより、アップグレード後も以前のディスク I/O 動作が維持されます。ルート パスが存在する場合、そのカタログのフルテキスト インデックスは、すべて新しいファイル グループに配置されます。前のフルテキスト カタログのパスが無効の場合、フルテキスト インデックスは、ベース テーブルと同じファイル グループで保持されるか、パーティション テーブルの場合にはプライマリ ファイル グループで保持されます。

SQL Server 2008 のフルテキスト検索のアーキテクチャの詳細については、「フルテキスト検索のアーキテクチャ」を参照してください。

注意注意

フルテキスト カタログを指定する SQL Server 2005 の Transact-SQL DDL ステートメントは、正しく動作します。

フルテキスト アップグレード オプション

サーバー インスタンスを SQL Server 2008 にアップグレードする場合、次のいずれかのフルテキスト アップグレード オプションをユーザー インターフェイスで選択できます。

  • [インポート]
    フルテキスト カタログがインポートされます。通常、インポートの方が再構築よりもかなり高速に処理されます。たとえば、CPU を 1 つだけ使用している場合、インポートは、再構築の約 10 倍の速さで実行されます。ただし、インポートされたフルテキスト カタログでは、SQL Server 2008 で導入された新しい拡張機能であるワード ブレーカが使用されません。そのため、最終的にはフルテキスト カタログの再構築が必要になることがあります。

    注意注意

    再構築はマルチスレッド モードで実行できます。10 を超える CPU が使用可能な場合に、再構築でそれらの CPU をすべて使用できるようにすると、再構築の方がインポートよりも高速に実行されることがあります。

    フルテキスト カタログを使用できない場合は、関連付けられたフルテキスト インデックスが再構築されます。このオプションは SQL Server 2005 データベースでのみ使用できます。

    フルテキスト インデックスのインポートによる影響については、後の「フルテキスト アップグレード オプションの選択に関する注意点」を参照してください。

  • [再構築]
    フルテキスト カタログは、導入された新しい拡張機能であるワード ブレーカを使用して再構築されます。インデックスの再構築には時間がかかり、アップグレード後にかなりの量の CPU とメモリが必要になる可能性があります。

  • [リセット]
    フルテキスト カタログがリセットされます。SQL Server 2005 のフルテキスト カタログ ファイルは削除されますが、フルテキスト カタログのメタデータおよびフルテキスト インデックスは保持されます。アップグレード後、すべてのフルテキスト インデックスで変更の追跡は無効化されており、クロールは自動的には開始されません。アップグレードの完了後、手動で完全作成を実行するまで、カタログは空のままになります。

フルテキスト アップグレード オプションの選択に関する注意点

アップグレードのためにアップグレード オプションを選択する際は、次の点を考慮してください。

  • ワード ブレーカをどのように使用するか。

    SQL Server 2008 フルテキスト検索サービスには、新しいワード ブレーカとステミング機能が含まれています。これにより、フルテキスト クエリの結果が、特定のテキストのパターンやシナリオで以前のリリースとは変わってくることがあります。そのため、ワード ブレーカをどのように使用するかが、適切なアップグレード オプションを選択する際に重要となります。

    • 使用するフルテキスト言語のワード ブレーカが SQL Server 2008 で変更されていない場合、または再呼び出しの精度が重要でない場合は、インポートが適切です。後で、再呼び出しに関する問題があった場合には、フルテキスト カタログを再構築するだけで、新しいワード ブレーカにアップグレードできます。詳細については、後述するワード ブレーカとインポートされたフルテキスト インデックスに関する説明を参照してください。

    • 再呼び出しの精度が重要であり、SQL Server 2008 で強化されているワード ブレーカのいずれかを使用する場合は、再構築が適切です。

  • 整数型のフルテキスト キー列に基づいて構築されているフルテキスト インデックスがあるかどうか。

    再構築では内部最適化処理が実行されます。これにより、アップグレードされたフルテキスト インデックスのクエリ パフォーマンスが向上することがあります。具体的には、ベース テーブルのフルテキスト キー列が整数データ型であるフルテキスト インデックスを含むフルテキスト カタログがある場合、再構築によって、アップグレード後のフルテキスト クエリのパフォーマンスが理想的なものになります。この場合は、[再構築] オプションを使用することを強くお勧めします。

    注意注意

    SQL Server 2008 のフルテキスト インデックスでは、フルテキスト キーとして機能する列を整数データ型にすることをお勧めします。詳細については、「フルテキスト インデックスのパフォーマンスのチューニングと最適化」を参照してください。

  • サーバー インスタンスをオンラインにする場合に何を優先するか。

    アップグレード時のインポートまたは再構築では CPU リソースを大量に消費するので、その他のサーバー インスタンスがアップグレードされてオンラインになるのが遅れます。できるだけ早くサーバー インスタンスをオンラインにすることが重要であり、アップグレード後に手動作成を実行してもよい場合は、[リセット] が最適です。

SQL Server 2005 のフルテキスト インデックスのインポート後に新しいワード ブレーカを使用する

SQL Server 2005 のフルテキスト インデックスをインポートする際は、SQL Server 2005 に存在する言語の多くに対して、SQL Server 2008 では新しいワード ブレーカが含まれている点に注意してください。変更がないのは、英語、韓国語、タイ語、中国語 (すべての形式) のワード ブレーカだけです。その他の言語に対しては、SQL Server 2008 で新しい世代のワード ブレーカが導入されています。このワード ブレーカは、インポートされた SQL Server 2005 フルテキスト インデックスの SQL Server 2005 ワード ブレーカとは少し動作が異なる場合もあります。

SQL Server 2005 データベースの SQL Server 2008 へのアップグレード時にフルテキスト カタログをインポートした場合、フルテキスト カタログのフルテキスト インデックスで使用される 1 つまたは複数の言語が、新しいワード ブレーカに関連付けられる可能性があります。これらの言語では、新しいワード ブレーカがクエリで使用された場合、新旧のワード ブレーカのわずかに異なる動作が原因となって、クエリとフルテキスト インデックスの内容に不一致が生じる可能性があります。この場合、クエリとフルテキスト インデックスの内容を確実に完全一致させるためには、次のいずれかを実行します。

  • フルテキスト インデックスを含むフルテキスト カタログを再構築します (ALTER FULLTEXT CATALOGcatalog_name REBUILD)。

  • フルテキスト インデックスに FULL POPULATION を実行します (ALTER FULLTEXT INDEX ON table_name START FULL POPULATION)。

重要な注意事項重要

フルテキスト カタログとインデックスで使用されるワード ブレーカに変更がない場合 (英語のワード ブレーカだけが使用される場合など) は、不一致が生じることはありません。クエリ時に使用されるワード ブレーカは、インデックス作成時に使用され、以後のクエリ時に使用されるものと同じです。

ワード ブレーカの詳細については、「ワード ブレーカとステミング機能」を参照してください。

ノイズ ワード ファイルからストップ リストへのアップグレード

SQL Server 2005 のノイズ ワードは、SQL Server 2008 のストップ ワードになりました。データベースが以前のリリースから SQL Server 2008 にアップグレードされると、ノイズ ワード ファイルは使用されなくなります。ただし、古いノイズ ワード ファイルは FTDATA\ FTNoiseThesaurusBak フォルダに保存され、後で更新する際、または対応する SQL Server 2008 ストップ リストを作成する際に使用できます。

アップグレード後は、次のようになります。

  • SQL Server 2005 のインストール時のノイズ ワード ファイルを追加、変更、または削除しなかった場合は、システム ストップ リストでニーズが満たされます。

  • SQL Server 2005 でノイズ ワード ファイルが変更された場合は、アップグレード時にその変更が失われます。このような更新を再作成するには、対応する SQL Server 2008 のストップ リストで、これらの変更を手動で再作成する必要があります。詳細については、「ALTER FULLTEXT STOPLIST (Transact-SQL)」を参照してください。

  • フルテキスト インデックスにストップ ワードを適用しない場合 (たとえば、SQL Server 2005 のインストールでノイズ ワード ファイルを削除または消去した場合) は、アップグレードされたフルテキスト インデックスごとに、ストップ リストを無効にする必要があります。次の Transact-SQL ステートメントを実行します (database をアップグレードされたデータベースの名前に置き換え、table をテーブル名に置き換えます)。

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

    STOPLIST OFF 句は、ストップ ワードのフィルタ処理を削除し、テーブル作成のトリガとなります。このとき、ノイズと見なされたワードはフィルタ処理されません。

バックアップとインポートされたフルテキスト カタログ

アップグレード時に再構築またはリセットされたフルテキスト カタログ (および新しいフルテキスト カタログ) は論理的概念であり、ファイル グループ内には存在しません。そのため、SQL Server 2008 でフルテキスト カタログをバックアップするには、カタログのフルテキスト インデックスが含まれるファイル グループをすべて特定し、1 つずつバックアップする必要があります。詳細については、「SQL Server 2008 フルテキスト カタログのバックアップと復元」を参照してください。

SQL Server 2005 からインポートされたフルテキスト カタログは、元のファイル グループ内のデータベース ファイルのままです。SQL Server 2005 におけるフルテキスト カタログのバックアップ プロセスが引き続き適用されます。ただし、SQL Server 2008 には MSFTESQL サービスが存在しません。SQL Server 2005 におけるプロセスの詳細については、SQL Server 2005 オンライン ブックの「フルテキスト カタログのバックアップと復元」を参照してください。

注意注意

SQL Server 2008 データベースのバックアップと復元の詳細については、「SQL Server 2008 フルテキスト カタログのバックアップと復元」を参照してください。

データベースを SQL Server 2008 にアップグレードする際のフルテキスト インデックスの移行

以前のバージョンの SQL Server のデータベース ファイルおよびフルテキスト カタログは、アタッチ、復元、またはデータベース コピー ウィザードを使用して、既存の SQL Server 2008 サーバー インスタンスにアップグレードできます。SQL Server 2005 のフルテキスト インデックスがある場合は、インポート、リセット、または再構築されます。SQL Server 2000 のフルテキスト インデックスがある場合は、再構築またはリセットされます。upgrade_option サーバー プロパティは、これらのデータベース アップグレード時にサーバー インスタンスで使用されるフルテキスト アップグレード オプションを制御します。

SQL Server 2005 または SQL Server 2000 の任意のデータベースを SQL Server 2008 にアタッチ、復元、またはコピーした後は、データベースが直ちに使用可能となり、自動的にアップグレードされます。インデックスを作成するデータ量によって、インポートには数時間、再構築には最大でその 10 倍の時間がかかることがあります。なお、アップグレード オプションがインポートに設定されており、フルテキスト カタログが使用できない場合は、関連付けられたフルテキスト インデックスが再構築されます。

サーバー インスタンスでフルテキスト アップグレード動作を変更するには

SQL Server 2005 のフルテキスト カタログを SQL Server 2008 に復元する際の注意点

SQL Server 2005 データベースのフルテキスト データを SQL Server 2008 にアップグレードするには、データベースの完全バックアップを SQL Server 2008 に復元する方法があります。

カタログのインポート中に、データベースとカタログ ファイルをバックアップおよび復元できます。次に示すように、動作は SQL Server 2005 と同じです。

  • データベースの完全バックアップには、フルテキスト カタログが含まれます。フルテキスト カタログを参照するには、その SQL Server 2005 ファイル名 sysft_+catalog-name を使用します。

  • フルテキスト カタログがオフラインの場合、バックアップは失敗します。

SQL Server 2005 フルテキスト カタログのバックアップと復元の詳細については、SQL Server 2005 オンライン ブックの「フルテキスト カタログのバックアップと復元」および「ファイルのバックアップと復元およびフルテキスト カタログ」を参照してください。

データベースを SQL Server 2008 に復元すると、フルテキスト カタログ用の新しいデータベース ファイルが作成されます。このファイルの既定の名前は、ftrow_catalog-name.ndf です。たとえば、catalog-name が cat1 の場合、SQL Server 2008 データベース ファイルの既定の名前は ftrow_cat1.ndf となります。ただし、作成先のディレクトリでこの既定の名前が既に使用されている場合は、新しいデータベース ファイルの名前は ftrow_catalog-name{GUID}.ndf となります。GUID は、新しいファイルのグローバル一意識別子です。

カタログのインポート後、sys.database_filessys.master_file が更新されてカタログ エントリが削除され、sys.fulltext_catalogspath 列が NULL に設定されます。

データベースをバックアップするには

データベースのバックアップを復元するには

注意注意

SQL Server 2008 フルテキスト インデックスの復元の詳細については、「段階的な部分復元とフルテキスト インデックス」を参照してください。

次の例では、RESTORE ステートメントの MOVE 句を使用して、ftdb1 という SQL Server 2005 データベースを復元する方法を示しています。SQL Server 2005 のデータベース ファイル、ログ ファイル、およびカタログ ファイルは、SQL Server 2008 サーバー インスタンス上の新しい場所に、次のように移動されます。

  • データベース ファイル ftdb1.mdf は、C:\Program Files\Microsoft SQL Server\MSSQL.1MSSQL10.MSSQLSERVER\MSSQL\DATA\ftdb1.mdf に移動されます。

  • ログ ファイル ftdb1_log.ldf は、ログ ディスク ドライブ上のログ ディレクトリ log_drive:\log_directory\ftdb1_log.ldf に移動されます。

  • sysft_cat90 カタログに対応するカタログ ファイルは、C:\temp に移動されます。フルテキスト インデックスは、インポートされた後、データベース ファイル C:\ftrow_sysft_cat90.ndf 内に自動的に格納されます。C:\temp は削除されます。

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

SQL Server 2005 データベースの SQL Server 2008 へのアタッチ

SQL Server 2008 のフルテキスト カタログは、フルテキスト インデックスのグループを指す論理的概念です。フルテキスト カタログは、ファイル グループに属さない仮想オブジェクトです。しかし、フルテキスト カタログ ファイルを含む SQL Server 2005 データベースを SQL Server 2008 サーバー インスタンスにアタッチする場合、カタログ ファイルは SQL Server 2005 と同様に他のデータベース ファイルと一緒に以前の場所からアタッチされます。

SQL Server 2008 にアタッチされた各フルテキスト カタログの状態は、データベースが SQL Server 2005 からデタッチされたときと同じです。フルテキスト インデックスの作成がデタッチ操作により中断されていた場合、SQL Server 2008 でその作成が再開され、このフルテキスト インデックスがフルテキスト検索に使用できるようになります。

SQL Server 2008 がフルテキスト カタログ ファイルを見つけられない場合、またはアタッチ操作時に新しい場所を指定せずにフルテキスト ファイルが移動された場合、選択したフルテキスト アップグレード オプションによって動作が異なります。フルテキスト アップグレード オプションが [インポート] または [再構築] の場合、アタッチされたフルテキスト カタログは再構築されます。フルテキスト アップグレード オプションが [リセット] の場合、アタッチされたフルテキスト カタログはリセットされます。

データベースのデタッチとアタッチの詳細については、「データベースのデタッチとアタッチ」、「CREATE DATABASE (Transact-SQL)」、「sp_attach_db」、および「sp_detach_db (Transact-SQL)」を参照してください。