Gestire il rilevamento delle modifiche (SQL Server)Manage Change Tracking (SQL Server)

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2008)sìDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

In questo argomento viene descritto come gestire il rilevamento delle modifiche.This topic describes how to manage change tracking. Nell'argomento viene descritto inoltre come configurare la sicurezza e determinare gli effetti sull'archiviazione e sulle prestazioni quando si utilizza il rilevamento delle modifiche.It also describes how to configure security and determine the effects on storage and performance when change tracking is used.

Gestione del rilevamento delle modificheManaging Change Tracking

Nelle sezioni seguenti vengono elencate le viste del catalogo, le autorizzazioni e le impostazioni per la gestione del rilevamento delle modifiche.The following sections list catalog views, permissions, and settings that are relevant for managing change tracking.

Viste del catalogoCatalog Views

Per determinare in quali tabelle e database è abilitato il rilevamento delle modifiche, è possibile utilizzare le seguenti viste del catalogo:To determine which tables and databases have change tracking enabled, you can use the following catalog views:

SicurezzaSecurity

Per accedere alle informazioni sul rilevamento delle modifiche utilizzando le funzioni di rilevamento delle modifiche, l'entità deve disporre delle autorizzazioni seguenti:To access change tracking information by using the change tracking functions, the principal must have the following permissions:

  • Autorizzazione SELECT almeno nelle colonne chiave primaria nella tabella di cui sono state rilevate le modifiche per la tabella in cui si sta eseguendo la query.SELECT permission on at least the primary key columns on the change-tracked table to the table that is being queried.

  • Autorizzazione VIEW CHANGE TRACKING nella tabella per la quale vengono ottenute le modifiche.VIEW CHANGE TRACKING permission on the table for which changes are being obtained. L'autorizzazione VIEW CHANGE TRACKING è richiesta per i seguenti motivi:The VIEW CHANGE TRACKING permission is required for the following reasons:

    • I record sul rilevamento delle modifiche includono informazioni sulle righe eliminate, ovvero i valori della chiave primaria delle righe eliminate.Change tracking records include information about rows that have been deleted, specifically the primary key values of the rows that have been deleted. A un'entità potrebbe essere stata concessa l'autorizzazione SELECT per una tabella con rilevamento delle modifiche dopo l'eliminazione di alcuni dati sensibili.A principal could have been granted SELECT permission for a change tracked table after some sensitive data had been deleted. In questo caso è necessario che tale entità non sia in grado di accedere alle informazioni eliminate utilizzando il rilevamento delle modifiche.In this case, you would not want that principal to be able to access that deleted information by using change tracking.

    • Le informazioni sul rilevamento delle modifiche possono archiviare informazioni sulle colonne modificate dalle operazioni di aggiornamento.Change tracking information can store information about which columns have been changed by update operations. A un'entità potrebbe essere stata negata l'autorizzazione relativa a una colonna che contiene informazioni riservate.A principal could be denied permission to a column that contains sensitive information. Tuttavia, poiché le informazioni sul rilevamento delle modifiche sono disponibili, un'entità può determinare che un valore della colonna è stato aggiornato, ma non può determinare tale valore.However, because change tracking information is available, a principal can determine that a column value has been updated, but the principal cannot determine the value of the column.

Informazioni sull'overhead del rilevamento delle modificheUnderstanding Change Tracking Overhead

Quando il rilevamento delle modifiche è abilitato per una tabella, sono interessate alcune operazioni di amministrazione.When change tracking is enabled for a table, some administration operations are affected. Nella tabella seguente sono elencate le operazioni e gli effetti da tenere in considerazione:The following table lists the operations and the effects you should consider.

