Verwalten der Änderungsnachverfolgung (SQL Server)Manage Change Tracking (SQL Server)

DIESES THEMA GILT FÜR:jaSQL Server (ab 2008)jaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

In diesem Thema wird beschrieben, wie die Änderungsnachverfolgung verwaltet wird.This topic describes how to manage change tracking. Außerdem werden die Vorgehensweisen zum Konfigurieren der Sicherheit und zum Ermitteln der Auswirkungen der Änderungsnachverfolgung auf Speicherung und Leistung beschrieben.It also describes how to configure security and determine the effects on storage and performance when change tracking is used.

Verwalten der ÄnderungsnachverfolgungManaging Change Tracking

In den nachfolgenden Abschnitten sind Katalogsichten, Berechtigungen und Einstellungen aufgeführt, die für die Verwaltung der Änderungsnachverfolgung relevant sind.The following sections list catalog views, permissions, and settings that are relevant for managing change tracking.

KatalogsichtenCatalog Views

Zur Festlegung, für welche Tabellen und Datenbanken die Änderungsnachverfolgung aktiviert ist, können Sie die folgenden Katalogsichten verwenden:To determine which tables and databases have change tracking enabled, you can use the following catalog views:

SicherheitSecurity

Für den Zugriff auf Änderungsnachverfolgungsinformationen mit den Änderungsnachverfolgungsfunktionenmuss der Prinzipal über die folgenden Berechtigungen verfügen:To access change tracking information by using the change tracking functions, the principal must have the following permissions:

  • SELECT-Berechtigung mindestens für die wichtigsten Schlüsselspalten der änderungsnachverfolgten Tabelle zur abgefragten Tabelle.SELECT permission on at least the primary key columns on the change-tracked table to the table that is being queried.

  • VIEW CHANGE TRACKING-Berechtigung für die Tabelle, für die Änderungen abgerufen werden.VIEW CHANGE TRACKING permission on the table for which changes are being obtained. Die VIEW CHANGE TRACKING-Berechtigung ist aus folgenden Gründen erforderlich:The VIEW CHANGE TRACKING permission is required for the following reasons:

    • Datensätze der Änderungsnachverfolgung beinhalten Informationen zu gelöschten Zeilen, insbesondere zu den Primärschlüsselwerten der gelöschten Zeilen.Change tracking records include information about rows that have been deleted, specifically the primary key values of the rows that have been deleted. Einem Prinzipal kann die SELECT-Berechtigung für eine änderungsnachverfolgte Tabelle erteilt worden sein, nachdem einige vertrauliche Daten gelöscht wurden.A principal could have been granted SELECT permission for a change tracked table after some sensitive data had been deleted. In diesem Fall sollte der Prinzipal nicht mit der Änderungsnachverfolgung auf die gelöschten Informationen zugreifen können.In this case, you would not want that principal to be able to access that deleted information by using change tracking.

    • Änderungsnachverfolgungsinformationen können Informationen darüber enthalten, welche Spalten mit Updatevorgängen geändert wurden.Change tracking information can store information about which columns have been changed by update operations. Einem Prinzipal kann die Berechtigung für eine Spalte verweigert werden, die vertrauliche Informationen enthält.A principal could be denied permission to a column that contains sensitive information. Da jedoch Änderungsnachverfolgungsinformationen verfügbar sind, kann der Prinzipal weiterhin feststellen, dass ein Spaltenwert aktualisiert wurde, aber er kann den Wert der Spalte nicht ermitteln.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.

Grundlegendes zum Aufwand der ÄnderungsnachverfolgungUnderstanding Change Tracking Overhead

Wenn die Änderungsnachverfolgung für eine Tabelle aktiviert ist, wirkt sich dies auf einige Verwaltungsvorgänge aus.When change tracking is enabled for a table, some administration operations are affected. In der folgenden Tabelle sind die Vorgänge und Auswirkungen aufgeführt, die Sie berücksichtigen sollten.The following table lists the operations and the effects you should consider.

