Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:programu SQL Server
Azure SQL Managed Instance
W tym artykule opisano sposób interakcji następujących funkcji z przechwytywaniem danych zmian dla programu SQL Server i usługi Azure SQL Managed Instance. Aby uzyskać informacje o usłudze Azure SQL Database, zobacz CDC with Azure SQL Database.
Śledzenie zmian
Przechwytywanie zmian danych i śledzenie zmian można włączyć w tej samej bazie danych. Nie są wymagane żadne specjalne zalecenia. Aby uzyskać więcej informacji, zobacz Praca z śledzeniem zmian.
Dublowanie bazy danych
Bazę danych włączoną do przechwytywania zmian można dublować. Aby upewnić się, że przechwytywanie i czyszczenie są wykonywane automatycznie po awarii systemu, wykonaj następujące kroki:
Upewnij się, że program SQL Server Agent jest uruchomiony w nowym wystąpieniu głównego serwera.
Utwórz zadanie przechwytywania i zadanie oczyszczania dla nowej głównej bazy danych (dawna baza danych lustrzana). Aby utworzyć zadania, użyj procedury składowanej sp_cdc_add_job.
Aby wyświetlić bieżącą konfigurację zadania oczyszczania lub przechwytywania, użyj procedury składowanej sys.sp_cdc_help_jobs na nowym głównym wystąpieniu serwera. W przypadku danej bazy danych zadanie przechwytywania nosi nazwę cdc.database_name_capture, a zadanie oczyszczania nosi nazwę cdc.database_name_cleanup, gdzie database_name jest nazwą bazy danych.
Aby zmienić konfigurację zadania, użyj procedury składowanej sys.sp_cdc_change_job.
Aby uzyskać informacje na temat dublowania baz danych, zobacz Database Mirroring (SQL Server).
Replikacja transakcyjna
Przechwytywanie zmian danych i replikacja transakcyjna mogą współistnieć w tej samej bazie danych, ale wypełnianie tabel zmiany jest obsługiwane inaczej, gdy obie funkcje są włączone. Przechwytywanie zmian danych i replikacja transakcji zawsze używają tej samej procedury, sp_replcmds, aby odczytać zmiany z dziennika transakcji. Gdy funkcja przechwytywania zmian danych jest włączona samodzielnie, zadanie agenta programu SQL Server wywołuje sp_replcmds. Gdy obie funkcje są włączone w tej samej bazie danych, Agent Log Reader wywołuje sp_replcmds. Ten agent wypełnia zarówno tabele zmian, jak i tabele bazy danych dystrybucji. Aby uzyskać więcej informacji, zobacz Agent odczytu dziennika replikacji.
Rozważmy scenariusz, w którym przechwytywanie zmian danych jest włączone w bazie danych AdventureWorks2022
, a dwie tabele są włączone do przechwytywania. Aby zapełnić tabele zmian, zadanie przechwytywania wywołuje sp_replcmds. Baza danych jest włączona na potrzeby replikacji transakcyjnej, a publikacja została utworzona. Teraz dla bazy danych jest tworzony agent czytnika dzienników, a zadanie przechwytywania jest usuwane. Agent czytnika logów kontynuuje skanowanie logu od ostatniego numeru sekwencji logu, który został zatwierdzony w tabeli zmian. Zapewnia to spójność danych w tabelach zmian. Jeśli replikacja transakcyjna jest wyłączona w tej bazie danych, agent czytnika dzienników zostanie usunięty i zadanie przechwytywania zostanie ponownie utworzone.
Nota
Gdy agent czytnika dzienników jest używany zarówno do przechwytywania zmian danych, jak i replikacji transakcyjnej, zreplikowane zmiany są najpierw zapisywane w bazie danych dystrybucji. Następnie przechwycone zmiany są zapisywane w tabelach zmian. Obie operacje są zatwierdzane razem. Jeśli występują jakiekolwiek opóźnienia w zapisie do bazy danych dystrybucji, zanim zmiany pojawią się w tabelach zmian, wystąpi odpowiednie opóźnienie.
Opcja proc exec dla replikacji transakcyjnej nie jest dostępna, gdy przechwytywanie zmian danych jest włączone.
Przywracanie lub dołączanie bazy danych
Program SQL Server używa następującej logiki, aby określić, czy przechwytywanie zmian danych pozostaje włączone po przywróceniu lub dołączeniu bazy danych:
Jeśli baza danych zostanie przywrócona na tym samym serwerze o tej samej nazwie bazy danych, przechwytywanie zmian danych pozostanie włączone.
Jeśli baza danych zostanie przywrócona na innym serwerze, domyślnie przechwytywanie zmian danych zostanie wyłączone i wszystkie powiązane metadane zostaną usunięte.
Aby zachować przechwytywanie zmian danych, użyj opcji KEEP_CDC podczas przywracania bazy danych. Aby uzyskać więcej informacji na temat tej opcji, zobacz RESTORE.
Jeśli baza danych jest odłączona i dołączona do tego samego serwera lub innego serwera, funkcja przechwytywania zmian danych pozostaje włączona.
Jeśli baza danych jest dołączona lub przywrócona z opcją KEEP_CDC do dowolnej edycji innej niż Standardowa, Enterprise lub SQL Managed Instance, operacja jest blokowana, ponieważ przechwytywanie zmian danych wymaga wersji SQL Server Standard, Enterprise lub SQL Managed Instance. Zostanie wyświetlony komunikat o błędzie 934:
SQL Server cannot load database '%.*ls' because change data capture is enabled. The currently installed edition of SQL Server does not support change data capture. Either restore database without KEEP_CDC option, or upgrade the instance to one that supports change data capture.
Za pomocą sys.sp_cdc_disable_db można usunąć przechwytywanie zmian danych z przywróconej lub dołączonej bazy danych.
Po przywróceniu bazy danych w usłudze Azure SQL Managed Instance usługa CDC pozostanie włączona, ale należy upewnić się, że zadania skanowania i oczyszczania zostaną dodane i uruchomione. Zadania można dodać ręcznie, uruchamiając sys.sp_cdc_add_job.
Zawarte bazy danych
Przechwytywanie zmian danych nie jest obsługiwane w bazach danych zawartych .
Grupy dostępności
Gdy używasz zawsze włączonych grup dostępności, należy zmienić wyliczenie w replice pomocniczej, aby zmniejszyć obciążenie dysku na serwerze podstawowym.
Indeksy kolumnowe
Nie można włączyć przechwytywania zmian danych w tabelach z klastrowanym indeksem magazynu kolumn. Począwszy od programu SQL Server 2016, można go włączyć w tabelach z nieklastrowanym indeksem magazynu kolumn.
Obliczone kolumny
Usługa CDC nie obsługuje wartości kolumn obliczeniowych, nawet jeśli kolumna obliczeniowa jest zdefiniowana jako trwała. Obliczone kolumny uwzględnione w wystąpieniu przechwytywania zawsze mają wartość NULL
. To zachowanie jest zamierzone, a nie usterka.
Linux
Usługa CDC jest obsługiwana w przypadku programu SQL Server 2017 w systemie Linux, począwszy od aktualizacji CU18 i programu SQL Server 2019 w systemie Linux.