cdc-change_data_capture

Change Data Capture – CDC

Dziś na temat śledzenia zmian w tablicach wywołanych operacjami DML, takimi jak INSERT, UPDATE lub DELETE. Do tego celu służy, wprowadzony w wersji 2008, mechanizm Change Data Capture, w skrócie CDC.

Mechanizm ten działa w ten sposób, że pobiera informacje z dziennika transakcji i umieszcza je w tablicach tablic, których zmiany chcemy śledzić.

W momencie, w którym pierwsza z tablic zostaje udostępniona dla mechanizmu CDC, uruchamiany jest proces przechwytujący, który rozpoczyna obserwowanie dziennika transakcji bazy danych, ponieważ zmiana w tablicy źródłowej powoduje zapis informacji do dziennika transakcji bazy danych. Mechanizm CDC odczytuje te zmiany i zapisuje je w specjalnych tablicach, które są lustrzanym odbiciem (mirror) obserwowanych tablic. Oprócz zapisywania zmian danych mechanizm CDC zapisuje także metadane każdej transakcji, które pozwalają zidentyfikować np. jaka akcja spowodowała zmiany w tablicy źródłowej. Dla każdej tablicy udostępnionej dla mechanizmu CDC można utworzyć maksymalnie 2 tablice przechowujące zmiany.

Mechanizm ten nie jest dostępny w wersji Express.

Udostępnienie mechanizmu CDC

Domyślnie mechanizm ten jest wyłączony i dlatego pierwszym krokiem jest udostępnienie mechanizmu CDC dla wybranej bazy. W tym celu należy uruchomić skrypt:

EXEC sys.sp_cdc_enable_db
GO

Przeprowadzenie testu

W celu przeprowadzenia testu stwórz tabelę i przeprowadź operacje, INERT, UPDATE oraz DELETE.

Tworzenie tabeli

Napisz i uruchom skrypt:

CREATE TABLE [dbo].[abc](
[id] [int] NULL,
[produkt] [nvarchar](255) NULL,
[kategoria] [int] NULL,
[data] [datetime] NULL,
[ilość] [float] NULL,
[cena] [float] NULL,
[KLIENT] [int] NULL,
[spedytor] [int] NULL
) ON [PRIMARY]
GO

Wskazywanie tabeli

Po otrzymaniu komunikatu o sukcesie, należy wskazać jakie tablice chcesz monitorować. Pamiętaj, że należy uruchomić SQL Agent.

W celu wskazania tablicy należy uruchomić skrypt wpisując nazwę tabeli oraz nazwę schematu.

EXEC sys.sp_cdc_enable_table
@source_schema = N’dbo’,
@source_name = N’abc’,
@role_name = NULL
GO

 Sprawdzenie czy systemu utworzył potrzebne obiekty

W Object Explorer w MS SQL Management Studio rozwiń System Tables na swojej bazie. Jak widać na obrazku poniżej system utworzył tabele w schemacie cdc potrzebne do monitorowania zmian. Zatem w naszym przypadku wszelkie zmiany będą zapisywane w tabeli cdc.dbo_abc_CT.

Insert

Wstaw teraz jakieś dane do tabeli dbo.abc. Napisz i uruchom skrypt:

INSERT INTO [dbo].[abc]
([id]
,[produkt]
,[kategoria]
,[data]
,[ilość]
,[cena]
,[KLIENT]
,[spedytor])
VALUES
(1, ‚produkt’, 2, ‚2018-01-01’, 25, 12, 5, 2)
GO

Sprawdzenie tabeli cdc.dbo_abc_CT.

Napisz i uruchom skrypt w celu sprawdzenia zawartości tabeli cdc.dbo_abc_CT.

SELECT *
FROM cdc.dbo_abc_CT

Jak widać mamy cały rekord z tabeli źródłowej plus informacje systemowe.

UPDATE

Zrób teraz UPDATE na tabeli. Napisz skrypt.

UPDATE dbo.abc
SET produkt = ‚rower’

I ponownie sprawdź zawartość tabeli.

SELECT *
FROM cdc.dbo_abc_CT

Jak widać przy UPDATE system tworzy dwa rekordy. Zwróć uwagę na _$operation. Poniżej wyjaśnienie.

DELETE = 1
INSERT = 2
UPDATE (przed zapisem) = 3
UPDATE (po zapisie) = 4

Teraz oczywiście można zrobić dalsze testy, również DELETE.

 

Odpowiedz

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>