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


tablediff, программа

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

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

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

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

  • Формирование скрипта Transact-SQL для исправления несоответствий на целевом сервере и обеспечения конвергенции исходной и целевой таблиц.

  • Запись результатов операции в файл вывода или в таблицу целевой базы данных.

Синтаксис

  
      tablediff   
[ -? ] |   
{  
        -sourceserversource_server_name[\instance_name]  
        -sourcedatabasesource_database-sourcetablesource_table_name   
    [ -sourceschemasource_schema_name ]  
    [ -sourcepasswordsource_password ]  
    [ -sourceusersource_login ]  
    [ -sourcelocked ]  
        -destinationserverdestination_server_name[\instance_name]  
        -destinationdatabasesubscription_database-destinationtabledestination_table   
    [ -destinationschemadestination_schema_name ]  
    [ -destinationpassworddestination_password ]  
    [ -destinationuserdestination_login ]  
    [ -destinationlocked ]  
    [ -blarge_object_bytes ]   
    [ -bfnumber_of_statements ]   
    [ -c ]   
    [ -dt ]   
    [ -ettable_name ]   
    [ -f [ file_name ] ]   
    [ -ooutput_file_name ]   
    [ -q ]   
    [ -rcnumber_of_retries ]   
    [ -riretry_interval ]   
    [ -strict ]  
    [ -tconnection_timeouts ]   
}  

Аргументы

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

-sourceserversource_server_name[\instance_name]
Имя исходного сервера. Укажите имя_исходного_сервера для экземпляра SQL Serverпо умолчанию. Укажите имя_исходного_сервера\имя_экземпляра для именованного экземпляра SQL Server.

-sourcedatabasesource_database
Имя базы данных-источника.

-sourcetablesource_table_name
Имя проверяемой исходной таблицы.

-sourceschemasource_schema_name
Владелец схемы исходной таблицы. Владельцем таблицы по умолчанию считается dbo.

-sourcepasswordsource_password
Пароль для имени входа, используемого для подключения к исходному серверу с помощью проверки подлинности SQL Server .

Важно!

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

-sourceusersource_login
Имя входа, используемое для подключения к исходному серверу с помощью проверки подлинности SQL Server . Если исходное_имя_входа не указано, для соединения с исходным сервером используется проверка подлинности Windows. По возможности используйте аутентификацию Windows.

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

-destinationserverdestination_server_name[\instance_name]
Имя целевого сервера. Укажите имя_целевого_сервера для экземпляра SQL Serverпо умолчанию. Укажите имя_целевого_сервера\имя_экземпляра для именованного экземпляра SQL Server.

-destinationdatabasesubscription_database
Имя целевой базы данных.

-destinationtabledestination_table
Имя целевой таблицы.

-destinationschemadestination_schema_name
Владелец схемы целевой таблицы. Владельцем таблицы по умолчанию считается dbo.

-destinationpassworddestination_password
Пароль для имени входа, используемого для подключения к целевому серверу с помощью проверки подлинности SQL Server .

Важно!

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

-destinationuserdestination_login
Имя входа, используемое для подключения к целевому серверу с помощью проверки подлинности SQL Server . Если целевое_имя_входа не указано, для соединения с исходным сервером используется проверка подлинности Windows. По возможности используйте аутентификацию Windows.

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

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

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

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

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

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

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

-ooutput_file_name
Полное имя и путь файла вывода.

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

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

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

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

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

См. также:

сравнить реплицируемые таблицы на предмет различий (программирование репликации)