SQL Server Change Data Capture to funkcja, która odczytuje dane historyczne z dzienników transakcji SQL Server i przechowuje je w specjalnej tabeli.
Dzięki zastosowaniu specjalnych funkcji wartości tabeli (TVF) umożliwia to użytkownikowi wysłanie zapytania do tych danych, co umożliwia albo uzyskanie wszystkich zmian w konkretnej tabeli, albo tylko zmian netto wynikających ze zmian w określonym czasie.
CDC ma pewne zalety
- Można go skonfigurować tak, aby śledził tylko niektóre tabele lub kolumny.
- Jest w stanie obsłużyć zmiany modelu do pewnego stopnia.
- Nie wpływa to na wydajność tak mocno, jak wyzwalacze, ponieważ działa z dziennikami transakcji.
- Można go łatwo włączyć / wyłączyć i nie wymaga dodatkowych kolumn w tabeli, które należy śledzić.
Ma również pewne wady:
- Ilość danych historycznych może szybko stać się ogromna.
- Nie możesz śledzić, kto dokonał zmian (przynajmniej nie w przypadku usuwania).
- Nadrobienie danych historycznych zajmuje trochę czasu, ponieważ opiera się na dziennikach transakcji.
- To zależy od agenta SQL Server. Jeśli agent nie działa lub ulega awarii, historia nie jest śledzona.
Dużo czytałem o CDC i chociaż wiem, jak go używać, wciąż nie jestem pewien, czy jest to właściwe narzędzie dla mnie.
- Do jakich zadań / scenariuszy CDC jest właściwym narzędziem? (np. Zezwalanie użytkownikom na przywrócenie obiektu danych do określonego momentu w czasie? Audyt? Wyświetlanie pełnej historii danych?)
- Kiedy raczej nie powinieneś używać CDC, ale skorzystać z niestandardowego rozwiązania opartego na wyzwalaczach?
- Czy można używać CDC w operacyjnej bazie danych i korzystać z danych CDC w działającej aplikacji? (np. pokazanie go użytkownikowi końcowemu) Czy to wyraźnie niewłaściwe użycie tej funkcji?
Często słyszę, że CDC to narzędzie do inspekcji, ale czy nie po to służy SQL Server Audit ? Czy oba są różnymi narzędziami do tego samego zadania? A może CDC może być używany do innych celów?
Mój obecny scenariusz jest taki, że poproszono mnie o zbudowanie niezawodnej struktury danych, która ma być podstawą wielu przyszłych aplikacji. Dokładne wymagania są rozmyte, ale jednym z nich jest to, że powinien móc śledzić historię danych i przywracać starsze wpisy wraz ze wszystkimi powiązanymi danymi z innych tabel. W tej chwili oceniam CDC jako opcję, ale nie jestem pewien, czy jest to właściwy sposób, ponieważ tak naprawdę nie mogę znaleźć zalecanych przypadków użycia.
Chociaż doceniam porady dotyczące mojego konkretnego scenariusza, odpowiedzi powinny zawierać ogólne porady dotyczące tego, kiedy i kiedy nie należy używać funkcji przechwytywania danych.