VorgangOperation Aktivierte ÄnderungsnachverfolgungWhen change tracking is enabled
DROP TABLEDROP TABLE Alle Änderungsnachverfolgungsinformationen für die gelöschte Tabelle werden entfernt.All change tracking information for the dropped table is removed.
ALTER TABLE DROP CONSTRAINTALTER TABLE DROP CONSTRAINT Ein Versuch, die PRIMARY KEY-Einschränkung zu löschen, schlägt fehl.An attempt to drop the PRIMARY KEY constraint will fail. Die Änderungsnachverfolgung muss deaktiviert werden, damit eine PRIMARY KEY-Einschränkung gelöscht werden kann.Change tracking must be disabled before a PRIMARY KEY constraint can be dropped.
ALTER TABLE DROP COLUMNALTER TABLE DROP COLUMN Ist eine gelöschte Spalte Bestandteil des Primärschlüssels, kann die Spalte nicht gelöscht werden, unabhängig von der Änderungsnachverfolgung.If a column that is being dropped is part of the primary key, dropping the column is not allowed, regardless of change tracking.

Ist die gelöschte Spalte kein Bestandteil des Primärschlüssels, kann die Spalte gelöscht werden.If the column that is being dropped is not part of the primary key, dropping the column succeeds. Es sollte jedoch zuerst die Auswirkung auf eine beliebige Anwendung, die diese Daten synchronisiert, verstanden werden.However, the effect on any application that is synchronizing this data should be understood first. Ist die Spaltenänderungsnachverfolgung für die Tabelle aktiviert, kann die Spalte trotzdem als Bestandteil der Änderungsnachverfolgungsinformationen zurückgegeben werden.If column change tracking is enabled for the table, the dropped column might still be returned as part of the change tracking information. Die Anwendung ist für die Behandlung der gelöschten Spalte zuständig.It is the responsibility of the application to handle the dropped column.
ALTER TABLE ADD COLUMNALTER TABLE ADD COLUMN Wird der änderungsnachverfolgten Tabelle eine neue Spalte hinzugefügt, wird das Hinzufügen der Spalte nicht verfolgt.If a new column is added to the change tracked table, the addition of the column is not tracked. Nur die Updates und Änderungen, die an der neuen Spalte vorgenommen werden, werden nachverfolgt.Only the updates and changes that are made to the new column are tracked.
ALTER TABLE ALTER COLUMNALTER TABLE ALTER COLUMN Datentypänderungen einer Nicht-Primärschlüsselspalte werden nicht nachverfolgt.Data type changes of a non-primary key columns are not tracked.
ALTER TABLE SWITCHALTER TABLE SWITCH Der Partitionswechsel schlägt fehl, wenn für eine oder beide Tabellen die Änderungsnachverfolgung aktiviert ist.Switching a partition fails if one or both of the tables has change tracking enabled.
DROP INDEX oder ALTER INDEX DISABLEDROP INDEX, or ALTER INDEX DISABLE Der Index, der den Primärschlüssel erzwingt, kann nicht gelöscht oder deaktiviert werden.The index that enforces the primary key cannot be dropped or disabled.
TRUNCATE TABLETRUNCATE TABLE Das Abschneiden einer Tabelle kann für eine Tabelle ausgeführt werden, für die die Änderungsnachverfolgung aktiviert ist.Truncating a table can be performed on a table that has change tracking enabled. Die mit dem Vorgang gelöschten Zeilen werden von dem Vorgang jedoch nicht nachverfolgt, und die minimale gültige Version wird aktualisiert.However, the rows that are deleted by the operation are not tracked, and the minimum valid version is updated. Führt eine Anwendung eine Versionsprüfung durch, ergibt die Prüfung, dass die Version zu alt ist und dass eine erneute Initialisierung erforderlich ist.When an application checks its version, the check indicates that the version is too old and a reinitialization is required. Dies ist identisch mit der Deaktivierung der Änderungsnachverfolgung und der anschließenden erneuten Aktivierung für die Tabelle.This is the same as change tracking being disabled, and then reenabled for the table.

Die Verwendung der Änderungsnachverfolgung führt aufgrund der Änderungsnachverfolgungsinformationen, die im Rahmen des Vorgangs gespeichert werden, zu erhöhtem Aufwand für DML-Vorgänge.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.

Auswirkungen auf DMLEffects on DML

