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