Поделиться через


tablediff, утилита

Применимо:SQL ServerБаза данных SQL AzureУправляемый экземпляр SQL AzureAzure Synapse AnalyticsСистема аналитической платформы (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 ]

Указывает имя исходного сервера. Укажите 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.

-заблокировано

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

-назначение заблокировано

Целевая таблица блокируется в ходе сравнения при помощи табличных указаний TABLOCK и HOLDLOCK.

-b large_object_bytes

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

-bf количество_заявлений

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

-c

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

-dt

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

-et table_name

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

-f [ file_name ]

Формирует скрипт Transact-SQL, по которому обеспечивается конвергенция таблицы на целевом сервере и таблицы на исходном сервере. Можно дополнительно указать имя и путь для создаваемого файла скрипта Transact-SQL. Если file_name не указан, файл скрипта Transact-SQL создается в каталоге, в котором выполняется программа.

-o output_file_name

Указывает полное имя и путь выходного файла.

-q

Выполните быстрое сравнение, сравнивая только число строк и схемы.

-rc количество_повторных_попыток

Количество попыток повтора программой неудачно завершившейся операции.

-ri retry_interval

Интервал в секундах между повторными попытками.

-strict

Строгая проверка исходной и целевой схем.

-t тайм-ауты соединения

Устанавливает время ожидания в секундах для соединений с исходным сервером и целевым сервером.

Возвращаемое значение

значение Описание
0 Успех
1 Критическая ошибка
2 Различия таблиц

Замечания

Служебная программа 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) Изображение
text varchar(max)
ntext nvarchar(max)
Изображение varbinary(max)

-strict Используйте параметр, чтобы запретить эти сопоставления и выполнить строгую проверку.

Исходная таблица при данном сравнении должна содержать хотя бы один столбец первичного ключа, столбец идентификаторов или столбец ROWGUID. При использовании параметра -strict целевая таблица также должна иметь первичный ключ, идентификатор или столбец ROWGUID.

Скрипт Transact-SQL, созданный для переноса целевой таблицы в конвергенцию, не включает следующие типы данных:

  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • timestamp
  • xml
  • text
  • ntext
  • Изображение

Разрешения

Для сравнения таблиц необходимо иметь разрешения SELECT ALL на сравниваемые объекты таблиц.

Чтобы использовать параметр -et, необходимо быть членом фиксированной роли базы данных db_owner или, по крайней мере, иметь разрешение на создание таблиц (CREATE TABLE) в базе данных подписки и разрешение на изменение (ALTER) схемы владельца на сервере назначения.

Чтобы использовать этот параметр -dt, необходимо быть членом фиксированной роли базы данных db_owner или, по крайней мере, иметь разрешение ALTER на схему владельца назначения на целевом сервере.

Чтобы использовать параметры -o или -f, вы должны иметь права на запись в указанное местоположение каталога.

См. также