Verwalten der Änderungsnachverfolgung (SQL Server)

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzSQL-Datenbank in Microsoft Fabric

In diesem Artikel wird beschrieben, wie Sie die Änderungsnachverfolgung verwalten. Außerdem werden die Vorgehensweisen zum Konfigurieren der Sicherheit und zum Ermitteln der Auswirkungen der Änderungsnachverfolgung auf Speicherung und Leistung beschrieben.

Verwalten der Änderungsnachverfolgung

In den nachfolgenden Abschnitten sind Katalogsichten, Berechtigungen und Einstellungen aufgeführt, die für die Verwaltung der Änderungsnachverfolgung relevant sind.

Katalogansichten

Um zu ermitteln, welche Tabellen und Datenbanken die Änderungsnachverfolgung aktiviert haben, verwenden Sie die folgenden Katalogansichten:

Zusätzlich werden in der sys.internal_tables -Katalogsicht die internen Tabellen aufgeführt, die bei aktivierter Änderungsnachverfolgung für eine Benutzertabelle erstellt werden.

Sicherheit

Für den Zugriff auf Änderungsnachverfolgungsinformationen mit den Änderungsnachverfolgungsfunktionenmuss der Prinzipal über die folgenden Berechtigungen verfügen:

  • SELECT Berechtigung für mindestens die Primärschlüsselspalten in der tabelle mit Änderungsnachverfolgung für die Tabelle, die abgefragt wird.

  • VIEW CHANGE TRACKING Berechtigung für die Tabelle, für die Änderungen abgerufen werden. Die VIEW CHANGE TRACKING Berechtigung ist aus den folgenden Gründen erforderlich:

    • Datensätze zur Änderungsnachverfolgung enthalten Informationen zu Zeilen, die gelöscht werden. Die Datensätze verwenden die Primärschlüsselwerte der gelöschten Zeilen. Einem Sicherheitsprinzipal kann die Berechtigung für eine Tabelle mit Änderungsnachverfolgung SELECT erteilt werden, nachdem einige sensible Daten gelöscht wurden. In diesem Fall möchten Sie nicht, dass dieser Prinzipal mithilfe der Änderungsnachverfolgung auf die gelöschten Informationen zugreifen kann.

    • Informationen zur Änderungsnachverfolgung können Informationen darüber speichern, welche Spalten durch Aktualisierungsvorgänge geändert werden. Einem Prinzipal kann der Zugriff auf eine Spalte verweigert werden, die vertrauliche Informationen enthält. Da jedoch Informationen zur Änderungsnachverfolgung verfügbar sind, kann ein Prinzipal bestimmen, dass ein Spaltenwert aktualisiert wird, der Prinzipal jedoch nicht den Wert der Spalte bestimmen kann.

Verständnis des Aufwands bei der Änderungsnachverfolgung

Wenn Sie die Änderungsnachverfolgung für eine Tabelle aktivieren, wirkt sich dies auf einige Verwaltungsvorgänge aus. In der folgenden Tabelle sind die Vorgänge und Auswirkungen aufgeführt, die Sie berücksichtigen sollten.

Vorgang Wenn die Änderungsnachverfolgung aktiviert ist
DROP TABLE Alle Änderungsnachverfolgungsinformationen für die gelöschte Tabelle werden entfernt.
ALTER TABLE DROP CONSTRAINT Ein Versuch, die PRIMARY KEY Einschränkung abzulegen, schlägt fehl. Sie müssen die Änderungsnachverfolgung deaktivieren, bevor Sie eine PRIMARY KEY Einschränkung ablegen können.
ALTER TABLE DROP COLUMN Wenn eine Spalte, die Sie löschen, Teil des Primärschlüssels ist, ist das Löschen der Spalte nicht zulässig, unabhängig davon, ob die Änderungsnachverfolgung aktiviert ist.

