適用対象:SQL Server
Azure SQL データベース
Azure SQL Managed Instance
Azure Synapse Analytics
tablediff ユーティリティは、2 つのテーブル内のデータを比較して非収束の発生を調べる場合に使用されます。これは、レプリケーション トポロジ内の非収束に対するトラブルシューティングを行うときに便利です。 このユーティリティは、コマンド プロンプトから、またはバッチ ファイル内で使用して、次のタスクを実行することができます。
レプリケーション パブリッシャーとして機能する SQL Server のインスタンス内のソース テーブルと、レプリケーション サブスクライバーとして機能する SQL Server の 1 つ以上のインスタンスの宛先テーブルの各行を比較します。
行数とスキーマのみを比較することによる高速比較を実行します。
列レベルでの比較の実行。
Transact-SQL スクリプトを生成して、宛先サーバーの不一致を修正し、ソーステーブルと宛先テーブルを一致させます。
出力ファイルへの結果の記録、または対象データベース内にあるテーブルへの結果の記録。
注記
tablediff ユーティリティは、SQL Server レプリケーション ツールの一部です。 SQL Server 2022 (16.x) では、レプリケーション機能をインストールした後、tablediff.exeの既定の場所にC:\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 ]
}
引数
[ -? ]
サポートされているパラメーターのリストを返します。
-ソースサーバー source_server_name[\instance_name]
ソース サーバーの名前を指定します。 SQL Server の既定のインスタンスには、source_server_name を指定します。 SQL Server の名前付きインスタンスの場合は、source_server_name\instance_name を指定します。
-Sourcedatabase source_database
ソース データベースの名前を指定します。
-ソーステーブル source_table_name
調査するソース テーブルの名前を指定します。
-ソーススキーマ source_schema_name
ソース テーブルのスキーマ所有者を指定します。 既定では、テーブル所有者は dbo と見なされます。
-sourcepassword source_password
SQL Server 認証でソース サーバーに接続する場合に使用するログインのパスワードを指定します。
重要
可能である場合は、実行時にセキュリティ資格情報を指定します。 資格情報をスクリプト ファイルに含める必要がある場合は、不正なアクセスが行われないようにファイルをセキュリティで保護してください。
-ソースユーザー source_login
SQL Server 認証でソース サーバーに接続する場合に使用するログインを指定します。 source_login を省略すると、Windows 認証がソース サーバーへの接続時に使用されます。 可能な場合は、Windows 認証を使用します。
-sourcelocked
TABLOCKおよびHOLDLOCKテーブル ヒントを使用して、比較中にソース テーブルをロックします。
-デスティネーサー destination_server_name[\instance_name]
宛先サーバーの名前を指定します。 SQL Server の既定のインスタンスの場合は、destination_server_name を指定します。 SQL Server の名前付きインスタンスの <destination_server_name>\<instance_name> を指定します。
-デスティネーションデータベース subscription_database
宛先データベースの名前を指定します。
-デスティネーションテーブル destination_table
宛先テーブルの名前を指定します。
-destinationschema destination_schema_name
対象テーブルのスキーマ所有者を指定します。 既定では、テーブル所有者は dbo と見なされます。
-宛先パスワード destination_password
SQL Server 認証で対象サーバーに接続する場合に使用するログインのパスワードを指定します。
重要
可能である場合は、実行時にセキュリティ資格情報を指定します。 資格情報をスクリプト ファイルに含める必要がある場合は、不正なアクセスが行われないようにファイルをセキュリティで保護してください。
-デスティネーションユーザー destination_login
SQL Server 認証を使用して移行先サーバーに接続するために使用するログインを指定します。 destination_loginを指定しない場合、接続では Windows 認証が使用されます。 可能な場合は、Windows 認証を使用します。
-destinationlocked
TABLOCKおよびHOLDLOCKテーブル ヒントを使用して、比較中に変換先テーブルをロックします。
-b large_object_bytes
テキスト、ntext、image、varchar(max)、nvarchar(max)、varbinary(max)など、ラージ オブジェクトデータ型の列で比較するバイト数を指定します。 large_object_bytesの既定値は列のサイズです。 large_object_bytes より大きいデータは比較されません。
-bf ステートメント数
-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 再試行回数
操作が失敗した場合に、ユーティリティが再試行する回数を指定します。
-リ retry_interval
再試行間隔を指定します (秒単位)。
-strict
ソーススキーマと宛先スキーマを厳密に比較します。
-t 接続タイムアウト
ソース サーバーと対象サーバーへの接続に関する接続タイムアウト時間を設定します (秒単位)。
戻り値
| 値 | 説明 |
|---|---|
0 |
成功 |
1 |
重大なエラー |
2 |
テーブル間の差分 |
解説
SQL Server 以外のサーバーでは tablediff ユーティリティを使用できません。
sql_variant データ型列を含むテーブルはサポートされていません。
tablediff ユーティリティでは、既定により、ソース列と対象列の間で次のデータ型のマッピングがサポートされます。
| ソースのデータ型 | 変換先のデータ型 |
|---|---|
| tinyint | smallint、 int、または 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 オプションを使用します。
比較のソース テーブルには、少なくとも 1 つの主キー、ID、または ROWGUID 列が含まれている必要があります。
-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 オプションを使用するには、指定されたファイル ディレクトリの場所に対する書き込み権限を持っている必要があります。