cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL)
Gibt eine Zeile für jede auf die Quelltabelle innerhalb des angegebenen Bereichs der Protokollfolgenummer (Log Sequence Number, LSN) angewendete Änderung an. Wenn an einer Quellzeile während des Intervalls mehrere Änderungen vorgenommen wurden, wird jede Änderung im zurückgegebenen Resultset dargestellt. Zusätzlich zum Zurückgeben der Änderungsdaten stellen vier Metadatenspalten die Informationen bereit, die Sie zum Anwenden der Änderungen auf eine andere Datenquelle benötigen. Über Zeilenfilterungsoptionen werden der Inhalt der Metadatenspalten sowie die im Resultset zurückgegebenen Zeilen bestimmt. Wenn die Filteroption 'all' angegeben ist, verfügt jede Änderung über genau eine Zeile, um die Änderung zu identifizieren. Wenn die Option 'all update old' angegeben ist, werden die Updatevorgänge in zwei Zeilen dargestellt: Eine enthält die Werte der aufgezeichneten Spalten vor dem Update und die andere enthält die Werte der aufgezeichneten Spalten nach dem Update.
Diese Enumerationsfunktion wird zu dem Zeitpunkt erstellt, zu dem eine Quelltabelle für Change Data Capture aktiviert wird. Der Funktionsname wird abgeleitet und verwendet das Format **cdc.fn_cdc_get_all_changes_**capture_instance, wobei capture_instance der für die Aufzeichnungsinstanz angegebene Wert zu dem Zeitpunkt ist, zu dem die Quelltabelle für Change Data Capture aktiviert wird.
Syntax
cdc.fn_cdc_get_all_changes_capture_instance ( from_lsn , to_lsn , '<row_filter_option>' )
<row_filter_option> ::=
{ all
| all update old
}
Argumente
from_lsn
Der LSN-Wert, der den unteren Endpunkt des LSN-Bereichs darstellt, der im Resultset enthalten sein soll. from_lsn ist binary(10).Es sind nur Zeilen in der Änderungstabelle cdc.[capture_instance]_CT mit einem Wert in __$start_lsn größer oder gleich from_lsn im Resultset enthalten.
to_lsn
Der LSN-Wert, der den oberen Endpunkt des LSN-Bereichs darstellt, der im Resultset enthalten sein soll. to_lsn ist binary(10).Es sind nur Zeilen in der Änderungstabelle cdc.[capture_instance]_CT mit einem Wert in __$start_lsn kleiner oder gleich from_lsn oder gleich to_lsn im Resultset enthalten.
<row_filter_option> ::= { all | all update old }
Eine Option, die den Inhalt der Metadatenspalten sowie die im Resultset zurückgegebenen Zeilen bestimmt.Eine der folgenden Optionen ist möglich:
all
Gibt alle Änderungen innerhalb des angegebenen LSN-Bereichs zurück. Bei Änderungen aufgrund eines Updatevorgangs gibt diese Option nur die Zeilen zurück, die die neuen Werte enthalten, nachdem das Update angewendet wurde.all update old
Gibt alle Änderungen innerhalb des angegebenen LSN-Bereichs zurück. Bei Änderungen aufgrund eines Updatevorgangs gibt diese Option sowohl die Zeile zurück, die die Spaltenwerte vor dem Update enthält, als auch die Zeile, die die Spaltenwerte nach dem Update enthält.
Zurückgegebene Tabelle
Spaltenname |
Datentyp |
Beschreibung |
---|---|---|
__$start_lsn |
binary(10) |
Commit-LSN, die der Änderung zugeordnet ist, die die Commitreihenfolge der Änderung beibehält. Änderungen, für die ein Commit in derselben Transaktion ausgeführt wurde, verwenden denselben Commit-LSN-Wert. |
__$seqval |
binary(10) |
Sequenzwert, der verwendet wird, um Änderungen an einer Zeile innerhalb einer Transaktion zu sortieren. |
__$operation |
int |
Identifiziert den Vorgang der Datenbearbeitungssprache (Data Manipulation Language, DML), der erforderlich ist, um die Zeile der Änderungsdaten auf die Zieldatenquelle anzuwenden. Einer der folgenden Werte ist möglich: 1 = Löschen 2 = Einfügen 3 = Update (die aufgezeichneten Spaltenwerte liegen vor dem Aktualisierungsvorgang). Dieser Wert ist nur gültig, wenn die Zeilenfilteroption 'all update old' angegeben ist. 4 = Update (die aufgezeichneten Spaltenwerte liegen nach dem Aktualisierungsvorgang). |
__$update_mask |
varbinary(128) |
Eine Bitmaske mit einem Bit, dass den einzelnen aufgezeichneten Spalten entspricht, die für die Aufzeichnungsinstanz identifiziert wurden. Für diesen Wert sind alle definierten Bits auf 1 gesetzt, wenn __$operation = 1 oder 2 ist. Wenn __$operation = 3 oder 4, werden nur die Bits auf 1 gesetzt, die geänderten Spalten entsprechen. |
<captured source table columns> |
variiert |
Bei den verbleibenden Spalten, die von der Funktion zurückgegeben werden, handelt es sich um die aufgezeichneten Spalten, die beim Erstellen der Aufzeichnungsinstanz identifiziert wurden. Wenn in der Liste der aufgezeichneten Spalten keine Spalten angegeben wurden, werden alle Spalten in der Quelltabelle zurückgegeben. |
Berechtigungen
Erfordert die Mitgliedschaft in der festen Serverrolle sysadmin oder der festen Datenbankrolle db_owner. Für alle anderen Benutzer ist die SELECT-Berechtigung für alle aufgezeichneten Spalten in der Quelltabelle und, wenn eine Gatingrolle für die Aufzeichnungsinstanz definiert wurde, eine Mitgliedschaft in dieser Datenbankrolle erforderlich. Wenn der Aufrufer keine Berechtigung zum Anzeigen der Quelldaten besitzt, gibt die Funktion Fehler 229 zurück ("Die SELECT-Berechtigung wurde für das 'fn_cdc_get_all_changes_...'-Objekt, '<DatabaseName>'-Datenbank, 'cdc'-Schema, verweigert.").
Hinweise
Wenn der angegebene LSN-Bereich nicht in den Zeitraum der Änderungsnachverfolgung für die Aufzeichnungsinstanz fällt, gibt die Funktion Fehler 208 zurück ("Für die 'cdc.fn_cdc_get_all_changes'-Prozedur oder -Funktion wurden zu wenig Argumente bereitgestellt").
Spalten vom Datentyp image, text und ntext wird immer ein NULL zugewiesen, wenn __$operation = 1 oder __$operation = 3. Spalten vom Datentyp varbinary(max), varchar(max) oder nvarchar(max) wird immer ein NULL zugewiesen, wenn __$operation = 3, sofern die Spalte nicht während der Aktualisierung geändert wurde. Wenn __$operation = 1, werden diesen Spalten ihr Wert zur Zeit der Löschung zugewiesen. Berechnete Spalten in einer Aufzeichnungsinstanz besitzen immer den Wert NULL.
Beispiele
Es sind mehrere SQL Server Management Studio-Vorlagen verfügbar, die die Verwendung der Change Data Capture-Abfragefunktionen veranschaulichen. Diese Vorlagen stehen in Management Studio im Menü Sicht zur Verfügung. Weitere Informationen finden Sie unter Verwenden von SQL Server Management Studio-Vorlagen.
Im folgenden Beispiel wird die Enumerate All Changes for Valid Range Template veranschaulicht. Darin werden mit der Funktion cdc.fn_cdc_get_all_changes_HR_Department alle derzeit verfügbaren Änderungen für die Aufzeichnungsinstanz HR_Department gemeldet, die für die Quelltabelle HumanResources.Department in der AdventureWorks2008R2-Datenbank definiert ist.
-- ==================================================
-- Enumerate All Changes for Valid Range Template
-- ==================================================
USE AdventureWorks2008R2;
GO
DECLARE @from_lsn binary(10), @to_lsn binary(10)
SET @from_lsn =
sys.fn_cdc_get_min_lsn('HR_Department')
SET @to_lsn = sys.fn_cdc_get_max_lsn()
SELECT * FROM cdc.fn_cdc_get_all_changes_HR_Department
(@from_lsn, @to_lsn, N'all');
GO
Siehe auch