OperazioneOperation Se il rilevamento delle modifiche è abilitatoWhen change tracking is enabled
DROP TABLEDROP TABLE Tutte le informazioni sul rilevamento delle modifiche per la tabella eliminata vengono rimosse.All change tracking information for the dropped table is removed.
ALTER TABLE DROP CONSTRAINTALTER TABLE DROP CONSTRAINT Il tentativo di eliminare il vincolo PRIMARY KEY avrà esito negativo.An attempt to drop the PRIMARY KEY constraint will fail. Il rilevamento delle modifiche deve essere disabilitato prima che un vincolo PRIMARY KEY possa essere eliminato.Change tracking must be disabled before a PRIMARY KEY constraint can be dropped.
ALTER TABLE DROP COLUMNALTER TABLE DROP COLUMN Se una colonna in fase di eliminazione fa parte della chiave primaria, l'eliminazione della colonna non è consentita, indipendentemente dal rilevamento delle modifiche.If a column that is being dropped is part of the primary key, dropping the column is not allowed, regardless of change tracking.

Se la colonna in fase di eliminazione non fa parte della chiave primaria, l'eliminazione della colonna viene eseguita.If the column that is being dropped is not part of the primary key, dropping the column succeeds. Tuttavia, è necessario conoscere prima l'effetto su qualsiasi applicazione che sta sincronizzando questi dati.However, the effect on any application that is synchronizing this data should be understood first. Se il rilevamento delle modifiche a livello della colonna è abilitato per la tabella, la colonna eliminata potrebbe ancora essere restituita come parte delle informazioni sul rilevamento delle modifiche.If column change tracking is enabled for the table, the dropped column might still be returned as part of the change tracking information. È compito dell'applicazione gestire la colonna eliminata.It is the responsibility of the application to handle the dropped column.
ALTER TABLE ADD COLUMNALTER TABLE ADD COLUMN Se una nuova colonna viene aggiunta alla tabella con rilevamento delle modifiche, l'aggiunta della colonna non viene rilevata,If a new column is added to the change tracked table, the addition of the column is not tracked. ma vengono rilevati solo gli aggiornamenti e le modifiche apportati alla nuova colonna.Only the updates and changes that are made to the new column are tracked.
ALTER TABLE ALTER COLUMNALTER TABLE ALTER COLUMN Le modifiche ai tipi di dati di colonne chiave non primaria non vengono rilevate.Data type changes of a non-primary key columns are not tracked.
ALTER TABLE SWITCHALTER TABLE SWITCH Lo spostamento di una partizione non riesce se in una o in entrambe le tabelle è abilitato il rilevamento delle modifiche.Switching a partition fails if one or both of the tables has change tracking enabled.
DROP INDEX o ALTER INDEX DISABLEDROP INDEX, or ALTER INDEX DISABLE L'indice che applica la chiave primaria non può essere eliminato o disabilitato.The index that enforces the primary key cannot be dropped or disabled.
TRUNCATE TABLETRUNCATE TABLE Il troncamento di una tabella può essere eseguito su una tabella in cui è abilitato il rilevamento delle modifiche.Truncating a table can be performed on a table that has change tracking enabled. Tuttavia, le righe eliminate dall'operazione non vengono rilevate e viene aggiornata la versione minima valida.However, the rows that are deleted by the operation are not tracked, and the minimum valid version is updated. Quando un'applicazione verifica la versione, viene indicato che la versione è obsoleta ed è necessario eseguire la reinizializzazione.When an application checks its version, the check indicates that the version is too old and a reinitialization is required. Questa situazione è la stessa che si verifica quando il rilevamento delle modifiche per la tabella viene disabilitato e successivamente riabilitato.This is the same as change tracking being disabled, and then reenabled for the table.

L'utilizzo del rilevamento delle modifiche provoca l'aumento di overhead delle operazioni DML a causa delle informazioni sul rilevamento delle modifiche archiviate come parte dell'operazione.Using change tracking does add some overhead to DML operations because of the change tracking information that is being stored as part of the operation.

Effetti sulle operazioni DMLEffects on DML

Il rilevamento delle modifiche è stato ottimizzato per minimizzare l'overhead delle prestazioni nelle operazioni DML.Change tracking has been optimized to minimize the performance overhead on DML operations. L'overhead incrementale delle prestazioni associato all'utilizzo del rilevamento delle modifiche in una tabella è analogo all'overhead causato dalla creazione di un indice per una tabella e dalla relativa necessità di gestirlo.The incremental performance overhead that is associated with using change tracking on a table is similar to the overhead incurred when an index is created for a table and needs to be maintained.

