次の方法で共有


ALTER FULLTEXT CATALOG (Transact-SQL)

applies to:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

フルテキスト カタログのプロパティを変更するには、このステートメントを使用します。

Transact-SQL 構文規則

構文

ALTER FULLTEXT CATALOG catalog_name
{ REBUILD [ WITH ACCENT_SENSITIVITY = { ON | OFF } ]
| REORGANIZE
| AS DEFAULT
}

引数

catalog_name

変更するカタログの名前を指定します。 指定した名前のカタログが存在しない場合、SQL Serverはエラーを返し、ALTER 操作を実行しません。

REBUILD

SQL Server Database Engineはカタログ全体を再構築します。 カタログをリビルドすると、既存のカタログが削除され、その代わりに新しいカタログが作成されます。 フルテキスト インデックスの参照を持つすべてのテーブルが新しいカタログに関連付けられます。 再構築すると、データベース システム テーブル内のフルテキスト メタデータがリセットされます。

WITH ACCENT_SENSITIVITY = { ON |OFF }

変更するカタログのフルテキスト インデックス作成とクエリ処理において、アクセントを区別するかしないかを指定します。

フルテキスト カタログの現在のアクセント感度プロパティ設定を確認するには、FULLTEXTCATALOGPROPERTY関数を使用して、catalog_nameAccentSensitivityプロパティ値を指定します。

  • 関数が 1を返す場合、フルテキスト カタログはアクセントを区別します。
  • 関数が 0を返す場合、カタログはアクセントの影響を受けません。

アクセントの区別は、既定ではカタログとデータベースで同じになっています。

REORGANIZE

SQL Server Database Engineは master merge を実行します。これには、インデックス作成の過程で作成された小さいインデックスを 1 つの大きなインデックスにマージする必要があります。 フルテキスト インデックス フラグメントをマージすると、パフォーマンスが向上し、ディスクとメモリのリソースを解放できます。 フルテキスト カタログが頻繁に変更される場合は、このコマンドを定期的に使用して、フルテキスト カタログを再構成してください。

REORGANIZE また、内部インデックスとカタログ構造も最適化されます。

インデックス付きデータの量によっては、マスター マージの完了に時間がかかる場合があります。 大量のデータをマージすると、実行時間の長いトランザクションが作成され、チェックポイント中にトランザクション ログの切り捨てが遅れる可能性があります。 この場合、完全復旧モデルでは、トランザクション ログが非常に大きくなることがあります。

完全復旧モデルを使用するデータベースで大きなフルテキスト インデックスを再編成する前に、実行時間が長いトランザクションのための十分な領域をトランザクション ログに割り当てることをお勧めします。 詳細については、「 トランザクション ログ ファイルのサイズを管理するを参照してください。

デフォルトで

このカタログが既定のカタログであることを指定します。 カタログを指定せずにフルテキスト インデックスを作成すると、既定のカタログが使用されます。 既存の既定のフルテキスト カタログがある場合、このカタログ AS DEFAULT 設定すると、既存の既定値がオーバーライドされます。

アクセス許可

ALTER FULLTEXT CATALOGを使用するには、次のいずれかのアクセス許可が必要です。

  • ALTER フルテキスト カタログに対するアクセス許可
  • db_ownerまたは固定データベース ロールdb_ddladminメンバーシップ
  • sysadmin 固定サーバー ロールのメンバーシップ

ALTER FULLTEXT CATALOG ... AS DEFAULTを使用するには、フルテキスト カタログに対するALTER権限と、データベースに対するCREATE FULLTEXT CATALOG権限が必要です。

注釈

フルテキスト カタログに対して REBUILD 操作を実行すると、別のセッションで、そのカタログに属するテーブルに対して INSERTUPDATE、または DELETE 操作を実行している開いているトランザクションがある場合、再構築操作は一時停止します。 再構築操作は、その他のトランザクションがコミットまたはロールバックした後にのみ再開されます。 この状況を監視するには、 sys.dm_exec_requests および動的管理ビュー (DMV) sys.dm_exec_sessions 使用します。 ユーザー セッションとバックグラウンドリビルド セッションの間に、待機の種類が LCK_M_ISのロックが表示される場合があります。

同様に、 REORGANIZE 操作中に、コマンドが実行されているセッションに FT_MASTER_MERGE 待機の種類が表示されることがあります。 この待機の種類は、同じフルテキスト カタログ内のテーブルに対して INSERTUPDATE、または DELETE 操作を実行する実行時間の長いトランザクションが他のセッションにある場合に発生する可能性があります。 sys.dm_exec_requestsおよびsys.dm_exec_sessions DMV では、LCK_M_IX待機の種類と FT_MASTER_MERGE コマンドを使用した 1 つ以上のバックグラウンド セッションが表示されることがあります。 REORGANIZE操作は、これらのロックが解放されるまで完了しません。

次のクエリは、ブロックされたバックグラウンド セッションを返します。

SELECT r1.session_id,
       r1.blocking_session_id,
       r1.wait_type,
       r1.wait_resource,
       r1.last_wait_type,
       r1.command AS BlockedSessionCommand,
       r2.command AS BlockingSessionCommand,
       s1.login_name AS BlockedSessionLogin,
       s2.login_name AS BlockingSessionLogin,
       s1.host_name AS BlockedSessionHost,
       s2.host_name AS BlockingSessionHost,
       r1.status AS BlockedSessionStatus,
       r2.status AS BlockingSessionStatus
FROM sys.dm_exec_requests AS r1
     INNER JOIN sys.dm_exec_sessions AS s1
         ON r1.session_id = s1.session_id
     INNER JOIN sys.dm_exec_sessions AS s2
         ON r1.blocking_session_id = s2.session_id
     LEFT OUTER JOIN sys.dm_exec_requests AS r2
         ON s2.session_id = r2.session_id
WHERE r1.blocking_session_id <> 0
      AND r1.status = 'background'
ORDER BY r1.wait_time DESC;

次の例では、アクセントを区別する既定のフルテキスト カタログ AccentSensitivityftCatalog プロパティを変更します。

  1. カタログをアクセントを区別しないように変更します。

    USE AdventureWorks2025;
    GO
    
    ALTER FULLTEXT CATALOG ftCatalog
    REBUILD WITH ACCENT_SENSITIVITY = OFF;
    
  2. アクセントの感度を確認します。

    SELECT FULLTEXTCATALOGPROPERTY('ftCatalog', 'AccentSensitivity');
    

    クエリは 0を返します。つまり、カタログはアクセントの影響を受けません。