Używanie Sql Server Zmień przechwytywanie danych z często zmieniającym się schematem


10

Zastanawiamy się nad włączeniem przechwytywania danych zmiany serwera Sql dla nowego podsystemu, który budujemy.

Nie jest tak naprawdę, ponieważ go potrzebujemy, ale jesteśmy zmuszani do posiadania pełnej historii śledzenia, a CDC ładnie rozwiązałby ten wymóg przy minimalnym wysiłku z naszej strony.

Śledzimy sprawny proces programowania, co w tym przypadku oznacza, że ​​często dokonujemy zmian w schemacie bazy danych, np. Dodając nowe kolumny, przenosząc dane do innych kolumn itp.

Zrobiliśmy mały test, w którym utworzyliśmy tabelę, włączyliśmy CDC dla tej tabeli, a następnie dodaliśmy nową kolumnę do tabeli. Zmiany w nowej kolumnie nie są rejestrowane w tabeli CDC.

Czy istnieje mechanizm aktualizowania tabeli CDC do nowego schematu i czy istnieją jakieś najlepsze praktyki postępowania z przechwyconymi danymi podczas migracji schematu bazy danych?


Można uzyskać lepszy / szybszy odpowiedź, jeśli pisał to pytanie w dba.stackexchange.com
TimG

2
@TimG Multiposting pytania jest odradzane, migracja byłaby opcją - ale ma nagrodę i nie można jej migrować, gdy nagroda jest aktywna. To powiedziawszy, pytanie i jego nagroda zostały wspomniane w czacie dba.SE i przyciągnęły uwagę.

Odpowiedzi:


5

Niedawno zaczęliśmy patrzeć na CDC. Nie jestem ekspertem w tej dziedzinie, ale myślę, że mam kilka odpowiedzi na twoje pytania.

W przeważającej części CDC pomoże ci osiągnąć cel, którym jest całkowicie identyfikowalna historia, ale nie sądzę, że doprowadzi cię to do końca.

Po pierwsze:

często wprowadzamy zmiany w schemacie bazy danych ... Czy istnieje mechanizm aktualizacji tabeli CDC do nowego schematu

I tutaj myślę, że CDC cię zawiedzie. Dokumentacja MSDN w sekcji „Zrozumienie narzutów związanych ze śledzeniem zmian” jest dość jasna, że ​​nie będzie dla ciebie śledzić zmian schematu. Na przykład z Alter Table Add Column:

Jeśli nowa tabela zostanie dodana do tabeli śledzenia zmian, dodanie kolumny nie będzie śledzone. Śledzone są tylko aktualizacje i zmiany wprowadzone w nowej kolumnie.

Drop Column jest trochę bardziej skomplikowany.

Jednak powinieneś używać skryptów DB do zmiany schematu, więc niekoniecznie musisz polegać na CDC. Pozwala to zachować spójność między kontrolą jakości a schematami produkcji. I zmiana QA powinna być wykonana przez skrypt, aby dokładnie takie same zmiany mogły zostać zastosowane do Prod. Wyodrębnienie zmian schematu z tych skryptów nie powinno być trudne. Może to oznaczać, że wymiar „czasowy” historii zależy od wersji zamiast czasu rzeczywistego, ale wynik końcowy będzie taki sam.

Jeśli jeszcze go nie masz, utwórz tabelę, aby śledzić wersję schematu bazy danych. Następnie umieść tabelę wersji schematu bazy danych pod CDC, abyś mógł dopasować zmiany makroskopowe do schematu względem zmian mikroskopowych w obrębie konkretnej tabeli.

W moim rozumieniu nadal powinny być widoczne dane dodane do nowych kolumn, niezależnie od tego, czy CDC nie pokazuje zmiany schematu. A migracja danych z tabeli do tabeli powinna również zostać odebrana przez CDC.

czy są jakieś najlepsze praktyki dotyczące postępowania z przechwyconymi danymi podczas migracji schematu bazy danych?

Traktuj to tak, jakbyś traktował audyt. Musisz zrozumieć, co to jest, dlaczego to robisz i jak długo musisz przechowywać te informacje. Zakres i retencja to dwa największe błędy w tego typu zadaniach.

Narzędzia raportowania CDC są zrozumiałe, więc musisz znać kontekst zmian. Zbyt łatwo jest powiedzieć „śledź wszystko !” i w rezultacie nic nie nadaje się do użycia. Podobnie możesz podwoić rozmiar bazy danych, przechowując kopię każdej zmiany. Na stole o wysokiej rezygnacji z wieloma wstawkami i usunięciami skończysz astronomiczny rozwój. Samo w sobie nie jest to złe, ale musisz przewidzieć budżet na ten wzrost i mieć środki do zbadania wszystkich generowanych danych.

Dzięki temu wrócisz do zrozumienia, dlaczego jesteś zmuszany do pełnej identyfikowalności. Z pewnością istnieją uzasadnione powody tego wymogu. Ale nie będziesz w stanie ustrukturyzować skutecznego audytu bazy danych, dopóki nie dowiesz się, dlaczego musisz spełnić ten wymóg.


1

Jesteś w stanie śledzić dodawanie kolumn za pomocą wyzwalaczy DDL.

CREATE TRIGGER trigger_name
ON { ALL SERVER | DATABASE }
[ WITH <ddl_trigger_option> [ ,...n ] ]
{ FOR | AFTER } { event_type | event_group } [ ,...n ]
AS { sql_statement [ ; ] [ ,...n ] |
EXTERNAL NAME < method specifier > [ ; ] }

Możesz użyć grupy zdarzeń DDL_TABLE_EVENTS, aby uruchomić dla CREATE, DROP lub ALTER tabeli.

Jeśli jednak korzystasz z wersji Enterprise> 2008, możesz rzucić okiem na SQL Server Audit , ponieważ może on „połączyć wszystkie możliwości kontroli w specyfikację kontroli”. Ten link msdn zawiera szczegółowy artykuł na ten temat: http://msdn.microsoft.com/en-us/library/dd392015(v=sql.100).aspx .

CREATE SERVER AUDIT audit_name
TO { [ FILE (<file_options> [, ...n]) ] |
APPLICATION_LOG | SECURITY_LOG }
[ WITH ( <audit_options> [, ...n] ) ] }[ ; ]

<file_options>::=
{FILEPATH = 'os_file_path'
[, MAXSIZE = { max_size { MB | GB | TB } | UNLIMITED } ]
[, MAX_ROLLOVER_FILES = integer ]
[, RESERVE_DISK_SPACE = { ON | OFF } ] }

<audit_options>::=
{ [ QUEUE_DELAY = integer ]
[, ON_FAILURE = { CONTINUE | SHUTDOWN } ]
[, AUDIT_GUID = uniqueidentifier ]}

Następnie tworzysz Specyfikacje serwera lub bazy danych.


0

Simple-Talk ma świetny artykuł na temat przechwytywania danych o zmianach oraz bardzo szczegółowy przewodnik na temat CDC, a także dokumentacja MSDN wyjaśnia różne metody w zależności od wymagań. Ale oba mogą pomóc w spełnieniu określonych wymagań.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.