tablediff, программа
Применимо к:
SQL Server (все поддерживаемые версии)
База данных SQL Azure
Управляемый экземпляр SQL Azure
Azure Synapse Analytics
Параллельное хранилище данных
Служебная программа 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 ]
}
Аргументы
[ -? ]
Возвращает список поддерживаемых параметров.
-sourceserver source_server_name[ \ instance_name]
Имя исходного сервера. Укажите имя_исходного_сервера для экземпляра SQL Serverпо умолчанию. Укажите имя_исходного_сервера \ имя_экземпляра для именованного экземпляра 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]
Имя целевого сервера. Укажите имя_целевого_сервера для экземпляра SQL Serverпо умолчанию. Укажите имя_целевого_сервера \ имя_экземпляра для именованного экземпляра 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 превышает значение число_инструкций, создается новый файл скрипта Transact-SQL .
-c
Сравнение на уровне столбцов.
-dt
Удаление таблицы результатов, указанной в аргументе имя_таблицы, если она уже существует.
-et table_name
Имя создаваемой таблицы результатов. Если таблица уже существует, необходимо использовать аргумент -DT , иначе операция завершится ошибкой.
-f [ имя_файла ]
Формирует скрипт Transact-SQL , по которому обеспечивается конвергенция таблицы на целевом сервере и таблицы на исходном сервере. Можно дополнительно указать имя и путь для создаваемого файла скрипта Transact-SQL . Если параметр имя_файла не указан, файл скрипта Transact-SQL создается в каталоге, в котором запущена данная программа.
-o output_file_name
Полное имя и путь файла вывода.
-q
Быстрое сравнение, сравнивающее только схемы и количество строк.
-rc number_of_retries
Количество попыток повтора программой неудачно завершившейся операции.
-ri retry_interval
Интервал в секундах между повторными попытками.
-strict
Строгая проверка исходной и целевой схем.
-t connection_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 , необходимо иметь разрешения на запись в указанный каталог файлов.
См. также:
Сравнение реплицируемых таблиц на предмет различий (программирование репликации)