Informacje o usłudze Change Tracking (SQL Server)
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
W tym artykule opisano funkcję śledzenia zmian dla programu SQL Server, która jest uproszczonym rozwiązaniem, które zapewnia wydajny mechanizm śledzenia zmian dla aplikacji.
Aby rozpocząć, zapoznaj się z Skonfiguruj śledzenie zmian.
Przegląd
Wcześniej, aby umożliwić aplikacjom wykonywanie zapytań o zmiany danych w bazie danych i uzyskiwanie dostępu do informacji związanych ze zmianami, deweloperzy aplikacji musieli zaimplementować niestandardowe mechanizmy śledzenia zmian. Te mechanizmy zwykle obejmowały wiele pracy, takich jak kombinacja wyzwalaczy, sygnatura czasowa kolumn, nowe tabele do przechowywania informacji śledzenia i niestandardowych procesów oczyszczania. Funkcja śledzenia zmian programu SQL Server upraszcza ten proces, co ułatwia identyfikowanie informacji związanych ze zmianami bez konieczności używania rozwiązania niestandardowego.
Różne typy aplikacji mają różne wymagania dotyczące ilości informacji potrzebnych na temat zmian. Aplikacje mogą używać śledzenia zmian, aby odpowiedzieć na następujące pytania dotyczące zmian wprowadzonych w tabeli użytkowników:
Które wiersze zostały zmienione w tabeli użytkownika?
Wymagany jest tylko fakt, że wiersz uległ zmianie, a nie ile razy wiersz uległ zmianie lub wartości wszelkich zmian pośrednich.
Najnowsze dane można uzyskać bezpośrednio z tabeli, która jest śledzona.
Czy wiersz został zmieniony?
- Fakt, że wiersz uległ zmianie, a informacje o zmianie muszą być dostępne i zarejestrowane w czasie, gdy zmiana została wprowadzona w tej samej transakcji.
Notatka
Jeśli aplikacja wymaga informacji o wszystkich wprowadzonych zmianach i wartościach pośrednich zmienionych danych, użycie funkcji przechwytywania zmian zamiast śledzenia zmian może być odpowiednie. Aby uzyskać więcej informacji, zobacz About Change Data Capture (SQL Server).
aplikacje synchronizacji One-Way i Two-Way
Aplikacje, które muszą synchronizować dane z wystąpieniem silnika bazy danych SQL Server, muszą mieć możliwość wykonywania zapytań o zmiany. Śledzenie zmian może służyć jako podstawa zarówno dla jednokierunkowych, jak i dwukierunkowych aplikacji synchronizacji.
aplikacje synchronizacji One-Way
Aplikacje synchronizacji jednokierunkowej, takie jak klient lub aplikacja buforowania warstwy środkowej, mogą być tworzone przy użyciu śledzenia zmian. Jak pokazano na poniższej ilustracji, aplikacja buforowania wymaga, aby dane były przechowywane w silniku bazy danych i buforowane w innych magazynach danych. Aplikacja musi być w stanie zachować pamięć podręczną up-to—date z wszelkimi zmianami wprowadzonych w tabelach bazy danych. Nie ma żadnych zmian do przekazania z powrotem do silnika bazy danych.
aplikacje synchronizacji Two-Way
Aplikacje synchronizacji dwukierunkowej można również skompilować, które korzystają ze śledzenia zmian. W tym scenariuszu dane w wystąpieniu silnika bazodanowego są synchronizowane z co najmniej jednym magazynem danych. Dane w tych magazynach można zaktualizować, a zmiany muszą zostać zsynchronizowane z powrotem z silnikiem bazy danych.
Dobrym przykładem aplikacji synchronizacji dwukierunkowej jest czasami połączona aplikacja. W tym typie aplikacji aplikacja kliencka wykonuje zapytania i aktualizuje magazyn lokalny. Gdy połączenie jest dostępne między klientem a serwerem, aplikacja synchronizuje się z serwerem i zmienia przepływy danych w obu kierunkach.
Aplikacje synchronizacji dwukierunkowej muszą mieć możliwość wykrywania konfliktów. Konflikt występuje, jeśli te same dane zostały zmienione w obu magazynach danych w czasie między synchronizacjami. Dzięki możliwości wykrywania konfliktów aplikacja może upewnić się, że zmiany nie zostaną utracone.
Jak działa śledzenie zmian
Aby skonfigurować śledzenie zmian, można użyć instrukcji DDL lub programu SQL Server Management Studio. Aby uzyskać więcej informacji, zobacz Włączanie i Wyłączanie Śledzenia Zmian. Aby śledzić zmiany, należy najpierw włączyć śledzenie zmian dla bazy danych, a następnie włączyć dla tabel, które mają być śledzone w tej bazie danych. Definicja tabeli nie musi być w żaden sposób zmieniana i nie są tworzone żadne wyzwalacze.
Po skonfigurowaniu śledzenia zmian dla tabeli każda instrukcja DML, która ma wpływ na wiersze w tabeli, spowoduje zarejestrowanie informacji śledzenia zmian dla każdego zmodyfikowanego wiersza. Aby wykonać zapytanie dotyczące wierszy, które uległy zmianie i uzyskać informacje o zmianach, możesz użyć funkcji śledzenia zmian.
Wartości kolumny klucza podstawowego są jedynymi informacjami ze śledzonej tabeli, które są rejestrowane wraz z informacjami o zmianach. Te wartości identyfikują zmienione wiersze. Aby uzyskać najnowsze dane dla tych wierszy, aplikacja może używać wartości kolumn klucza podstawowego do łączenia tabeli źródłowej z śledzonej tabeli.
Informacje o zmianie wprowadzonej w każdym wierszu można również uzyskać przy użyciu śledzenia zmian. Na przykład typ operacji DML, która spowodowała zmianę (wstawianie, aktualizowanie lub usuwanie) lub kolumn, które zostały zmienione w ramach operacji aktualizacji.
Wszystkie operacje DML są śledzone, nawet jeśli wartość kolumny nie ulegnie zmianie. Jeśli na przykład instrukcja update ustawia kolumnę na taką samą wartość, jaką już ma, kolumna jest nadal uważana za zmienioną.
Czyszczenie śledzenia zmian
Informacje o śledzeniu zmian dla wszystkich tabel (włączone dla śledzenia zmian) są przechowywane w magazynie wierszy w pamięci. Dane śledzenia zmian skojarzone z każdą tabelą włączoną dla śledzenia zmian są opróżniane w każdym punkcie kontrolnym z magazynu wierszy w pamięci do odpowiedniej wewnętrznej tabeli na dysku. Podczas punktu kontrolnego magazyn wierszy w pamięci jest również czyszczone po przeniesieniu wierszy do tabel na dysku.
Każda tabela włączona dla funkcji Change Tracking zawiera wewnętrzną tabelę na dysku, która jest używana przez funkcje śledzenia zmian w celu określenia wersji zmiany i wierszy, które uległy zmianie od określonej wersji. Za każdym razem, gdy wątek automatycznego czyszczenia budzi się, skanuje wszystkie bazy danych użytkowników w wystąpieniu programu SQL Server, aby zidentyfikować bazy danych z włączonym śledzeniem zmian. Na podstawie ustawienia okresu przechowywania bazy danych każda wewnętrzna tabela na dysku jest czyszczona z wygasłych rekordów.
Procedura składowana została dodana w dodatkach Service Pack dla SQL Server 2014 (12.x) i SQL Server 2016 (13.x) na potrzeby ręcznego czyszczenia wewnętrznych tabel śledzenia zmian. Więcej informacji o procedurze składowanej znajduje się w KB173157.