sp_table_validation (Transact-SQL)
適用対象: SQL Server
テーブルまたはインデックス付きビューの行数またはチェックサム情報を返すか、あるいは提供された行数またはチェックサム情報を指定のテーブルまたはインデックス付きビューと比較します。 このストアド プロシージャは、パブリッシャー側のパブリケーション データベースとサブスクリプション データベースのサブスクライバー側で実行されます。
Note
sp_table_validation
は Oracle パブリッシャーではサポートされていません。
構文
sp_table_validation [ @table = ] 'table'
[ , [ @expected_rowcount = ] type_of_check_requested OUTPUT ]
[ , [ @expected_checksum = ] expected_checksum OUTPUT ]
[ , [ @rowcount_only = ] rowcount_only ]
[ , [ @owner = ] 'owner' ]
[ , [ @full_or_fast = ] full_or_fast ]
[ , [ @shutdown_agent = ] shutdown_agent ]
[ , [ @table_name = ] 'table_name' ]
[ , [ @column_list = ] 'column_list' ]
[ ; ]
引数
[ @table = ] 'table'
テーブルの名前。 table は sysname で、既定値はありません。
[ @expected_rowcount = ] expected_rowcount OUTPUT
テーブル内の予想される行数を返すかどうかを指定します。 @expected_rowcount は int で、既定値は NULL
です。 NULL
場合、実際の行数が出力パラメーターとして返されます。 値が提供されると、その値は実際の行数と照合され、違いがあるかどうかが識別されます。
[ @expected_checksum = ] expected_checksum OUTPUT
テーブルの予想されるチェックサムを返すかどうかを指定します。 @expected_checksum は numeric で、既定値は NULL
です。 NULL
場合、実際のチェックサムは出力パラメーターとして返されます。 値が指定されている場合、その値は実際のチェックサムに対してチェックされ、相違点が特定されます。
[ @rowcount_only = ] type_of_check_requested
実行するチェックサムまたは行数の種類を指定します。 @rowcount_only は smallint で、既定値は 1
です。
0
場合は、行数と SQL Server 7.0 互換チェックサムを実行します。
1
場合は、行数チェックのみを実行します。
2
場合は、行数とバイナリ チェックサムを実行します。
[ @owner = ] 'owner'
テーブルの所有者の名前。 @owner は sysname で、既定値は NULL
です。
[ @full_or_fast = ] full_or_fast
行数の計算に使用するメソッド。 @full_or_fast は tinyint で、既定値は 2
で、これらの値のいずれかを指定できます。
値 | 説明 |
---|---|
0 |
COUNT(*) を使用してフル カウントします。 |
1 |
sysindexes.rows からの高速カウントを実行します。 sysindexes 内の行のカウントは、実際のテーブル内の行をカウントするよりもはるかに高速です。 ただし、 sysindexes は遅延更新されるため、行数が正確でない可能性があります。 |
2 (既定) |
最初に高速カウントを試み、条件高速カウントを行います。 高速メソッドが違いを示す場合は、完全なメソッドに戻ります。 expected_rowcountがNULL され、ストアド プロシージャが値の取得に使用されている場合は、常に完全なCOUNT(*) が使用されます。 |
[ @shutdown_agent = ] shutdown_agent
ディストリビューション エージェントがsp_table_validation
を実行している場合は、検証の完了直後にディストリビューション エージェントをシャットダウンするかどうかを指定します。 @shutdown_agent は bit で、既定値は 0
です。 0
場合、レプリケーション エージェントはシャットダウンしません。 1
場合、エラー 20578 が発生し、レプリケーション エージェントがシャットダウンするように通知されます。 sp_table_validation
がユーザーによって直接実行される場合、このパラメーターは無視されます。
[ @table_name = ] 'table_name'
出力メッセージに使用されるビューのテーブル名。 table_name は sysname で、既定値は @table です。
[ @column_list = ] 'column_list'
チェックサム関数で使用する必要がある列の一覧。 column_list は nvarchar(4000) で、既定値は NULL
です。 マージ アーティクルを検証する場合は、計算列とタイムスタンプ列を除く列リストを指定します。
リターン コードの値
チェックサム検証を実行し、予想されるチェックサムがテーブル内のチェックサムと等しい場合、 sp_table_validation
は、テーブルがチェックサム検証に合格したことを示すメッセージを返します。 それ以外の場合は、テーブルが同期されていない可能性があることを示すメッセージを返し、予想される行数と実際の行数の違いを報告します。
行数の検証を実行し、予想される行数がテーブル内の数と等しい場合、 sp_table_validation
は、テーブルが行数の検証に合格したことを示すメッセージを返します。 それ以外の場合は、テーブルが同期されていない可能性があることを示すメッセージを返し、予想される行数と実際の行数の違いを報告します。
解説
sp_table_validation
は、すべての種類のレプリケーションで使用されます。 sp_table_validation
は Oracle パブリッシャーではサポートされていません。
チェックサムは、ページ上の行イメージ全体で 32 ビットの循環冗長チェック (CRC) を計算します。 列は選択的にチェックされないため、テーブルのビューまたは垂直パーティションでは操作できません。 また、チェックサムは、(仕様により) text および image 列の内容をスキップします。
チェックサムを実行する場合、テーブルの構造は 2 つのサーバー間で同一である必要があります。つまり、テーブルには、同じ順序、同じデータ型と長さ、および同じ NULL
/NOT NULL
条件で同じ列が存在する必要があります。 たとえば、パブリッシャーが CREATE TABLE
を行った場合、列を追加する ALTER TABLE
が、サブスクライバーに適用されるスクリプトは単純な CREATE
テーブルであるため、構造 同じ 。 2 つのテーブルの構造が同じかどうかがわからない場合は、 sys.syscolumns を調べて 各テーブルのオフセットが同じであることを確認します。
浮動小数点値は、文字モード bcp を使用した場合にチェックサムの違いを生成する可能性があります。これは、パブリケーションに SQL Server 以外のサブスクライバーがある場合です。 これは、文字モード間で変換を実行するときの、わずかではあるが避けられない有効桁数の違いに基づきます。
アクセス許可
sp_table_validation
を実行するには、検証対象のテーブルに対する SELECT 権限が必要です。