Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо:SQL Server
База данных SQL Azure
Управляемый экземпляр SQL Azure
Azure Synapse Analytics
Система аналитической платформы (PDW)
Служебная программа tablediff используется для сравнения данных в двух таблицах для выявления расхождений и полезна для устранения неполадок, связанных с неконвергенцией в топологии репликации. Эта программа может запускаться из командной строки или из пакетного файла и служит для выполнения следующих задач:
Сравните каждую строку между исходной таблицей в экземпляре SQL Server, выступающей в качестве издателя репликации, и целевую таблицу в одном или нескольких экземплярах SQL Server, выступающей в качестве подписчиков репликации.
Выполните быстрое сравнение, сравнивая только количество строк и схемы.
Выполнить сравнение на уровне столбцов.
Создайте скрипт Transact-SQL для устранения несоответствий на конечном сервере и приведения исходных и целевых таблиц в конвергенцию.
Записать результаты в файл вывода либо в таблицу в базе данных пункта назначения.
Примечание.
Программа tablediff является частью средств репликации SQL Server. В SQL Server 2022 (16.x) можно найти tablediff.exe в расположении по умолчанию C:\Program Files\Microsoft SQL Server\160\COM после установки функции репликации.
Синтаксис
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]
Указывает имя исходного сервера. Укажите 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. Если source_login не предоставляется, при подключении к исходному серверу используется проверка подлинности Windows. По возможности используйте аутентификацию Windows.
-заблокировано
Блокирует исходную таблицу во время сравнения, используя подсказки для таблицы TABLOCK и HOLDLOCK.
-destinationserver destination_server_name[\instance_name]
Указывает имя целевого сервера. Укажите destination_server_name для экземпляра SQL Server по умолчанию. Укажите <destination_server_name>\<instance_name> для именованного экземпляра SQL Server.
-destinationdatabase subscription_database
Указывает имя целевой базы данных.
-таблицаНазначения таблица_назначения
Указывает имя целевой таблицы.
-destinationschema destination_schema_name
Владелец схемы целевой таблицы. Владельцем таблицы по умолчанию считается dbo.
-destinationpassword destination_password
Указывает пароль для входа, используемого для подключения к целевому серверу с помощью проверки подлинности SQL Server.
Внимание
По возможности указывайте учетные данные во время выполнения. Если нужно хранить учетные данные в файле скрипта, для этого файла необходимо обеспечить защиту, чтобы исключить несанкционированный доступ.
-destinationuser destination_login
Указывает имя входа, используемое для подключения к целевому серверу с помощью проверки подлинности SQL Server. Если вы не предоставляете destination_login, подключение использует проверку подлинности Windows. По возможности используйте аутентификацию Windows.
-назначение заблокировано
Блокирует целевую таблицу во время сравнения, используя подсказки таблицы TABLOCK и HOLDLOCK.
-b large_object_bytes
Указывает количество байтов для сравнения столбцов типа больших объектов, которые включают текст, ntext, image, varchar(max), nvarchar(max)и varbinary(max). Значение по умолчанию для large_object_bytes — это размер столбца. Любые данные, превышающие large_object_bytes , не сравниваются.
-bf количество_заявлений
Указывает количество инструкций Transact-SQL, которое нужно записать в текущий файл скрипта Transact-SQL, когда используется параметр -f. Если число инструкций Transact-SQL превышает значение number_of_statements, создается новый файл скрипта Transact-SQL.
-c
Сравнивает различия на уровне столбцов.
-dt
Удаляет таблицу результатов, указанную table_name если таблица уже существует.
-et table_name
Указывает имя создаваемой таблицы результатов. Если эта таблица уже существует, необходимо использовать -DT, иначе операция завершится сбоем.
-f [ file_name ]
Формирует скрипт Transact-SQL, по которому обеспечивается конвергенция таблицы на целевом сервере и таблицы на исходном сервере. Можно дополнительно указать имя и путь для создаваемого файла скрипта Transact-SQL. Если вы не указываете file_name, программа создает файл скрипта Transact-SQL в каталоге, где он выполняется.
-o output_file_name
Указывает полное имя и путь выходного файла.
-q
Выполняет быстрое сравнение, сравнивая только количество строк и схему.
-rc количество_повторных_попыток
Количество попыток повтора программой неудачно завершившейся операции.
-ri retry_interval
Интервал в секундах между повторными попытками.
-strict
Сравнивает исходную и целевую схему строго.
-t тайм-ауты соединения
Устанавливает время ожидания в секундах для соединений с исходным сервером и целевым сервером.
Возвращаемое значение
| значение | Описание |
|---|---|
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) | Изображение |
| text | varchar(max) |
| ntext | nvarchar(max) |
| Изображение | varbinary(max) |
-strict Используйте параметр, чтобы запретить эти сопоставления и выполнить строгую проверку.
Исходная таблица в сравнении должна содержать по крайней мере один идентификационный столбец, первичный ключ или ROWGUID столбец. При использовании параметра целевая -strict таблица также должна иметь первичный ключ, удостоверение или ROWGUID столбец.
Скрипт Transact-SQL, созданный для переноса целевой таблицы в конвергенцию, не включает следующие типы данных:
- varchar(max)
- nvarchar(max)
- varbinary(max)
- timestamp
- xml
- text
- ntext
- Изображение
Разрешения
Для сравнения таблиц требуются SELECT ALL разрешения для сравниваемых объектов таблиц.
Чтобы использовать параметр -et, необходимо быть членом фиксированной роли базы данных db_owner или хотя бы иметь разрешение CREATE TABLE в базе данных подписки и разрешение ALTER на схему владельца назначения на целевом сервере.
Чтобы использовать опцию -dt, необходимо быть членом фиксированных ролей базы данных db_owner или иметь хотя бы ALTER разрешение на схему владельца назначения на сервере назначения.
Чтобы использовать параметры -o или -f, вы должны иметь права на запись в указанное местоположение каталога.