Informationen zur Änderungsnachverfolgung (SQL Server)About 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

Die Änderungsnachverfolgung ist eine einfache Lösung, die einen effizienten Änderungsnachverfolgungsmechanismus für Anwendungen bereitstellt.Change tracking is a lightweight solution that provides an efficient change tracking mechanism for applications. Normalerweise mussten Anwendungsentwickler benutzerdefinierte Mechanismen zur Änderungsnachverfolgung implementieren, damit die Anwendungen Änderungen an Daten in einer Datenbank abfragen und auf Informationen im Zusammenhang mit den Änderungen zugreifen konnten.Typically, to enable applications to query for changes to data in a database and access information that is related to the changes, application developers had to implement custom change tracking mechanisms. Die Erstellung dieser Mechanismen war i. d. R. mit hohem Arbeitsaufwand verbunden und erforderte vielfach eine Kombination von Triggern, timestamp -Spalten, neuen Tabellen zum Speichern von Nachverfolgungsinformationen und benutzerdefinierten Cleanupprozessen.Creating these mechanisms usually involved a lot of work and frequently involved using a combination of triggers, timestamp columns, new tables to store tracking information, and custom cleanup processes.

Die Anforderungen an die Menge erforderlicher Informationen zu den Änderungen variieren je nach Anwendungstyp.Different types of applications have different requirements for how much information they need about the changes. Anwendungen können die Änderungsnachverfolgung verwenden, um die folgenden Fragen zu den an einer Benutzertabelle vorgenommenen Änderungen zu beantworten:Applications can use change tracking to answer the following questions about the changes that have been made to a user table:

  • Welche Zeilen wurden in einer Benutzertabelle geändert?What rows have changed for a user table?

    • Es ist nur die Tatsache von Belang, dass eine Zeile geändert wurde, nicht jedoch, wie oft die Zeile geändert wurde oder welche Werte bei Zwischenänderungen festgelegt wurden.Only the fact that a row has changed is required, not how many times the row has changed or the values of any intermediate changes.

    • Die aktuellen Daten können direkt aus der nachverfolgten Tabelle abgerufen werden.The latest data can be obtained directly from the table that is being tracked.

  • Wurde eine Zeile geändert?Has a row changed?

    • Die Tatsache, dass eine Zeile geändert wurde, und Informationen zu der Änderung müssen verfügbar sein und zum Zeitpunkt der Änderung in derselben Transaktion aufgezeichnet werden.The fact that a row has changed and information about the change must be available and recorded at the time that the change was made in the same transaction.
Hinweis

Wenn für eine Anwendung Informationen zu allen vorgenommenen Änderungen und die Zwischenwerte der geänderten Daten erforderlich sind, ist möglicherweise eher die Verwendung von Change Data Capture anstelle der Änderungsnachverfolgung zu empfehlen.If an application requires information about all the changes that were made and the intermediate values of the changed data, using change data capture, instead of change tracking, might be appropriate. Weitere Informationen finden Sie unter Informationen zu Change Data Capture (SQL Server).For more information, see About Change Data Capture (SQL Server).

Unidirektionale und bidirektionale SynchronisierungsanwendungenOne-Way and Two-Way Synchronization Applications

Anwendungen, die Daten mit einer Instanz von SQL Server-DatenbankmodulSQL Server Database Engine synchronisieren müssen, müssen in der Lage sein, Änderungen abzufragen.Applications that have to synchronize data with an instance of the SQL Server-DatenbankmodulSQL Server Database Engine must be able to query for changes. Die Änderungsnachverfolgung kann sowohl als Grundlage für unidirektionale als auch für bidirektionale Synchronisierungsanwendungen verwendet werden.Change tracking can be used as a foundation for both one-way and two-way synchronization applications.

Unidirektionale SynchronisierungsanwendungenOne-Way Synchronization Applications

