sys.sp_flush_CT_internal_table_on_demand (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance

このストアド プロシージャを使用すると、変更追跡が有効になっているデータベース内のテーブルのサイド テーブル (change_tracking_objectid) を手動でクリーンアップできます。 TableToClean パラメーターが渡されない場合、このプロセスは、変更追跡が有効になっているデータベース内のすべてのテーブルのすべてのサイド テーブルをクリーンアップします。

Transact-SQL 構文表記規則

構文

sys.sp_flush_CT_internal_table_on_demand
    [ @TableToClean = ] 'TableToClean'
    [ , [ @DeletedRowCount = ] DeletedRowCount OUTPUT ]
[ ; ]

引数

[ @TableToClean = ] 'TableToClean'

変更追跡が有効なテーブルを手動でクリーンアップします。 バックログは、変更の追跡によって自動クリーンアップのために残されます。 すべてのサイド テーブルをクリーンアップするには null を指定できます。

[ @DeletedRowCount = ] 'DeletedRowCount' OUTPUT

@DeletedRowCount は、 bigint 型の OUTPUT パラメーターです。 このパラメーターは、プロセス中にクリーンアップされた行の合計数を返します。

リターン コードの値

0 (成功) または 1 (失敗)。

DECLARE @DeletedRowCount BIGINT;

EXEC sys.sp_flush_CT_internal_table_on_demand '[Sales].[Orders]',
    @DeletedRowCount = @DeletedRowCount OUTPUT;

PRINT CONCAT('Number of rows deleted: ', @DeletedRowCount);
GO

結果セットは次のとおりです。

Started executing query at Line 1
Cleanup Watermark = 17
Internal Change Tracking table name : change_tracking_1541580530
Total rows deleted: 0.
Number of rows deleted: 0
Total execution time: 00:00:02.949

解説

この手順は、変更の追跡が有効になっているデータベースで実行する必要があります。

ストアド プロシージャを実行すると、次のいずれかのシナリオが発生します。

  • テーブルが存在しない場合、または変更の追跡が有効になっていない場合は、適切なエラー メッセージがスローされます。

  • このストアド プロシージャは、 sys.change_tracking_tables 動的管理ビューを使用して、無効なクリーンアップ バージョンに基づく変更追跡サイド テーブルからコンテンツをクリーンアップする別の内部ストアド プロシージャを呼び出します。 実行中は、(5000 行ごとに) 削除された合計行の情報が表示されます。

このストアド プロシージャは、次の製品で使用できます。

  • SQL Server 2016 (13.x) Service Pack 1 以降のバージョン
  • Azure SQL Database と Azure SQL Managed Instance

アクセス許可

このプロシージャを実行できるのは、 sysadmin サーバー ロールまたは db_owner データベース ロールのメンバーだけです。