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