CDC

Jedną z dość sympatycznych opcji SQL Servera 2012 jest możliwość automatycznego włączenia (lub wyłączenia) rejestracji zmian w danych w dowolnej tabeli w bazie. Opcja ta nazywa się CDC (po naszemu: Change Data Capture) i polega na tym, że zmiany w danych są rejestrowane w osobnej bazie, specjalnie do tego asygnowanej.

Przy okazji: funkcja nie jest całkiem nowa. CDC istniało już w wersji 2008.

I tu jest malutki haczyk: próba skopiowania bazy z włączonym CDC na inny serwer nie powiedzie się, jeżeli nie użyjemy odrobiny magii. Miałem kiedyś (nie)przyjemność przechodzić przez ten proces, dziś szybciutko podzielę się z Czytelnikami szczegółami.

Tradycyjna metoda na skopiowanie bazy między serwerami polega na tym, że wykonujemy kopię zapasową bazy na serwerze źródłowym, następnie kopiujemy tę kopię (gra słów niezamierzona) na serwer docelowy, gdzie odtwarzamy ją. Voila!

Jednakowoż aczkolwiek tudzież właśnie.

Jeżeli kopiowana baza będzie bazą CDC, okaże się, że nie wszystkie tabele zostaną przywrócone z kopii na serwerze docelowym.

W bazie CDC jest grupa tabel ukrytych w osobnej gałęzi „System tables” – i to właśnie one nijak nie chcą się skopiować na docelowy serwer. Nawet jeżeli ktoś spróbuje być sprytniejszy, niż mu się wydaje, i skorzysta z SSIS żeby „ręcznie” przerzucić dane, nic z tego nie wyjdzie, bo tabel nie widać w edytorze paczek SSIS.

Czyli jak się człowiek nie obejrzy, tak dupa z tyłu.

Przyczyna takiego zachowania bazy CDC jest taka, że zasadniczo nie przewiduje się kontunuacji śledzenia zmian po przeprowadzce na inny serwer. Czyli teoretycznie trzeba zrobić tak, że na starym serwerze zostawia się statyczną kopię bazy CDC, a na nowym konfiguruje się CDC na nowo i śledzenie / rejestracja zmian będą kontynuowane „od zera” na tym nowym serwerze.

A co, jeżeli ktoś się uprze i jednak chce przenieść historię zmian na nowy serwer?

Okazuje się, że operacja RESTORE DATABASE ma malutką, słabo udokumentowaną, nigdzie-nie-klikalną opcję o nazwie „KEEP_CDC”.

Ha!

Trzeba więc najpierw wyklikać sobie operację odtworzenia bazy na serwerze docelowym, ale w ostatnim kroku zamiast ją uruchomić kliknięciem w OK, trzeba wygenerować skrypt, następnie dopisać do tego skryptu KEEP_CDC (gdzieś pod koniec, po słówku WITH) i dopiero wtedy uruchomić.

Voila!

Autor: xpil

Po czterdziestce. Żonaty. Dzieciaty. Komputerowiec. Krwiodawca. Emigrant. Rusofil. Lemofil. Sarkastyczny. Uparty. Mól książkowy. Ateista. Apolityczny. Nie oglądam TV. Uwielbiam matematykę. Walę prosto z mostu. Gram na paru instrumentach. Lubię planszówki. Słucham bluesa, poezji śpiewanej i kapel a’capella. || Kliknij tutaj po więcej szczegółów ||

Dodaj komentarz

5 komentarzy do "CDC"

Powiadom o
avatar
Sortuj wg:   najnowszy | najstarszy | oceniany
Gabriela
Gość

Nic z tego nie rozumiem ale czytam te wszystkie informatyki z zapartym tchem.
Pozdrawiam.

Stefek
Gość

calkiem niezle udokumentowane mi sie wydaje jednak:
https://msdn.microsoft.com/en-us/library/ms178615.aspx

wpDiscuz