use master; --on vérifie que le CDC est activé sur les bases de données select name, is_cdc_enabled from sys.databases go use adventureworks; --on active (désactive) le CDC pour AdventureWorks exec sys.sp_cdc_enable_db_change_data_capture; --exec sys.sp_cdc_disable_db_change_data_capture --on vérifie les tables déjà marquées pour le CDC Select name, is_tracked_by_cdc From sys.tables Go --Activation (désactivation) du CDC pour la table SalesOrderHeader exec sys.sp_cdc_enable_table_change_data_capture @source_schema = 'Sales', @source_name = 'SalesOrderHeader' , @role_name = 'datacapture' --,@captured_column_list = 'salesorderid,status' /* exec sys.sp_cdc_disable_table_change_data_capture @source_schema = 'Sales' , @source_name = 'SalesOrderHeader', @capture_instance = 'Sales_SalesOrderHeader' */ go --on met à jour une ligne dans la table (ATTENTION au trigger) update sales.salesorderheader set duedate = '2008-01-01' where salesorderid = 43667 go --on vérifie dans la Change Table les modifications ((Update + trigger) x 2) select * from cdc.Sales_SalesOrderHeader_CT go /************************************** récupération des changements ***************************************/ --on doit garder une référence sur les LSN déjà lus DECLARE @from_lsn binary(10), @to_lsn binary(10); --on utilise des fonctions pour obtenir les LSN min et max SET @from_lsn = sys.fn_cdc_get_min_lsn('Sales_SalesOrderHeader'); --capture instance SET @to_lsn = sys.fn_cdc_get_max_lsn(); Select @from_lsn as [From], @to_lsn as [To] Select * From cdc.fn_cdc_get_all_changes_Sales_SalesOrderHeader( @from_lsn, @to_lsn, 'all'); --'all update old' pour ajouter les anciennes valeurs (__$operation = 3) update sales.salesorderheader set duedate = '2008-01-02' where salesorderid = 43670 -- DECLARE @from_lsn binary(10), @to_lsn binary(10); --on incrémente les LSN min et max (ATTENTION, si @from_lsn > @to_lsn ==> error) SET @from_lsn = sys.fn_cdc_increment_lsn(cast(0x0000001F000001980006 as varbinary(10))) --@to_lsn); SET @to_lsn = sys.fn_cdc_get_max_lsn(); Select @from_lsn as [From], @to_lsn as [To] if @from_lsn > @to_lsn print 'Pas de changement (ou non encore reportés dans la CT)' else Select * From cdc.fn_cdc_get_all_changes_Sales_SalesOrderHeader( @from_lsn, @to_lsn, 'all'); /* TODO: tester le changement de type, suppression de la table, etc. */