Die Änderungsnachverfolgung wurde optimiert, um den Verwaltungsaufwand für DML-Vorgänge zu minimieren.Change tracking has been optimized to minimize the performance overhead on DML operations. Der mit der Verwendung der Änderungsnachverfolgung für eine Tabelle verbundene schrittweise Verwaltungsaufwand ist mit dem Aufwand vergleichbar, der entsteht, wenn ein Index für eine Tabelle erstellt wird und beibehalten werden muss.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.

Für jede mit einem DML-Vorgang geänderte Zeile wird der internen Änderungsnachverfolgungstabelle eine Zeile hinzugefügt.For each row that is changed by a DML operation, a row is added to the internal change tracking table. Die Auswirkung dieses Vorgangs hängt von verschiedenen Faktoren ab, wie z. B. Folgendem:The effect of this relative to the DML operation depends on various factors, such as the following:

  • Anzahl der PrimärschlüsselspaltenThe number of primary key columns

  • In der Benutzertabellenzeile geänderte DatenmengeThe amount of data that is being changed in the user table row

  • Anzahl der Vorgänge, die in einer Transaktion ausgeführt werdenThe number of operations that are being performed in a transaction

    Die Verwendung der Momentaufnahmeisolation wirkt sich auch auf die Leistung für alle DML-Vorgänge aus, unabhängig davon, ob die Änderungsnachverfolgung aktiviert ist oder nicht.Snapshot isolation, if used, also has an effect on performance for all DML operations, whether change tracking is enabled or not.

Auswirkungen auf die SpeicherungEffects on Storage

Änderungsnachverfolgungsdaten werden in den folgenden Typen von internen Tabellen gespeichert:Change tracking data is stored in the following types of internal tables:

  • Interne ÄnderungstabelleInternal change table

    Es gibt eine interne Änderungstabelle für jede Benutzertabelle, für die die Änderungsnachverfolgung aktiviert ist.There is one internal change table for each user table that has change tracking enabled.

  • Interne TransaktionstabelleInternal transaction table

    Es gibt eine interne Transaktionstabelle für die Datenbank.There is one internal transaction table for the database.

    Diese internen Tabellen beeinflussen die Speicheranforderungen folgendermaßen:These internal tables affect storage requirements in the following ways:

  • Für jede Änderung einer Zeile in der Benutzertabelle wird der internen Änderungstabelle eine Zeile hinzugefügt.For each change to each row in the user table, a row is added to the internal change table. Diese Zeile verfügt über einen geringen festen Aufwand zuzüglich eines variablen Aufwands entsprechend der Größe der Primärschlüsselspalten.This row has a small fixed overhead plus a variable overhead equal to the size of the primary key columns. Die Zeile kann optionale, von einer Anwendung festgelegte Kontextinformationen enthalten.The row can contain optional context information set by an application. Wenn Spaltennachverfolgung aktiviert ist, werden für jede geänderte Spalte 4 Byte in der Nachverfolgungstabelle benötigt.And, if column tracking is enabled, each changed column requires 4 bytes in the tracking table.

  • Für jede Transaktion, für die ein Commit ausgeführt wurde, wird einer internen Transaktionstabelle eine Zeile hinzugefügt.For each committed transaction, a row is added to an internal transaction table.

    Wie bei anderen internen Tabellen auch können Sie den für die Änderungsnachverfolgungstabelle verwendeten Speicher mit der gespeicherten Prozedur sp_spaceused festlegen.As with other internal tables, you can determine the space used for the change tracking tables by using the sp_spaceused stored procedure. Die Namen der internen Tabellen können mit der sys.internal_tables -Katalogsicht abgerufen werden, wie im nachfolgenden Beispiel dargestellt.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'  

Siehe auchSee Also

Nachverfolgen von Datenänderungen (SQL Server) Track Data Changes (SQL Server)
ALTER TABLE (Transact-SQL) ALTER TABLE (Transact-SQL)
Datenbankeigenschaften (ChangeTracking-Seite) Database Properties (ChangeTracking Page)
ALTER DATABASE SET-Optionen (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)
Nachverfolgen von Datenänderungen (SQL Server) Track Data Changes (SQL Server)
Informationen zur Änderungsnachverfolgung (SQL Server) About Change Tracking (SQL Server)
Arbeiten mit Änderungsdaten (SQL Server)Work with Change Data (SQL Server)