begin process at 2013 05 23 18:37:30
  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

Note :
Aucune note
Catégorie :Divers Classé sous :ChangeData Capture, CDC, SQLServer 2008, Capture changements, Nouveautés SQLserver2008 Niveau :Expert Date de création :22/01/2009 Date de mise à jour :17/01/2012 10:25:20 Vu :11 054

Auteur : wissemhabboub

Ecrire un message privé
Site perso
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

 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 et les mettres dans une table spécifique qui contient les colonnes suivantes : type de changement (insertion, modification ou suppression) et le changement réellement effectué (l'enregistrement et les colonnes modifiées). ce qui nou permettra de suivre les modifications (ajout, modification, supprerssion des enregistrement)sur une table donnée.

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
17 janvier 2012 10:19:01 :
Complément d'explication
17 janvier 2012 10:25:20 :
Complément d'explication

 Sources de la même categorie

NOMBRE DES JOURS OUVRABLE par lamjed
Source avec Zip TABLE CODE POSTAL FRANCE par jagoulard
Source avec Zip TUTORIEL PL/SQL par Julien39
INTERPRETEUR BRAINFUCK par coucou747
CRÉATION D'UNE BASE DE DONNÉE AVEC FICHIER DE DONNÉES, JOURN... par fearmaker

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

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
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,343 sec (4)

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