tablediff ユーティリティ

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

tablediff ユーティリティは、2 つのテーブル内のデータを比較して非収束の発生を調べる場合に使用されます。これは、レプリケーション トポロジ内の非収束に対するトラブルシューティングを行うときに便利です。 このユーティリティは、コマンド プロンプトから、またはバッチ ファイル内で使用して、次のタスクを実行することができます。

  • レプリケーション パブリッシャーとして動作する SQL Server のインスタンス内のソース テーブルと、レプリケーション サブスクライバーとして動作する 1 つ以上の SQL Server インスタンスにある対象テーブルの間で、1 行単位の比較を行う。

  • 行数とスキーマのみを比較することによる高速比較を実行します。

  • 列レベルでの比較の実行。

  • 対象サーバーでの相違点を修正し、ソース テーブルと対象テーブルを収束させる Transact-SQL スクリプトの作成。

  • 出力ファイルへの結果の記録、または対象データベース内にあるテーブルへの結果の記録。

注意

tablediff ユーティリティは、SQL Server レプリケーション ツールの一部です。 SQL Server 2022 (16.x) では、tablediff.exeC:\Program Files\Microsoft SQL Server\160\COM の既定の場所にあります (レプリケーション機能がインストールされた後)。

構文

tablediff
[ -? ] |
{
        -sourceserver source_server_name [ \instance_name ]
        -sourcedatabase source_database
        -sourcetable source_table_name
    [ -sourceschema source_schema_name ]
    [ -sourcepassword source_password ]
    [ -sourceuser source_login ]
    [ -sourcelocked ]
        -destinationserver destination_server_name [ \instance_name ]
        -destinationdatabase subscription_database
        -destinationtable destination_table
    [ -destinationschema destination_schema_name ]
    [ -destinationpassword destination_password ]
    [ -destinationuser destination_login ]
    [ -destinationlocked ]
    [ -b large_object_bytes ]
    [ -bf number_of_statements ]
    [ -c ]
    [ -dt ]
    [ -et table_name ]
    [ -f [ file_name ] ]
    [ -o output_file_name ]
    [ -q ]
    [ -rc number_of_retries ]
    [ -ri retry_interval ]
    [ -strict ]
    [ -t connection_timeouts ]
}

引数

[ -? ]

サポートされているパラメーターのリストを返します。

-sourceserver source_server_name[ \instance_name ]

ソース サーバーの名前を指定します。 の既定のインスタンスの場合は、 source_server_name SQL Serverを指定します。 の名前付きインスタンスの\source_server_name instance_name SQL Serverを指定します。

-sourcedatabase source_database

ソース データベースの名前を指定します。

-sourcetable source_table_name

調査するソース テーブルの名前を指定します。

-sourceschema source_schema_name

ソース テーブルのスキーマ所有者を指定します。 既定では、テーブル所有者は dbo と見なされます。

-sourcepassword source_password

SQL Server 認証でソース サーバーに接続する場合に使用するログインのパスワードを指定します。

重要

可能である場合は、実行時にセキュリティ資格情報を指定します。 資格情報をスクリプト ファイルに格納する必要がある場合は、不正アクセスを防ぐためにファイルを保護してください。

-sourceuser source_login

SQL Server 認証でソース サーバーに接続する場合に使用するログインを指定します。 source_login を省略すると、Windows 認証がソース サーバーへの接続時に使用されます。 可能な場合は、Windows 認証を使用します。

-sourcelocked

比較中は、TABLOCK および HOLDLOCK テーブル ヒントを使用して、ソース テーブルがロックされます。

-destinationserver destination_server_name[\instance_name]

宛先サーバーの名前を指定します。 の既定のインスタンスの場合は、 destination_server_name SQL Serverを指定します。 の名前付きインスタンスの\destination_server_name instance_name SQL Serverを指定します。

-destinationdatabase subscription_database

宛先データベースの名前を指定します。

-destinationtable destination_table

宛先テーブルの名前を指定します。

-destinationschema destination_schema_name

対象テーブルのスキーマ所有者を指定します。 既定では、テーブル所有者は dbo と見なされます。

-destinationpassword destination_password

SQL Server 認証で対象サーバーに接続する場合に使用するログインのパスワードを指定します。

重要

