sp_table_validation (Transact-SQL)
テーブルまたはインデックス付きビューの行数またはチェックサム情報を返すか、あるいは提供された行数またはチェックサム情報を指定のテーブルまたはインデックス付きビューと比較します。このストアド プロシージャは、パブリッシャ側でパブリケーション データベースについて、およびサブスクライバ側でサブスクリプション データベースについて実行されます。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_rowcountOUTPUT
テーブル内の予想される行数を返すかどうかを指定します。expected_rowcount は int であり、既定値は NULL です。NULL の場合、実際の行数が出力パラメータとして返されます。値が提供されると、その値は実際の行数と照合され、違いがあるかどうかが識別されます。[ @expected_checksum=] expected_checksumOUTPUT
テーブルの予想されるチェックサムを返すかどうかを指定します。expected_checksum は numeric であり、既定値は NULL です。NULL の場合、実際のチェックサムが出力パラメータとして返されます。値が提供されると、その値は実際のチェックサムと照合され、違いがあるかどうかが識別されます。[ @rowcount_only=] type_of_check_requested
実行するチェックサムまたは行数の種類を指定します。type_of_check_requested は smallint であり、既定値は 1 です。0 の場合、行数と Microsoft 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 TABLE だけであれば、構造は同じではありません。2 つのテーブルの構造が同じであるかどうかはっきりしない場合は、syscolumns を調べて、各テーブル内のオフセットが同じであることを確認します。
文字モード bcp が使用されている場合、浮動小数点値によってチェックサムの違いが生じる可能性があります。パブリケーションが SQL Server 以外のサブスクライバを持つ場合がこれに相当します。これは、文字モード間で変換を実行するときの、わずかではあるが避けられない有効桁数の違いに基づきます。
権限
sp_table_validation を実行するには、検証するテーブルに対する SELECT 権限が必要です。