Utilità tablediff

L'utilità tablediff viene utilizzata per individuare l'eventuale non convergenza dei dati in due tabelle 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 MicrosoftSQL 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.

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.

  • -sourceserversource_server_name[**\instance_name]
    Nome del server di origine. Specificare source_server_name per l'istanza predefinita di SQL Server. Specificare source_server_name
    \**instance_name per l'istanza denominata di SQL Server.

  • -sourcedatabasesource_database
    Nome del database di origine.

  • -sourcetablesource_table_name
    Nome della tabella di origine sottoposta al controllo.

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

  • -sourcepasswordsource_password
    Password di accesso utilizzata per connettersi al server di origine mediante l'autenticazione di SQL Server.

    Nota sulla protezioneNota sulla protezione

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

  • -sourceusersource_login
    Account di accesso utilizzato 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 utilizzata l'autenticazione di Windows. Se possibile, utilizzare l'autenticazione di Windows.

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

  • -destinationserverdestination_server_name[**\instance_name]
    Nome del server di destinazione. Specificare destination_server_name per l'istanza predefinita di SQL Server. Specificare destination_server_name
    \**instance_name per l'istanza denominata di SQL Server.

  • -destinationdatabasesubscription_database
    Nome del database di destinazione.

  • -destinationtabledestination_table
    Nome della tabella di destinazione.

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

  • -destinationpassworddestination_password
    Password di accesso utilizzata per connettersi al server di destinazione mediante l'autenticazione di SQL Server.

    Nota sulla protezioneNota sulla protezione

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

  • -destinationuserdestination_login
    Account di accesso utilizzato 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 utilizzata l'autenticazione di Windows. Se possibile, utilizzare l'autenticazione di Windows.

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

  • -blarge_object_bytes
    Numero di byte per confrontare le colonne con tipo di dati LOB, ovvero text, ntext, image, varchar(max), nvarchar(max) e varbinary(max). L'impostazione predefinita di large_object_bytes corrisponde alle dimensioni della colonna. Qualsiasi dato che supera il valore di large_object_bytes non verrà confrontato.

  • -bf number_of_statements
    Numero di istruzioni Transact-SQL da scrivere nel file script Transact-SQL corrente quando si utilizza l'opzione -f. Se il numero di istruzioni Transact-SQL supera 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_name se la tabella esiste già.

  • -ettable_name
    Specifica il nome della tabella dei risultati da creare. Se questa tabella esiste già, è necessario utilizzare l'opzione -DT. In caso contrario, l'operazione avrà 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à.

  • -ooutput_file_name
    Nome e percorso completi del file di output.

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

  • -rcnumber_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.

  • -tconnection_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

Esito positivo

1

Errore critico

2

Differenze tra tabelle

Osservazioni

L'utilità tablediff non può essere utilizzata 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, int o bigint

smallint

int o bigint

int

bigint

timestamp

varbinary

varchar(max)

text

nvarchar(max)

ntext

varbinary(max)

image

text

varchar(max)

ntext

nvarchar(max)

image

varbinary(max)

Utilizzare 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 utilizza l'opzione -strict, anche nella tabella di destinazione deve essere presente almeno 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

  • text

  • ntext

  • image

Autorizzazioni

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

Per utilizzare 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 l'autorizzazione ALTER per lo schema del proprietario della destinazione nel server di destinazione.

Per utilizzare 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 utilizzare l'opzione -o o -f, è necessario disporre delle autorizzazioni di scrittura per il percorso della directory di file specificata.