Es können unidirektionale Synchronisierungsanwendungen, z. B. ein Client oder eine Zwischenspeicherungsanwendung auf der mittleren Ebene, erstellt werden, die die Änderungsnachverfolgung verwenden.One-way synchronization applications, such as a client or mid-tier caching application, can be built that use change tracking. Wie in der folgenden Abbildung dargestellt, müssen für eine Zwischenspeicherungsanwendung Daten in DatenbankmodulDatabase Engine gespeichert und in anderen Datenspeichern zwischengespeichert werden.As shown in the following illustration, a caching application requires data to be stored in the DatenbankmodulDatabase Engine and to be cached in other data stores. Die Anwendung muss in der Lage sein, den Cache auf dem aktuellen Stand zu halten, indem dieser mit allen an den Datenbanktabellen vorgenommenen Änderungen aktualisiert wird.The application must be able to keep the cache up-to-date with any changes that have been made to the database tables. Es werden keine Änderungen zurück an DatenbankmodulDatabase Engineübergeben.There are no changes to pass back to the DatenbankmodulDatabase Engine.

Zeigt Anwendungen mit unidirektionaler SynchronisierungShows one-way synchronization applications

Bidirektionale SynchronisierungsanwendungenTwo-Way Synchronization Applications

Es können auch bidirektionale Synchronisierungsanwendungen erstellt werden, die die Änderungsnachverfolgung verwenden.Two-way synchronization applications can also be built that use change tracking. In diesem Szenario werden die Daten in einer Instanz von DatenbankmodulDatabase Engine mit mindestens einem Datenspeicher synchronisiert.In this scenario, the data in an instance of the DatenbankmodulDatabase Engine is synchronized with one or more data stores. Die Daten in diesen Speichern können aktualisiert werden, und die Änderungen müssen wieder mit DatenbankmodulDatabase Enginesynchronisiert werden.The data in those stores can be updated and the changes must be synchronized back to the DatenbankmodulDatabase Engine.

Zeigt Anwendungen mit bidirektionaler SynchronisierungShows two-way synchronization applications

Ein gutes Beispiel für eine bidirektionale Synchronisierungsanwendung ist eine gelegentlich verbundene Anwendung.A good example of two-way synchronization application is an occasionally connected application. In einer Anwendung dieses Typs fragt eine Clientanwendung einen lokalen Speicher ab und aktualisiert diesen.In this type of application, a client application queries and updates a local store. Wenn eine Verbindung zwischen einem Client und einem Server verfügbar ist, führt die Anwendung die Synchronisierung mit einem Server aus, und geänderte Daten fließen in beide Richtungen.When a connection is available between a client and server, the application will synchronize with a server, and changed data flows in both directions.

Die bidirektionalen Synchronisierungsanwendungen müssen Konflikte erkennen können.The two-way synchronization applications must be able to detect conflicts. Zu einem Konflikt kommt es, wenn in der Zeit zwischen zwei Synchronisierungen die gleichen Daten in beiden Datenspeichern geändert wurden.A conflict would occur if the same data was changed in both data stores in the time between synchronizations. Wenn eine Anwendung über die Fähigkeit zum Erkennen von Konflikten verfügt, kann sichergestellt werden, dass keine Änderungen verloren werden.With the ability to detect conflicts, an application can make sure that changes are not lost.

Funktionsweise der ÄnderungsnachverfolgungHow Change Tracking Works

Zum Konfigurieren der Änderungsnachverfolgung können Sie DDL-Anweisungen oder SQL Server Management StudioSQL Server Management Studioverwenden.To configure change tracking, you can use DDL statements or SQL Server Management StudioSQL Server Management Studio. Weitere Informationen finden Sie unter Aktivieren und Deaktivieren der Änderungsnachverfolgung (SQL Server).For more information, see Enable and Disable Change Tracking (SQL Server). Zum Nachverfolgen von Änderungen muss die Änderungsnachverfolgung zuerst für die Datenbank und dann für die Tabellen, die in dieser Datenbank nachverfolgt werden sollen, aktiviert werden.To track changes, change tracking must first be enabled for the database and then enabled for the tables that you want to track within that database. Die Tabellendefinition muss in keiner Weise geändert werden, und es werden keine Trigger erstellt.The table definition does not have to be changed in any way, and no triggers are created.

Nachdem die Änderungsnachverfolgung für eine Tabelle konfiguriert wurde, werden bei der Verwendung einer DML-Anweisung, die sich auf die Zeilen in der Tabelle auswirkt, Änderungsinformationen für jede geänderte Zeile aufgezeichnet.After change tracking is configured for a table, any DML statement that affects rows in the table will cause change tracking information for each modified row to be recorded. Zum Abfragen von geänderten Zeilen und Informationen zu den Änderungen können Sie Änderungsnachverfolgungsfunktionenverwenden.To query for the rows that have changed and to obtain information about the changes, you can use change tracking functions.

