3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>
Implementare il CDC
Dopo aver compreso l'architettura di base del CDC, possiamo procedere con un esempio in grado di mettere nero su bianco la teoria fin qui appresa.
Per prima cosa creiamo il database su cui andremo poi a definire le nostre tabelle di esempio.
CREATE DATABASE TestCDC;
GO
USE TestCDC;
GO
CREATE TABLE dbo.Orders
(
ID smallint IDENTITY (1, 1) NOT NULL,
Data smalldatetime NOT NULL,
IDCliente smallint NOT NULL,
IDArticolo smallint NOT NULL,
Importo DECIMAL (9, 2) NOT NULL,
Qta smallint NOT NULL,
Totale AS Importo * Qta,
CONSTRAINT PK_Orders PRIMARY KEY (ID)
);
GO
CREATE TABLE dbo.OrdersByWeek
(
Anno smallint NOT NULL,
Settimana tinyint NOT NULL,
IDArticolo smallint NOT NULL,
Qta smallint NOT NULL,
CONSTRAINT PK_OrdersByWeek PRIMARY KEY (Anno, Settimana, IDArticolo)
);
GO
CREATE TABLE dbo.OrdersByCust
(
Anno smallint NOT NULL,
IDCliente smallint NOT NULL,
Importo DECIMAL (9, 2) NOT NULL,
CONSTRAINT PK_OrdersByCust PRIMARY KEY (Anno, IDCliente)
);
GO
Una volta definita la struttura dati inseriamo alcuni record di prova nella tabella dbo.Orders e, successivamente, eseguiamo il primo allineamento delle tabelle di sintesi dbo.OrdersByWeek e dbo.OrdersByCust.
INSERT dbo.Orders VALUES ('20080102', 1, 25, 500, 12)
INSERT dbo.Orders VALUES ('20080102', 1, 10, 75, 100)
INSERT dbo.Orders VALUES ('20080103', 2, 25, 45, 30)
INSERT dbo.Orders VALUES ('20080103', 3, 13, 110, 15)
INSERT dbo.Orders VALUES ('20080103', 2, 10, 80, 25)
INSERT dbo.Orders VALUES ('20080104', 1, 10, 75, 30)
INSERT dbo.Orders VALUES ('20080104', 4, 14, 15, 90)
INSERT dbo.Orders VALUES ('20080104', 4, 13, 110, 5)
INSERT dbo.Orders VALUES ('20080107', 4, 25, 500, 10)
INSERT dbo.Orders VALUES ('20080107', 4, 13, 100, 40)
INSERT dbo.Orders VALUES ('20080107', 3, 25, 520, 5)
INSERT dbo.Orders VALUES ('20080108', 3, 13, 110, 15)
INSERT dbo.Orders VALUES ('20080108', 1, 10, 80, 25)
INSERT dbo.Orders VALUES ('20080109', 5, 12, 60, 5)
INSERT dbo.Orders VALUES ('20080109', 4, 25, 500, 5)
INSERT dbo.Orders VALUES ('20080109', 1, 12, 55, 70)
INSERT dbo.Orders VALUES ('20080109', 6, 13, 120, 10)
INSERT dbo.Orders VALUES ('20080114', 2, 12, 55, 10)
INSERT dbo.Orders VALUES ('20080114', 2, 13, 110, 70)
INSERT dbo.Orders VALUES ('20080115', 1, 10, 80, 2)
INSERT dbo.Orders VALUES ('20080115', 5, 14, 18, 5)
INSERT dbo.Orders VALUES ('20080115', 5, 13, 110, 35)
INSERT dbo.Orders VALUES ('20080116', 5, 12, 55, 75)
INSERT dbo.Orders VALUES ('20080116', 5, 25, 500, 30)
INSERT dbo.Orders VALUES ('20080117', 1, 13, 100, 30)
GO
INSERT dbo.OrdersByCust
SELECT YEAR(Data), IDCliente, SUM(Totale)
FROM dbo.Orders
GROUP BY YEAR(Data), IDCliente
GO
INSERT dbo.OrdersByWeek
SELECT YEAR(Data), DATEPART(week, Data), IDArticolo, SUM(Qta)
FROM dbo.Orders
GROUP BY YEAR(Data), DATEPART(week, Data), IDArticolo
GO
Adesso non ci resta che abilitare il Change Data Capture. L'attività viene fatta tramite due stored procedure: con la prima abilitiamo il CDC a livello di database e con la seconda indichiamo su quale tabella vogliamo abilitare il "tracking".
EXEC sys.sp_cdc_enable_db;
GO
EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 'Orders', @role_name = 'cdc_role', @capture_instance = 'TrackOrders';
GO
Nel caso volessimo tenere sotto controllo le attività di modifica ai dati su più tabelle, non dovremo far altro che eseguire la sys.sp_cdc_enable_table tante volte quante sono le tabelle di cui vogliamo tenere sotto traccia le modifiche.
Inoltre è possibile sapere su quali database e su quali tabelle è stato abilitato il CDC controllando, rispettivamente, il valore del campo is_cdc_enabled della vista di catalogo sys.databases ed il valore della colonna is_tracked_by_cdc della sys.tables, come negli esempi riportati di seguito.
SELECT name
FROM sys.databases
WHERE is_cdc_enabled = 1
SELECT SCHEMA_NAME(schema_id), name
FROM sys.tables
WHERE is_tracked_by_cdc = 1
L'abilitazione del CDC crea una serie di oggetti a supporto dell'infrastruttura di tracking. In particolare il comando per abilitare il CDC a livello di database crea uno schema denominato cdc, un database user con lo stesso nome e una serie di tabelle, nello schema cdc, necessarie a contenere i metadati necessari alla funzionalità di CDC. La prima volta che viene eseguita la stored procedure per abilitare il CDC su una tabella in uno specifico database vengono anche creati due job in SQL Server Agent per la cattura e il cleanup dei dati da sottoporre ad auditing. Inoltre per ogni tabella sottoposta a tracking nello schema cdc viene creata una tabella di tracking il cui nome è quello indicato dal parametro @capture_instance della stored procedure che abilita il CDC a livello di tabella. Si tratta di un parametro opzionale che, se non viene indicato, crea una tabella di tracking denominata secondo il formato schemaname_tablename_CT e posta nello schema cdc. Avendo specificato il parametro @capture_instance, la nostra tabella di tracking sarà cdc.TrackOrders.
3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>
Contenuti dell'articolo
Per inserire un commento, devi registrarti alla nostra community.







Difficoltà
Utilità
Stampa
Download 



