次の方法で共有


sp_table_validation (Transact-SQL)

適用対象: SQL サーバー

テーブルまたはインデックス付きビューの行数またはチェックサム情報を返すか、あるいは提供された行数またはチェックサム情報を指定のテーブルまたはインデックス付きビューと比較します。 このストアド プロシージャは、パブリッシャー側のパブリケーション データベースとサブスクリプション データベースのサブスクライバー側で実行されます。

Note

sp_table_validation は Oracle パブリッシャーではサポートされていません。

Transact-SQL 構文表記規則

構文

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'

テーブルの名前。 tablesysname で、既定値はありません。

[ @expected_rowcount = ] expected_rowcount OUTPUT

テーブル内の予想される行数を返すかどうかを指定します。 @expected_rowcountint で、既定値は NULL です。 NULL の場合、実際の行数は出力パラメーターとして返されます。 値が提供されると、その値は実際の行数と照合され、違いがあるかどうかが識別されます。

[ @expected_checksum = ] expected_checksum OUTPUT

テーブルの予想されるチェックサムを返すかどうかを指定します。 @expected_checksumnumeric で、既定値は NULL です。 NULL の場合、実際のチェックサムは出力パラメーターとして返されます。 値が指定されている場合、その値は実際のチェックサムに対してチェックされ、相違点が特定されます。

[ @rowcount_only = ] type_of_check_requested

実行するチェックサムまたは行数の種類を指定します。 @rowcount_onlysmallint で、既定値は 1 です。

0場合は、行数と SQL Server 7.0 互換チェックサムを実行します。

1場合は、行数チェックのみを実行します。

2場合は、行数とバイナリ チェックサムを実行します。

[ @owner = ] 'owner'

テーブルの所有者の名前。 @ownersysname で、既定値は NULL です。

[ @full_or_fast = ] full_or_fast

行数の計算に使用するメソッド。 @full_or_fasttinyint で、既定値は 2 で、これらの値のいずれかを指定できます。

Value 説明
0 COUNT(*) を使用してフル カウントします。
1 sysindexes.rowsからの高速カウントを実行します。 sysindexes内の行のカウントは、実際のテーブル内の行をカウントするよりもはるかに高速です。 ただし、 sysindexes は遅延更新されるため、行数が正確でない可能性があります。
2 (既定) 最初に高速カウントを試み、条件高速カウントを行います。 高速メソッドが違いを示す場合は、完全なメソッドに戻ります。 expected_rowcountが NULL で、ストアド プロシージャが値の取得に使用されている場合は、常に完全なCOUNT(*)が使用されます。

[ @shutdown_agent = ] shutdown_agent

ディストリビューション エージェントがsp_table_validationを実行している場合は、検証の完了直後にディストリビューション エージェントをシャットダウンするかどうかを指定します。 @shutdown_agentbit で、既定値は 0 です。 0場合、レプリケーション エージェントはシャットダウンしません。 1場合、エラー 20578 が発生し、レプリケーション エージェントがシャットダウンするように通知されます。 sp_table_validationがユーザーによって直接実行される場合、このパラメーターは無視されます。

[ @table_name = ] 'table_name'

出力メッセージに使用されるビューのテーブル名。 table_namesysname で、既定値は @table です。

[ @column_list = ] 'column_list'

チェックサム関数で使用する必要がある列の一覧。 column_listnvarchar(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 つのテーブルの構造が同じであることが分からなければ、 syscolumns を調べて 各テーブルのオフセットが同じであることを確認します。

浮動小数点値は、文字モード bcp を使用した場合にチェックサムの違いを生成する可能性があります。これは、パブリケーションに SQL Server 以外のサブスクライバーがある場合です。 これは、文字モード間で変換を実行するときの、わずかではあるが避けられない有効桁数の違いに基づきます。

アクセス許可

sp_table_validationを実行するには、検証対象のテーブルに対する SELECT 権限が必要です。