Condividi tramite


utilità tablediff

Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)

L'utilità tablediff viene usata per confrontare i dati in due tabelle per rilevarne l'eventuale non convergenza e risulta particolarmente utile per la risoluzione dei problemi relativi alla non convergenza in una topologia di replica. Questa utilità può essere utilizzata dal prompt dei comandi oppure in un file batch per eseguire le attività seguenti:

  • Confronto riga per riga tra una tabella di origine in un'istanza di SQL Server che funge da server di pubblicazione per la replica e una tabella di destinazione in una o più istanze di SQL Server che fungono da sottoscrittori della replica.

  • Esegue un confronto rapido mediante il confronto solo dei conteggi delle righe e degli schemi.

  • Confronti a livello di colonna.

  • Generazione di uno script Transact-SQL per correggere le discrepanze nel server di destinazione e rendere convergenti le tabelle di origine e di destinazione.

  • Registrazione dei risultati in un file di output oppure in una tabella nel database di destinazione.

Nota

L'utilità tablediff fa parte degli strumenti replica di SQL Server. In SQL Server 2022 (16.x) tablediff.exe è disponibile nella posizione predefinita di C:\Program Files\Microsoft SQL Server\160\COM, dopo l'installazione della funzionalità di replica.

Sintassi

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

Argomenti

[ -? ]

Restituisce l'elenco dei parametri supportati.

-sourceserver source_server_name[ \instance_name ]

Specifica il nome del server di origine. Specificare source_server_name per l'istanza predefinita di SQL Server. Specificare source_server_name\instance_name per un'istanza denominata di SQL Server.

-sourcedatabase source_database

Specifica il nome del database di origine.

-sourcetable source_table_name

Specific il nome della tabella di origine sottoposta al controllo.

-sourceschema source_schema_name

Proprietario dello schema della tabella di origine. Per impostazione predefinita, dbo viene considerato il proprietario della tabella.

-sourcepassword source_password

Specifica la password di accesso usata per connettersi al server di origine mediante l'autenticazione di SQL Server.

Importante

Se possibile, specificare le credenziali di sicurezza in fase di esecuzione. Se è necessario archiviare le credenziali in un file script, è consigliabile proteggere il file per evitare accessi non autorizzati.

-sourceuser source_login

Specifica l'account di accesso usato per connettersi al server di origine mediante l'autenticazione di SQL Server. Se non si specifica il parametro source_login, durante la connessione al server di origine viene usata l'autenticazione di Windows. Se possibile, usare l'autenticazione di Windows.

-sourcelocked

La tabella di origine viene bloccata durante il confronto mediante gli hint di tabella TABLOCK e HOLDLOCK.

-destinationserver destination_server_name[\instance_name]

Specific il nome del server di destinazione. Specificare destination_server_name per l'istanza predefinita di SQL Server. Specificare destination_server_name\instance_name per un'istanza denominata di SQL Server.

-destinationdatabase subscription_database

Nome del database di destinazione.

-destinationtable destination_table

Specifica il nome della tabella di destinazione.

-destinationschema destination_schema_name

Proprietario dello schema della tabella di destinazione. Per impostazione predefinita, dbo viene considerato il proprietario della tabella.

-destinationpassword destination_password

Specifica la password di accesso usata per connettersi al server di destinazione mediante l'autenticazione di SQL Server.

Importante

Se possibile, specificare le credenziali di sicurezza in fase di esecuzione. Se è necessario archiviare le credenziali in un file script, è consigliabile proteggere il file per evitare accessi non autorizzati.

-destinationuser destination_login

Specifica l'account di accesso usato per connettersi al server di destinazione mediante l'autenticazione di SQL Server. Se non si specifica il parametro destination_login, durante la connessione al server viene usata l'autenticazione di Windows. Se possibile, usare l'autenticazione di Windows.

-destinationlocked

La tabella di destinazione viene bloccata durante il confronto mediante gli hint di tabella TABLOCK e HOLDLOCK.

-b large_object_bytes