Per ogni riga modificata da un'operazione DML, viene aggiunta una riga alla tabella del rilevamento delle modifiche interna.For each row that is changed by a DML operation, a row is added to the internal change tracking table. Il suo effetto in relazione all'operazione DML dipende da vari fattori, quali i seguenti:The effect of this relative to the DML operation depends on various factors, such as the following:

  • Numero di colonne chiave primariaThe number of primary key columns

  • Quantità di dati di cui è in corso la modifica nella riga della tabella utenteThe amount of data that is being changed in the user table row

  • Numero di operazioni in esecuzione in una transazioneThe number of operations that are being performed in a transaction

    L'isolamento dello snapshot, se utilizzato, influisce anche sulle prestazioni per tutte le operazioni DML, indipendentemente dall'abilitazione o meno del rilevamento delle modifiche.Snapshot isolation, if used, also has an effect on performance for all DML operations, whether change tracking is enabled or not.

Effetti sull'archiviazioneEffects on Storage

I dati relativi al rilevamento delle modifiche vengono archiviati nei seguenti tipi di tabelle interne:Change tracking data is stored in the following types of internal tables:

  • Tabella delle modifiche internaInternal change table

    È disponibile una tabella delle modifiche interna per ciascuna tabella utente per cui è abilitato il rilevamento delle modifiche.There is one internal change table for each user table that has change tracking enabled.

  • Tabella delle transazioni internaInternal transaction table

    È disponibile una tabella delle transazioni interna per il database.There is one internal transaction table for the database.

    Tali tabelle interne influiscono sui requisiti di archiviazione nei modi descritti di seguito:These internal tables affect storage requirements in the following ways:

  • Per ciascuna modifica a ciascuna riga della tabella utente, viene aggiunta una riga alla tabella delle modifiche interna.For each change to each row in the user table, a row is added to the internal change table. Questa riga ha un basso overhead fisso più un overhead variabile uguale alle dimensioni delle colonne chiave primaria.This row has a small fixed overhead plus a variable overhead equal to the size of the primary key columns. La riga può contenere informazioni facoltative sul contesto impostate da un'applicazione.The row can contain optional context information set by an application. Inoltre, se il rilevamento a livello della colonna è abilitato, ciascuna colonna modificata richiede 4 byte nella tabella di rilevamento.And, if column tracking is enabled, each changed column requires 4 bytes in the tracking table.

  • Per ogni transazione di cui è stato eseguito il commit, viene aggiunta una riga a una tabella delle transazioni interna.For each committed transaction, a row is added to an internal transaction table.

    Come per le altre tabelle interne, è possibile determinare lo spazio usato per le tabelle di rilevamento delle modifiche usando la stored procedure sp_spaceused .As with other internal tables, you can determine the space used for the change tracking tables by using the sp_spaceused stored procedure. I nomi delle tabelle interne possono essere ottenuti usando la vista del catalogo sys.internal_tables , come illustrato nell'esempio seguente.The names of the internal tables can be obtained by using the sys.internal_tables catalog view, as shown in the following example.

sp_spaceused 'sys.change_tracking_309576141'  
sp_spaceused 'sys.syscommittab'  

Vedere ancheSee Also

Rilevare le modifiche ai dati (SQL Server) Track Data Changes (SQL Server)
ALTER TABLE (Transact-SQL) ALTER TABLE (Transact-SQL)
Proprietà database (pagina Rilevamento delle modifiche) Database Properties (ChangeTracking Page)
Opzioni di ALTER DATABASE SET (Transact-SQL) ALTER DATABASE SET Options (Transact-SQL)
sys.change_tracking_databases (Transact-SQL) sys.change_tracking_databases (Transact-SQL)
sys.change_tracking_tables (Transact-SQL) sys.change_tracking_tables (Transact-SQL)
Rilevare le modifiche ai dati (SQL Server) Track Data Changes (SQL Server)
Informazioni sul rilevamento delle modifiche (SQL Server) About Change Tracking (SQL Server)
Utilizzare i dati delle modifiche (SQL Server)Work with Change Data (SQL Server)