Die Werte der Primärschlüsselspalte sind die einzigen Informationen aus der nachverfolgten Tabelle, die mit den Änderungsinformationen aufgezeichnet werden.The values of the primary key column is only information from the tracked table that is recorded with the change information. Diese Werte identifizieren die Zeilen, die geändert wurden.These values identify the rows that have been changed. Zum Abrufen der aktuellen Daten dieser Zeilen kann eine Anwendung die Werte der Primärschlüsselspalte verwenden, um die Quelltabelle mit der nachverfolgten Tabelle zu verknüpfen.To obtain the latest data for those rows, an application can use the primary key column values to join the source table with the tracked table.

Informationen zu den an den einzelnen Zeilen vorgenommenen Änderungen können auch mithilfe der Änderungsnachverfolgung abgerufen werden.Information about the change that was made to each row can also be obtained by using change tracking. Dazu zählen z. B. der Typ des DML-Vorgangs, der die Änderung (Einfügung, Update oder Löschung) bewirkt hat, oder die Spalten, die im Rahmen eines Updatevorgangs geändert wurden.For example, the type of DML operation that caused the change (insert, update, or delete) or the columns that were changed as part of an update operation.

Bereinigen der ÄnderungsnachverfolgungChange Tracking Cleanup

Informationen der Änderungsnachverfolgung für alle Tabellen (für die Änderungsnachverfolgung aktiviert ist) werden in einem speicherinternen Rowstore gespeichert.Change tracking information for all tables (enabled for Change Tracking) is stored in an in-memory rowstore. Die Daten der Änderungsnachverfolgung für jede Tabelle, für die Änderungsnachverfolgung aktiviert ist, werden bei jedem Prüfpunkt aus dem speicherinternen Rowstore in die entsprechende interne Tabelle auf dem Datenträger geleert.Change tracking data associated with each table enabled for Change Tracking is flushed on every checkpoint from the in-memory rowstore to the corresponding on-disk internal table. Während des Prüfpunkts wird auch der speicherinterne Rowstore gelöscht, nachdem die Zeilen in die Tabellen auf dem Datenträger verschoben werden.During checkpoint, the in-memory rowstore is also purged after the rows are moved to the on-disk tables.

Jede Tabelle, für die Änderungsnachverfolgung aktiviert ist, verfügt über eine interne Tabelle auf dem Datenträger, die von Änderungsnachverfolgungsfunktionen verwendet wird, um die Version und die Zeilen zu bestimmen, die seit einer bestimmten Version geändert wurden.Each table that is enabled for Change Tracking has an internal on-disk table which is used by Change Tracking functions to determine the change version and the rows that have changed since a particular version. Jedes Mal, wenn der Thread Auto Cleanup aufgerufen wird, scannt er alle Benutzerdatenbanken auf der SQL Server-Instanz, um die Datenbanken zu identifizieren, für die Änderungsnachverfolgung aktiviert ist.Every time the auto cleanup thread wakes up, it scans all the user databases on the SQL Server instance to identify the change tracking enabled databases. Entsprechend der eingestellten Beibehaltungsdauer der Datenbank werden die abgelaufenen Datensätze jeder internen Tabelle auf dem Datenträger gelöscht.Based on the retention period setting of the database, each internal on-disk table is purged of its expired records.

In den Service Packs für SQL Server 2014SQL Server 2014 und SQL Server 2016SQL Server 2016 wurde eine gespeicherte Prozedur für das Ausführen einer manuellen Bereinigung für die interne Änderungsnachverfolgung interner Tabellen hinzugefügt.A stored procedure was added in Service Packs for SQL Server 2014SQL Server 2014 and SQL Server 2016SQL Server 2016 for performing manual cleanup for the internal Change Tracking internal tables. Weitere Informationen zur gespeicherten Prozedur finden Sie unter KB173157.More information about the stored procedure is available in KB173157.

Siehe auchSee Also

Aktivieren und Deaktivieren der Änderungsnachverfolgung (SQL Server) Enable and Disable Change Tracking (SQL Server)
Verwenden der Änderungsnachverfolgung (SQL Server) Work with Change Tracking (SQL Server)
Verwalten der Änderungsnachverfolgung (SQL Server) Manage Change Tracking (SQL Server)
Nachverfolgen von Datenänderungen (SQL Server) Track Data Changes (SQL Server)