Программа 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.
- -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.
- -destinationlocked
Целевая таблица блокируется в ходе сравнения при помощи табличных подсказок TABLOCK и HOLDLOCK.
- -blarge_object_bytes
Число байтов для сравнения столбцов, содержащих данные типа больших объектов, к которым относятся: text, ntext, image, varchar(max), nvarchar(max) и varbinary(max). Значение large_object_bytes по умолчанию равно максимальному значению — 8000 байт. Любые данные, размер которых превышает значение large_object_bytes, игнорируются при сравнении.
- -bfnumber_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
Количество попыток повтора программой неудачно завершившейся операции.
- -riretry_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 необходимо иметь разрешения на запись в указанный каталог.
См. также
Другие ресурсы
How to: Compare Replicated Tables for Differences (Replication Programming)