Wenn die spalte, die Sie ablegen, nicht Teil des Primärschlüssels ist, ist das Ablegen der Spalte erfolgreich. Sie sollten jedoch zunächst die Auswirkungen auf jede Anwendung verstehen, die diese Daten synchronisiert. Ist für die Tabelle die Nachverfolgung von Spaltenänderungen aktiviert, kann die gelöschte Spalte weiterhin als Teil der Änderungsnachverfolgungsinformationen zurückgegeben werden. Es liegt in der Verantwortung der Anwendung, die verworfene Spalte zu behandeln.
ALTER TABLE ADD COLUMN Wenn Sie einer Tabelle mit aktivierter Änderungsverfolgung eine neue Spalte hinzufügen, wird das Hinzufügen dieser Spalte nicht nachverfolgt. Nur die Updates und Änderungen, die an der neuen Spalte vorgenommen werden, werden nachverfolgt.
ALTER TABLE ALTER COLUMN Datentypänderungen einer Nicht-Primärschlüsselspalte werden nicht nachverfolgt.
ALTER TABLE SWITCH Das Wechseln einer Partition schlägt fehl, wenn eine oder beide Tabellen die Änderungsnachverfolgung aktiviert haben.
DROP INDEX, or ALTER INDEX DISABLE Der Index, der den Primärschlüssel erzwingt, kann nicht gelöscht oder deaktiviert werden.
TRUNCATE TABLE Sie können eine Tabelle abschneiden, die die Änderungsnachverfolgung aktiviert hat. Die Zeilen, die der Vorgang löscht, werden jedoch nicht nachverfolgt, und die mindestens gültige Version wird aktualisiert. 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. Dieser Fall entspricht dem Deaktivieren der Änderungsnachverfolgung für die Tabelle und deren anschließendem erneuten Aktivieren.

Durch die Verwendung der Änderungsnachverfolgung werden DML-Vorgängen zusätzlichen Aufwand hinzugefügt, da der Vorgang Änderungsnachverfolgungsinformationen speichert.

Auswirkungen auf DML

Die Änderungsnachverfolgung ist optimiert, um den Leistungsaufwand für DML-Vorgänge zu minimieren. Der inkrementelle Leistungsaufwand, der im Lieferumfang der Änderungsnachverfolgung für eine Tabelle enthalten ist, ähnelt dem Aufwand, der beim Erstellen und Verwalten eines Indexes für eine Tabelle auftritt.

Für jede Zeile, die ein DML-Vorgang ändert, fügt das System der internen Änderungsnachverfolgungstabelle eine Zeile hinzu. Die Auswirkung dieser Aktion im Verhältnis zum DML-Vorgang hängt von verschiedenen Faktoren ab, z. B.:

  • Anzahl der Primärschlüsselspalten

  • Die Datenmenge, die in der Zeile der Benutzertabelle geändert wurde

  • Die Anzahl der Vorgänge, die in einer Transaktion ausgeführt wurden

Die Snapshotisolation wirkt sich bei Verwendung auch auf die Leistung für alle DML-Vorgänge aus, unabhängig davon, ob die Änderungsnachverfolgung aktiviert ist oder nicht.

Auswirkungen auf die Speicherung

Änderungsnachverfolgungsdaten werden in den folgenden Typen von internen Tabellen gespeichert:

  • Interne Änderungstabelle

    Jede Benutzertabelle mit aktivierter Änderungsnachverfolgung erhält eine eigene interne Änderungstabelle.

  • Interne Transaktionstabelle

    Die Datenbank verfügt über eine interne Transaktionstabelle.

Diese internen Tabellen beeinflussen die Speicheranforderungen folgendermaßen:

  • Für jede Änderung an jeder Zeile in der Benutzertabelle fügt die Änderungsnachverfolgung der internen Änderungstabelle eine Zeile hinzu. Diese Zeile hat einen geringen festen Overhead plus einen variablen Overhead, der der Größe der Primärschlüsselspalten entspricht. Die Zeile kann optionale, von einer Anwendung festgelegte Kontextinformationen enthalten. Wenn Sie die Spaltennachverfolgung aktivieren, benötigt jede geänderte Spalte 4 Byte in der Nachverfolgungstabelle.

  • Für jede bestätigte Transaktion fügt die Änderungsnachverfolgung einer internen Transaktionstabelle eine Zeile hinzu.

Wie bei anderen internen Tabellen auch können Sie den für die Änderungsnachverfolgungstabelle verwendeten Speicher mit der gespeicherten Prozedur sp_spaceused festlegen. Sie können die Namen der internen Tabellen mithilfe der sys.internal_tables Katalogansicht abrufen, wie im folgenden Beispiel gezeigt.

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