可能である場合は、実行時にセキュリティ資格情報を指定します。 資格情報をスクリプト ファイルに格納する必要がある場合は、不正アクセスを防ぐためにファイルを保護してください。

-destinationuser destination_login

SQL Server 認証で対象サーバーに接続する場合に使用するログインを指定します。 destination_login を省略すると、Windows 認証がサーバーへの接続時に使用されます。 可能な場合は、Windows 認証を使用します。

-destinationlocked

比較中は、TABLOCK および HOLDLOCK テーブル ヒントを使用して、対象テーブルがロックされます。

-b large_object_bytes

ラージ オブジェクト データ型の列に対して比較するバイト数を指定します。列の型は、textntextimagevarchar(max)nvarchar(max)varbinary(max) です。 large_object_bytes の既定値は、列のサイズです。 large_object_bytes より大きいデータは比較されません。

-bf number_of_statements

-f オプションを使用する場合に、現在の Transact-SQL スクリプト ファイルに書き込む Transact-SQL ステートメントの数を指定します。 Transact-SQL ステートメントの数が number_of_statementsで指定した値を超えると、新しい Transact-SQL スクリプト ファイルが作成されます。

-c

列レベルでの違いを比較します。

-dt

テーブルが既に存在している場合は、 table_nameで指定された結果テーブルを削除します。

-et table_name

作成する結果テーブルの名前を指定します。 このテーブルが既に存在する場合は、-DT を使用する必要があります。使用しない場合、この処理は失敗します。

-f [ file_name ]

対象サーバーにあるテーブルを、ソース サーバーにあるテーブルと収束させる Transact-SQL スクリプトを生成します。 作成される Transact-SQL スクリプト ファイルの名前とパスを指定できます (省略可能)。 file_name を指定しない場合は、ユーティリティが実行されているディレクトリに Transact-SQL スクリプト ファイルが作成されます。

-o output_file_name

出力ファイルの完全な名前およびフル パスを指定します。

-Q

行数とスキーマのみを比較することによる高速比較を実行します。

-rc number_of_retries

操作が失敗した場合に、ユーティリティが再試行する回数を指定します。

-ri retry_interval

再試行間隔を指定します (秒単位)。

-strict

ソース スキーマと対象スキーマを厳密に比較することを指定します。

-t connection_timeouts

ソース サーバーと対象サーバーへの接続に関する接続タイムアウト時間を設定します (秒単位)。

戻り値

説明
0 Success
1 重大なエラー
2 テーブルの差分

解説

tablediff ユーティリティは、SQL Server 以外のサーバーでは使用できません。

sql_variant データ型列を含むテーブルはサポートされていません。

tablediff ユーティリティでは、既定により、ソース列と対象列の間で次のデータ型のマッピングがサポートされます。

ソースのデータ型 対象のデータ型
tinyint smallintint、または bigint
smallint int または bigint
int bigint
timestamp varbinary
varchar(max) text
nvarchar(max) ntext
varbinary(max) image
text varchar(max)
ntext nvarchar(max)
image varbinary(max)

これらのマッピングを行わず、厳密な検証を行う場合は、-strict オプションを使用します。

比較のソース テーブルには、主キー列、ID 列、または ROWGUID 列が少なくとも 1 つ必要です。 -strict オプションを使用する場合は、対象テーブルにも主キー列、ID 列、または ROWGUID 列が必要です。

対象テーブルを収束させるため作成される Transact-SQL スクリプトには、次のデータ型は含められません。

  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • timestamp
  • xml
  • text
  • ntext
  • image

アクセス許可

テーブルを比較するには、比較するテーブル オブジェクトに対する SELECT ALL 権限が必要です。

-et オプションを使用するには、db_owner 固定データベース ロールのメンバーであることが必要です。または、少なくともサブスクリプション データベースでの CREATE TABLE 権限、および対象サーバーにある対象所有者スキーマに対する ALTER 権限を持っている必要があります。

-dt オプションを使用するには、db_owner 固定データベース ロールのメンバーであることが必要です。または、少なくとも対象サーバーにある対象所有者スキーマに対する ALTER 権限を持っている必要があります。

-o または -f オプションを使用するには、指定されたファイル ディレクトリの場所に対する書き込み権限を持っている必要があります。

関連項目