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