次の方法で共有


sp_table_validation (Transact-SQL)

テーブルまたはインデックス付きビューの行数またはチェックサム情報を返すか、あるいは提供された行数またはチェックサム情報を指定のテーブルまたはインデックス付きビューと比較します。 このストアド プロシージャは、パブリッシャー側でパブリケーション データベースについて、およびサブスクライバー側でサブスクリプション データベースについて実行されます。 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'
    テーブルの名前を指定します。 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 権限が必要です。

関連項目

参照

CHECKSUM (Transact-SQL)

@@ROWCOUNT (Transact-SQL)

sp_article_validation (Transact-SQL)

sp_publication_validation (Transact-SQL)

システム ストアド プロシージャ (Transact-SQL)