Specifica il numero di byte da confrontare per le colonne dei tipi di dati object di grandi dimensioni, ovvero: text, ntext, image, varchar(max), nvarchar(max) e varbinary(max). L'impostazione predefinita dilarge_object_bytes corrisponde alle dimensioni della colonna. I dati maggiori di large_object_bytes non vengono confrontati.

-bf number_of_statements

Specifica il numero di istruzioni Transact-SQL da scrivere nel file script Transact-SQL corrente quando si usa l'opzione -f. Se il numero di istruzioni Transact-SQL supera il valore di number_of_statements, viene creato un nuovo file script Transact-SQL.

-c

Esegue il confronto per individuare eventuali differenze a livello di colonna.

-dt

Elimina la tabella dei risultati specificata da table_namese la tabella esiste già.

-et table_name

Specifica il nome della tabella dei risultati da creare. Se questa tabella esiste già, è necessario usare l'opzione -DT. In caso contrario, l'operazione ha esito negativo.

-f [ file_name ]

Genera uno script Transact-SQL per ripristinare la convergenza tra la tabella nel server di destinazione e quella nel server di origine. È possibile specificare facoltativamente un nome e un percorso per il file script Transact-SQL generato. Se file_name viene omesso, il file script Transact-SQL verrà generato nella directory in cui si esegue l'utilità.

-o output_file_name

Specifica il percorso completo e il nome file del file di output.

-q

Esegue un confronto rapido mediante il confronto solo dei conteggi delle righe e degli schemi.

-rc number_of_retries

Numero di tentativi di esecuzione di un'operazione non riuscita compiuti dall'utilità.

-ri retry_interval

Intervallo espresso in secondi tra i vari tentativi.

-strict

Gli schemi di origine e di destinazione vengono confrontati rigorosamente.

-t connection_timeouts

Imposta il periodo di timeout della connessione, espresso in secondi, per le connessioni al server di origine e al server di destinazione.

Valore restituito

Valore Descrizione
0 Riuscita
1 Errore critico
2 Differenze tra tabelle

Osservazioni:

L'utilità tablediff non può essere usata con server non SQL Server.

Le tabelle contenenti colonne con il tipo di dati sql_variant non sono supportate.

Per impostazione predefinita, l'utilità tablediff supporta i mapping dei tipi di dati tra colonne di origine e di destinazione elencati di seguito.

Tipo di dati di origine Tipo di dati di destinazione
tinyint smallint, into bigint
smallint int o bigint
int bigint
timestamp varbinary
varchar(max) Testo
nvarchar(max) ntext
varbinary(max) Immagine
Testo varchar(max)
ntext nvarchar(max)
Immagine varbinary(max)

Usare l'opzione -strict per disabilitare questi mapping ed eseguire una convalida di tipo strict.

La tabella di origine utilizzata per il confronto deve contenere almeno una chiave primaria, un'identità o una colonna ROWGUID. Se si usa l'opzione -strict, anche la tabella di destinazione deve contenere una chiave primaria, un'identità o una colonna ROWGUID.

Lo script Transact-SQL generato per rendere convergente la tabella di destinazione non include i tipi di dati seguenti:

  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • timestamp
  • xml
  • Testo
  • ntext
  • Immagine

Autorizzazioni

Per confrontare tabelle, è necessario disporre delle autorizzazioni SELECT ALL sugli oggetti tabella da confrontare.

Per usare l'opzione -et, è necessario essere membro del ruolo predefinito del database db_owner oppure disporre almeno dell'autorizzazione CREATE TABLE nel database di sottoscrizione e dell'autorizzazione ALTER per lo schema del proprietario della destinazione nel server di destinazione.

Per usare l'opzione -dt, è necessario essere membro del ruolo predefinito del database db_owner oppure disporre almeno dell'autorizzazione ALTER per lo schema del proprietario della destinazione nel server di destinazione.

Per usare l'opzione -o o -f, è necessario avere autorizzazioni di scrittura per il percorso della directory di file specificato.

Vedi anche