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


tablediff, программа

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

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

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

См. также