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


Программа tablediff

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

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

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

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

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

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

Синтаксис

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 ] 
}

Аргументы

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

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

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

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

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

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

    Примечание по безопасностиПримечание по безопасности

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

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

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

  • -destinationserverdestination_server_name[**\instance_name]
    Имя целевого сервера. Для обращения к экземпляру сервера SQL Server по умолчанию укажите destination_server_name. Для обращения к именованному экземпляру SQL Server укажите destination_server_name
    \**instance_name.

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

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

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

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

    Примечание по безопасностиПримечание по безопасности

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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