begin process at 2010 03 16 01:47:42
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > CAPTURE DES CHANGEMENTS DE DONNÉES (CDC: CHANGE DATA CAPTURE)

CAPTURE DES CHANGEMENTS DE DONNÉES (CDC: CHANGE DATA CAPTURE)


 Information sur la source

 Description

Change Data Capture (CDC) est une nouvelle fonctionnalité intégrée à SQL Server 2008 et qui permet de détecter et récupérer les changements effectués sur une base de données
On peut activer CDC pour récupérer les changements effectués sur une table donnée dans une table spécifique qui contient le type de changement (insertion, modification ou suppression) et le changement réellement effectué (l'enregistrement et les colonnes modifiées).

Source

  • 'Activer CDC :
  • 'Avant d'activer CDC sur une table, il
  • ' faudra activer CDC pour la base de
  • ' données :
  • USE AdventureWorks
  • GO
  • EXECUTE sys.sp_cdc_enable_db_change_data_capture;
  • GO
  • 'Voici un exemple d'un script permettant
  • 'l'activation du CDC sur la table
  • 'SalesPerson de AdventureWorks
  • USE AdventureWorks
  • EXEC sys.sp_cdc_enable_table_change_data_capture
  • @source_schema = 'Sales',
  • @source_name = 'SalesPerson',
  • @supports_net_changes = 1,
  • @role_name = NULL
  • 'Dés que ce script est exécuté une table
  • 'sera automatiquement crée dans le schéma CDC, dans notre cas
  • 'cdc.Sales_Salespeople_CT cette table en
  • 'plus des colonnes de la table
  • 'SalesPerson elle contient un ensemble
  • 'd'autre colonnes identifiant et
  • 'décrivant le changement. Des fonctions
  • 'sont aussi ajouté pour permettre de
  • 'requêter la table des changements
  • 'cdc.Sales_Salespeople_CT.
  • 'Vous pouvez après faire une simulation
  • 'en faisant des
  • 'insertions/modification/suppression et
  • 'voir les effets que vos modifications
  • 'auront sur la table
  • ' cdc.Sales_Salespeople_CT :
  • INSERT INTO [AdventureWorks].[Sales].[SalesPerson]
  • ([SalesPersonID],[TerritoryID],[SalesQuota],[Bonus],[CommissionPct],[SalesYTD])
  • VALUES(1,9,250000,5650,0.01,225000)
  • GO
  • UPDATE [AdventureWorks].[Sales].[SalesPerson]
  • SET [TerritoryID] = 10
  • WHERE [SalesPersonID]=290
  • GO
  • DELETE FROM [AdventureWorks].[Sales].[SalesPerson]
  • WHERE [SalesPersonID]=1
  • GO
  • 'Notter qu'on a insérer puis supprimer
  • 'l'enregistrement
  • '(1,9,250000,5650,0.01,225000).
  • 'Comment récupérer les changements ?
  • 'On peut récupérer les changement tout
  • 'simplement avec une requette Select sur
  • 'la table cdc.Sales_Salespeople_CT ou en
  • 'utilisant les fonctions crées.
  • 'Exemple :
  • DECLARE @from_lsn binary(10);
  • DECLARE @to_lsn Binary(10);
  • SELECT @from_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than or equal', '03-01-2008');
  • SELECT @to_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', '03-12-2008');
  • SELECT * FROM cdc.fn_cdc_get_all_changes_Sales_SalesPerson
  • ((SELECT MIN(HRCDC.__$start_lsn) from cdc.Sales_SalesPerson_CT HRCDC WHERE __$start_lsn>=@from_lsn ),
  • (SELECT MAX(HRCDC.__$start_lsn) from cdc.Sales_SalesPerson_CT HRCDC WHERE __$start_lsn<=@to_lsn ),'ALL');
'Activer CDC :

'Avant d'activer CDC sur une table, il
' faudra activer CDC pour  la base de 
' données :

USE AdventureWorks

GO

EXECUTE sys.sp_cdc_enable_db_change_data_capture;

GO

'Voici un exemple d'un script permettant 
'l'activation du CDC sur la table 
'SalesPerson de AdventureWorks

USE AdventureWorks

EXEC sys.sp_cdc_enable_table_change_data_capture

      @source_schema = 'Sales',

      @source_name = 'SalesPerson',

      @supports_net_changes = 1,

      @role_name = NULL

'Dés que ce script est exécuté une table 
'sera automatiquement crée dans le schéma CDC, dans notre cas 
'cdc.Sales_Salespeople_CT cette table en 
'plus des colonnes de la table 
'SalesPerson elle contient un ensemble 
'd'autre colonnes identifiant et 
'décrivant le changement. Des fonctions 
'sont aussi ajouté pour permettre de 
'requêter la table des changements 
'cdc.Sales_Salespeople_CT. 

'Vous pouvez après faire une simulation 
'en faisant des 
'insertions/modification/suppression et 
'voir les effets  que vos modifications 
'auront sur la table
' cdc.Sales_Salespeople_CT :

INSERT INTO [AdventureWorks].[Sales].[SalesPerson]

        ([SalesPersonID],[TerritoryID],[SalesQuota],[Bonus],[CommissionPct],[SalesYTD])

     VALUES(1,9,250000,5650,0.01,225000)

GO

UPDATE [AdventureWorks].[Sales].[SalesPerson]

   SET [TerritoryID] = 10

 WHERE [SalesPersonID]=290

GO

DELETE FROM [AdventureWorks].[Sales].[SalesPerson]

WHERE [SalesPersonID]=1

GO

'Notter qu'on a insérer puis supprimer 
'l'enregistrement 
'(1,9,250000,5650,0.01,225000).


'Comment récupérer les changements ?

'On peut récupérer les changement tout 
'simplement avec une requette Select sur 
'la table cdc.Sales_Salespeople_CT ou en 
'utilisant les fonctions crées.

'Exemple :

DECLARE @from_lsn binary(10);

DECLARE @to_lsn Binary(10); 

SELECT @from_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than or equal', '03-01-2008');

SELECT @to_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', '03-12-2008');

SELECT * FROM cdc.fn_cdc_get_all_changes_Sales_SalesPerson

((SELECT MIN(HRCDC.__$start_lsn) from cdc.Sales_SalesPerson_CT HRCDC WHERE __$start_lsn>=@from_lsn ), 

 (SELECT MAX(HRCDC.__$start_lsn) from cdc.Sales_SalesPerson_CT HRCDC WHERE __$start_lsn<=@to_lsn ),'ALL');


 Conclusion

Ce script récupère les changement effectués sur notre table du 01 au 12 mars 2008. La fonction fn_cdc_get_all_changes_…. permet de récupérer l'ensemble des modifications effectuées, dans notre exemple les trois opérations qu'on effectués sur la table SalesPerson.

Par contre fn_cdc_get_net_changes_….permet de récupérer les changement nettes (effectives). Dans notre exemple le changement effective est une seule modification car on a insérer puis supprimer l'enregistrement dont le SalesPersonID=1.

en combinant CDC avec proactive-caching et les nouveautés Datawarehousing de SQL Server 2008, ouvre les portes à une BI en temps réel avec synchronisation des changements à partir des bases opérationnelles vers le datawarehouse.


 Historique

22 janvier 2009 20:20:53 :
mise en forme du source

 Sources de la même categorie

INTERPRETEUR BRAINFUCK par coucou747
CRÉATION D'UNE BASE DE DONNÉE AVEC FICHIER DE DONNÉES, JOURN... par fearmaker
MYSQL : CRÉATION D'UN GUID par maitredede
SQL SERVER 2005 : OBTENIR LA LISTE DES BASES DE CONTENU D'UN... par fabrice69
AJOUTER/SUPPRIMER/LISTER UN COMMENTAIRE À UN CHAMP D'UNE TAB... par NHenry

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Somme problématique : perte de ligne [ par ALLODREN ] Bonjour, Je cherche à concaténer le px_com des lignes qui ont un nucdli=nu_docu. Affecter la somme dans le champ px_com dans la ligne qui a un nu_do


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales