Udostępnij przez


Narzędzie tablediff

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Narzędzie tablediff służy do porównywania danych w dwóch tabelach pod kątem braku zbieżności i jest przydatne do rozwiązywania problemów z niekonwergencją w topologii replikacji. To narzędzie może służyć z wiersza polecenia lub w pliku wsadowym do wykonywania następujących zadań:

  • Porównaj każdy wiersz między tabelą źródłową w wystąpieniu programu SQL Server działającym jako Wydawca replikacji, a tabelą docelową w jednym lub więcej wystąpieniach programu SQL Server działającym jako Subskrybent replikacji.

  • Wykonaj szybkie porównanie, porównując tylko liczby wierszy i schemat.

  • Wykonaj porównania na poziomie kolumny.

  • Wygeneruj skrypt Transact-SQL, aby naprawić rozbieżności na serwerze docelowym i przenieść tabele źródłowe i docelowe do zbieżności.

  • Rejestruje wyniki w pliku wyjściowym lub w tabeli w docelowej bazie danych.

Uwaga

Narzędzie tablediff jest częścią narzędzi replikacji programu SQL Server. W programie SQL Server 2022 (16.x) można znaleźć tablediff.exe w domyślnej C:\Program Files\Microsoft SQL Server\160\COM lokalizacji po zainstalowaniu funkcji replikacji.

Składnia

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 ]
}

Argumenty (w programowaniu)

[ -? ]

Zwraca listę obsługiwanych parametrów.

-sourceserver source_server_name[\instance_name]

Określa nazwę serwera źródłowego. Określ source_server_name dla domyślnego wystąpienia programu SQL Server. Określ source_server_name\instance_name dla nazwanego wystąpienia programu SQL Server.

-sourcedatabase source_database

Określa nazwę źródłowej bazy danych.

-sourcetable source_table_name

Określa nazwę sprawdzanej tabeli źródłowej.

-sourceschema nazwa_schematu_źródłowego

Właściciel schematu tabeli źródłowej. Domyślnie właścicielem tabeli jest dbo.

-sourcepassword source_password

Określa hasło logowania używanego do nawiązywania połączenia z serwerem źródłowym przy użyciu uwierzytelniania programu SQL Server.

Ważne

Jeśli to możliwe, podaj poświadczenia zabezpieczeń w czasie wykonywania. Jeśli musisz przechowywać poświadczenia w pliku skryptu, należy zabezpieczyć plik, aby zapobiec nieautoryzowanemu dostępowi.

-sourceuser source_login

Określa identyfikator logowania używany do nawiązywania połączenia z serwerem źródłowym przy użyciu uwierzytelniania programu SQL Server. Jeśli nie podano source_login , uwierzytelnianie systemu Windows jest używane podczas nawiązywania połączenia z serwerem źródłowym. Jeśli to możliwe, użyj uwierzytelniania systemu Windows.

-sourcelocked

Blokuje tabelę źródłową podczas porównywania przy użyciu wskazówek tabeli TABLOCK i .HOLDLOCK

-destinationserver destination_server_name[\instance_name]

Określa nazwę serwera docelowego. Określ destination_server_name dla domyślnego wystąpienia programu SQL Server. Określ <destination_server_name>\<instance_name> dla nazwanego wystąpienia programu SQL Server.

-destinationdatabase baza danych subskrypcji

Określa nazwę docelowej bazy danych.

-tabela_docelowa destination_table

Określa nazwę tabeli docelowej.

-destinationschema destination_schema_name

Właściciel schematu tabeli docelowej. Domyślnie właścicielem tabeli jest dbo.

-destinationpassword destination_password

Określa hasło logowania używane do nawiązywania połączenia z serwerem docelowym przy użyciu uwierzytelniania programu SQL Server.

Ważne

Jeśli to możliwe, podaj poświadczenia zabezpieczeń w czasie wykonywania. Jeśli musisz przechowywać poświadczenia w pliku skryptu, należy zabezpieczyć plik, aby zapobiec nieautoryzowanemu dostępowi.

-destinationuser destination_login

Określa identyfikator logowania używany do nawiązywania połączenia z serwerem docelowym przy użyciu uwierzytelniania programu SQL Server. Jeśli nie podasz destination_login, połączenie korzysta z uwierzytelniania systemu Windows. Jeśli to możliwe, użyj uwierzytelniania systemu Windows.

-celzablokowany

Blokuje tabelę docelową podczas porównywania przy użyciu wskazówek tabeli TABLOCK i HOLDLOCK.

-b large_object_bytes

Określa liczbę bajtów do porównania dla kolumn typu danych dużych obiektów, które obejmują tekst, ntext, obraz, varchar(max), nvarchar(max)i varbinary(max). Wartość domyślna large_object_bytes to rozmiar kolumny. Żadne dane większe niż large_object_bytes nie są porównywane.

-bf liczba_instrukcji

Określa liczbę instrukcji Transact-SQL do zapisu w bieżącym pliku skryptu Transact-SQL, gdy -f jest używana opcja. Gdy liczba instrukcji Transact-SQL przekracza number_of_statements, zostanie utworzony nowy plik skryptu Transact-SQL.

-c

Porównuje różnice na poziomie kolumny.

-Dt

Pomiń tabelę wyników określoną przez table_name , jeśli tabela już istnieje.

-et table_name

Określa nazwę tabeli wyników do utworzenia. Jeśli ta tabela już istnieje, musisz użyć -DT polecenia lub operacja zakończy się niepowodzeniem.

-f [ file_name ]

Generuje skrypt Transact-SQL, aby przenieść tabelę na serwer docelowy do zbieżności z tabelą na serwerze źródłowym. Opcjonalnie możesz określić nazwę i ścieżkę dla wygenerowanego pliku skryptu Transact-SQL. Jeśli nie określisz file_name, narzędzie generuje plik skryptu Transact-SQL w katalogu, w którym jest uruchamiany.

-o output_file_name

Określa pełną nazwę i ścieżkę pliku wyjściowego.

-q

Wykonuje szybkie porównanie, porównując tylko liczby wierszy i schemat.

-rc liczba_powtórzeń

Liczba razy, kiedy użytkowność ponawia próbę nieudanej operacji.

-ri retry_interval

Czas w sekundach, aby czekać między ponownymi próbami.

-surowy

Porównuje schemat źródłowy i docelowy ściśle.

-t przekroczenia_czasu_połączenia

Ustawia limit czasu połączenia w sekundach dla połączeń z serwerem źródłowym i serwerem docelowym.

Wartość zwracana

Wartość Opis
0 Powodzenie
1 Błąd krytyczny
2 Różnice w tabelach

Uwagi

Nie można użyć narzędzia tablediff z serwerami spoza programu SQL Server.

Tabele z kolumnami typu danych sql_variant nie są obsługiwane.

Domyślnie narzędzie tablediff obsługuje następujące mapowania typów danych między kolumnami źródłowymi i docelowymi.

Typ danych źródłowych Docelowy typ danych
tinyint smallint, int lub bigint
smallint int lub bigint
Int bigint
Znacznik czasu varbinary
varchar(max) tekst
nvarchar(max) ntext
varbinary(max) obraz
tekst varchar(max)
ntext nvarchar(max)
obraz varbinary(max)

-strict Użyj opcji, aby nie zezwalać na te mapowania i przeprowadzać ścisłą walidację.

Tabela źródłowa w porównaniu musi zawierać co najmniej jeden klucz podstawowy, tożsamość lub kolumnę ROWGUID. Jeśli używasz -strict opcji, tabela docelowa musi również mieć klucz podstawowy, tożsamość lub ROWGUID kolumnę.

Skrypt Transact-SQL wygenerowany w celu przeniesienia tabeli docelowej do zbieżności nie obejmuje następujących typów danych:

  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • Znacznik czasu
  • XML
  • tekst
  • ntext
  • obraz

Uprawnienia

Aby porównać tabele, potrzebne są SELECT ALL uprawnienia do porównywanych obiektów tabeli.

Aby użyć -et opcji, musisz być członkiem db_owner stałej roli bazy danych lub przynajmniej mieć CREATE TABLE uprawnienia w ramach bazy danych subskrypcji i ALTER uprawnienia w ramach schematu właściciela docelowego na serwerze docelowym.

Aby użyć -dt tej opcji, musisz być członkiem db_owner stałej roli bazy danych lub przynajmniej mieć ALTER uprawnienia do schematu właściciela docelowego na serwerze docelowym.

Aby użyć opcji -o lub -f , musisz mieć uprawnienia do zapisu w określonej lokalizacji katalogu plików.