SQL Server 2005 からのフルテキスト検索のアップグレード

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

SQL Server 2005 からのフルテキスト検索のアップグレードに関して、このトピックでは次の点について説明します。

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

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

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

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

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

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

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

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

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

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

    注意

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

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

注意

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

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

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

  • [インポート]
    フルテキスト カタログがインポートされます。 通常、インポートの方が再構築よりもかなり高速に処理されます。 たとえば、CPU を 1 つだけ使用している場合、インポートは、再構築の約 10 倍の速さで実行されます。 ただし、インポートされたフルテキスト カタログでは、SQL Server の最新バージョンでインストールされる新しいワード ブレーカーが使用されません。 クエリ結果の一貫性を維持するためには、フルテキスト カタログを再作成する必要があります。

    注意

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

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

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

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

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

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

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

  • クエリ結果の一貫性が必要かどうか。

    SQL Server 2012 により、フルテキスト検索およびセマンティック検索に使用する新しいワード ブレーカーがインストールされます。 ワード ブレーカーは、インデックスの作成時とクエリ時の両方に使用されます。 フルテキスト カタログを再構築しない場合は、検索結果の一貫性が失われる可能性があります。 以前のバージョンの SQL Server のワード ブレーカーと現在のワード ブレーカーで区切りが異なるフレーズを検索するフルテキスト クエリを発行すると、そのフレーズを含むドキュメントまたは行が検索されない場合があります。 これはインデックスされたフレーズがクエリとは異なるロジックで区切られたためです。 この問題を解決するには、新しいワード ブレーカーを使用してフルテキスト カタログを再作成 (再構築) し、インデックス時とクエリ時の動作が同一になるようにします。 これは [再構築] オプションを選択することによって実現できます。または、[インポート] オプションを選択した後で、手動で再構築することもできます。

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

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

    注意

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

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

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

SQL Server 2005 フルテキスト インデックスのインポート後にクエリ結果の一貫性を確保する

SQL Server 2005 データベースから SQL Server 2012 へのアップグレード時にフルテキスト カタログをインポートした場合、新旧のワード ブレーカーにおける動作の違いから、クエリとフルテキスト インデックスの内容との間に不一致が生じる可能性があります。 この場合、クエリとフルテキスト インデックスの内容を確実に完全一致させるためには、次のいずれかのオプションを選択します。

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

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

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

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

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

SQL Server 2005 からのアップグレード後

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • データベース ファイル ftdb1.mdf は C:\Program Files\Microsoft SQL Server\MSSQL.1MSSQL11.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\MSSQL11.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 2012 へのアタッチ

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

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

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

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

関連項目

概念

フルテキスト検索の概要

検索用のワード ブレーカーとステミング機能の構成と管理

検索用フィルターの構成と管理