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


Программа 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 ]   
}  

Аргументы

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

-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. Если исходное_имя_входа не указано, для соединения с исходным сервером используется проверка подлинности 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. Если целевое_имя_входа не указано, для соединения с исходным сервером используется проверка подлинности Windows. По возможности используйте аутентификацию Windows.

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

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

-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 Различия таблиц

Замечания

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

См. также

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