tablediff, программа

Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)

Служебная программа tablediff используется для сравнения данных в двух таблицах на наличие неконвергенции и полезна для устранения неполадок в топологии репликации. Эта программа может запускаться из командной строки или из пакетного файла и служит для выполнения следующих задач:

  • Сравнение по строкам между исходной таблицей в экземпляре SQL Server, выступающей в качестве издателя репликации, и конечной таблицей в одном или нескольких экземплярах SQL Server выступая в качестве подписчиков репликации.

  • Быстрое сравнение, сравнивающее только схемы и количество строк.

  • Сравнение на уровне столбцов.

  • Формирование скрипта 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 ]
}

Аргументы

[ -? ]

Возвращает список поддерживаемых параметров.

-sourceserver source_server_name[ \instance_name ]

Указывает имя исходного сервера. Укажите имя_исходного_сервера для экземпляра SQL Serverпо умолчанию. Укажите имя_исходного_сервера\имя_экземпляра для именованного экземпляра 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]

Указывает имя целевого сервера. Укажите имя_целевого_сервера для экземпляра SQL Serverпо умолчанию. Укажите имя_целевого_сервера\имя_экземпляра для именованного экземпляра 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

Указывает количество байтов, сравниваемых для столбцов типа данных больших объектов, которые включают text, ntext, image, varchar(max), nvarchar(max) и varbinary(max). число_байтов_больших_объектов по умолчанию имеет размер столбца. Данные, превышающие large_object_bytes , не сравниваются.

-bf number_of_statements

Указывает количество инструкций Transact-SQL для записи в текущий файл скрипта Transact-SQL при -f использовании параметра . Если число инструкций Transact-SQL превышает значение number_of_statements, создается новый файл скрипта Transact-SQL.

-c

Сравнение на уровне столбцов.

-dt

Удаление таблицы результатов, указанной в аргументе имя_таблицы, если она уже существует.

-et table_name

Имя создаваемой таблицы результатов. Если эта таблица уже существует, -DT ее необходимо использовать, иначе операция завершится ошибкой.

-f [ имя_файла ]

Формирует скрипт 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 Успешно
1 Критическая ошибка
2 Различия таблиц

Remarks

Служебную программу tablediff нельзя использовать с серверами, не SQL Server.

Таблицы со столбцами типа данных 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 Используйте параметр , чтобы запретить эти сопоставления и выполнить строгую проверку.

Исходная таблица при данном сравнении должна содержать хотя бы один столбец первичного ключа, столбец идентификаторов или столбец ROWGUID. При использовании -strict параметра целевая таблица также должна иметь столбец первичного ключа, идентификатора или столбца 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 необходимо иметь разрешения на запись в указанное расположение каталога файлов.

См. также раздел