Premier regard sur l'image, comprendre la prochaine image, sachez ce qui se passe.
Pour CDC relativement simple, l'environnement n'est pas trop compliqué à être configuré. Mais aussi besoin de prendre du temps pour vérifier.1.1.1 Tableau ci-dessous
Toutes les tables ci-dessous sont liées à la prise de vue des données modifiées est créée
Dans le schéma de capture de capture (CDC) de la base de données CDC
Format de nom pour les systèmes et fonctions de CDC.:
1.1.1.1 Changer Express: & lt; Schema name_table Nom & GT; de la table source
1.1.1.2 Les tableaux ci-dessous sont utilisés pour capturer les activités de DML:
& lt; Schema name_table Nom & GT; _Ct ( Nom du schéma pour
Structure sur la modification de la capture de données:
Concept LSN: Nombre de série de journaux
_ $ START_LSN:
_ $ end_lsn:
_ SEQVAL:
_ $ Opération:
1- Supprimer;2 -
3- Mise à jour (avant);
4 - Mise à jour (après)
_ update_mask: L'autre colonne est identique à celle du tableau
1.1.1.3 Fonctions de fonctions lire des données capturées:
1.1.1.3.1 Pour lire toutes les données: Ajouter fn_cdc_get_all_changes_ à la version
par exemple: fn_cdc_get_all_changes_ & lt; Schema name_t_table Nom & GT;1.1.1.3.2 Pour lire les modifications réseau: Fn_CDC_GET_NET_CHANGES_ à la version
E.G. Fn_cdc_get_net_changes_ & lt; Schema name_table Nom & GT;
Il existe des questions ici, comment soutenir le changement net?
Index principal ou unique
1.1.2 Exemple de capture: Ce doit être le conteneur principal, il est
Incluant les tableaux de table et les fonctions ci-dessous
1.1.3 Données CDC en lecture conformes aux fonctions système
1.1.4 Deux serveur de travail SQL Agent, un pour les données à remplir des données de Le journal
change le tableau; Un pour le processus de nettoyage. Leur créativité et leur démarrage
peuvent être configurés.
SYS.SP_CDC_ADD_JOB & AMP; SYS.SP_CDC_Drop_JOB
SYS.SP_CDC_CHANGE_JOB & AMP; SYS.SP_CDC_HELP_JOBS
SYS.SP_CDC_START_JOB & AMP; SYS.SSP_CDC_STOP_JOB
1.2 Configuration1.2.1 Activer CDC pour la base de données: SYS.SP_CDC_ENABLE_DB
Demander un rôle de serveur Sysadmin à allumer CDC;
Sélectionnez la base de données pour activer CDC, appliquez le processus archivé:
Contrainte: 对于 个 数据库 数据库 能 能 内存 内存Use lenistest3GoExec Sys.sp_cdc_enable_db
MSG 41385, Niveau 16, Statut 1, Process SP_CDC_ENABLE_DB, ligne 33
MuscleBase de données pour les deux modifications Capture Capture (CDC) et
Stockez Memory_OPTItimized_Data.
1.2.2 Soulevez les tables de CDC:
SYS.SP_CDC_ENABLE_TABLE
1.2.2.1 Les émissions de prise de vue seront créées pour la table CDC1.2.2.2 Pour obtenir le carton d'information de métadonnées CDC, utilisez la fonction Système:
CDC.Captured_columns De plus, le système est stocké la procédure peut être utilisé pour des informations:
SYS.SP_CDC_HELP_CHANGE_DATA_CAPTURE
1.2.2.3 Pour activer la table CDC avec le support NET Change: Pour d'autres paramètres ] reportez-vous à la syntaxe de SYS.SP_CDC_ENABLE_TABLE. Pour les réseaux
Modifier, il doit y avoir une seule clé ou une index sur la table.
Utilisez Lenistest3
Go
EXEC SYS.SSP_CDC_ENABLE_TABLE
@SOURCE_SCHEMA
= N "DBO",
@source_name
= N "Région",
1.2.3
Synchronisation des données
] 1.2.3.0Comment préparer des données modifiées
1.2.3.0.1
CDC.FN_CDC_GET_ALL_CHANGES_CAPTURE_INStance (de_lsn, to_lsn,
" & lt; rangée_fileter_option & gt; ")
Ici
& lt; ROW_FILTER_OPTITRIES & GT; il existe deux valeurs:
Une ligne de chaque modification inclut un fonctionnement mis à jour
Mise à jour: deux lignes à mettre à jour L'opération, une fois avant de changer, un
après le changement.
1.2.3.1
MéthodeUtilisé pour synchroniser des données
1.2.3.2
1.3 Une fois un seul exemple à renvoyer
CDC
DBO.GEGion Table (Région Int, Région de Varchar. 10))
Go
Insérer
dans les valeurs DBO.GReGion (zone, région) (1, 'Chine')
Go
EXEC
SYS.SP_CDC_ENABLE_DB
Go
Nom, is_cdc_enables de sys.database dans quel nom = 'leniserest4'
Alter
DBO.REGION ALTER TABLE TABLEUR INT NOL NULL
ALTER
DBO.GEGIONEXECT
SYS.SP_CDC_ENABLEE_TABLE @SOURCE_SCHEMA = N'DBO ', @source_Name =
N'region', @supports_net_changes = 1, @Role_Name = null
Object_name (Object_id) Comme Change_Table, Nom de l'objet
est Source_Table, Capture_Instance à partir de CDC.Change_Tables
* de CDC.DBO_REGION_CT
.
* de DBO.REGION
1.3.2
recevoir leChangement de données
Sélectionnez
* à partir de CDC.FN_CDC_GET_ALL_CHANGES_DBO_REGION (
SYS.FN_CDC_GET_MIN_LSN ("DBO_REGION"), SYS.FN_CDC_GET_MAX_LSN (),
* à partir de CDC.FN_CDC_GET_NET_CHANGES_DBO_REGION (
SYS.FN_CDC_GET_LIN_LSN ('dbo_region'), SYS.FN_CDC_GET_MAX_LSN (),
N'all '
1.3.3
Manipulation de l'application de la modification de la prise de données
-
1. Panneau de commande: connectez toutes les transactions de conversion de données modifiées
-
2. Applications de données de transfert
-
3. Vérifiez le test
-
4. Oscape les données modifiées
-
1. Le panneau de commande: Connexion de chaque traduction de conversion de données a modifié la modification
1.1 Board de configuration: Pour enregistrer les tables tournées sur CDC
-
1.2 Contrôle du conseil d'article: Données de transfert de journal de transaction
Créer
DBO.CDC_TABLE TABLE TABLE (CDCID INT sans NULL, CDCTTABLEVARCHAR (50),
CDCPROCESSP Varcharchar (200), BitCenables Bit)
Go
Tableau DBO.CDC_DENDEND (Bigint Trading pas NULL, CDCID INT NO
NULL,
DateTime, DateTime CDCenddT, bit binaire, CDCMinlsn binaire (10),
Binary CDCMAXLSN (10))
Go
Insertion
Dans DBO.CDC_TABLES (CDCID, CDCCTABLE, CDC ProcesssP, CDCenables)
Valeur (1, 'DBO.REGION', 'DBO.CDC ProcurentReGion', 1)
-
2. Application de transfert
Créer le processus
(@ CDCMinlsn
Binary (10), @CCCMAXLSN binaire (10 )))
Démarrage
Démarrage
Essayez
Déclaration
@OP INT = 0, @regionid INT = 0, @regionName Varcharchar (200) = ''
Codor CDC_CUR pour
Choisir
__ $ opération est OPR, région, région
à partir de
CDC.FN_CDC_GET_NET_CHANGES_DBO_REGION (@CCMINLSN, @CCCMAXLSN,
'' TOUT ')
Fetch
Suivant de CDC_Cur dans @op, @regionid, @regionName
Tandis que
@@ fetch_status = 0
.
DBO.REGION_CDC dans quelle zone = @regionId
@OP = 2
Insertion
dans DBO. Valeurs de région_cdc (zone, zone) (@regionid,
@regionname)
Si
@OP = 4
Mise à jour
DBO.REGION_CDC Définissez la zone = @ régionName
dans laquelle
Zone = @regionId
Fetch
Suivant de CDC_CUR dans @OP, @ Régionid, @regionName
Terminer
Fermer
CDC_CUR
Résoudre
CDC_CUR
Finition
Essayez
Démarrer
RAISError
("Erreur de zone de processus CDC ', 16.1)Terminer
Obtenir
Terminer
Go
Processus DBO.CDC_TRANSFER
]Démarrer
My_Cur Pointeur Pour sélectionner CDCID, CDCCTable, CDC ProcesssSP de
DBO.CDC_TABLES dans laquelle CDCÉNABLE = 1@CDCID INT, @CDCTactacle Varchar (50), @ CDC ProcesssSP Nvarchar (200)
Déclaration
@TransactionId Bigint, @cdcstartdt DateTime, @cdcendt DateTime,
@CCMINLSN BINARY @ (10), @CCCMAXLSN Binary (10)
Déclaration
@CCMINLSN_P NVARCHAR (200), @CCCMAXLSN_P NVARCHAR (200)@cdccompleté bit = 0
@sqlstat nvarchar (max );
Déclaration
@capture_instance Varchar (100);
Choisissez
@CDCMAXLSN = SYS.FN_CDC_GET_MAX_LSN ()
@CCCMAXLSN_P = Convertir (NVARCHAR (80), @ CDCMAXLSN, 1) ]
OuvrirSuivant de My_Cur dans @CDCID, @CDCTable, @ CDCCESSP
tandis que
@@ fetch_status = 0
Choisissez
@TransactionID = ISNULL (max (transaction) + 1.1) de dbo.cdc_driven
]
@CDCSTARTDD = getutcdate ();
@capture_instance = capture_instance de CDC.Instance
Dans laquelle
Source_Object_id = Object_id (@cject (@cDCtable)
@CCCMINLSN = SYS.FN_CDC_GET_MIN_LSN (@capture_instance)@CCCMINLSN_P = Conversion (NVARCHAR (80), @CCCMINLSN, 1)
SET
@sqlstat = N 'Exec' + @CDC ProcesssSP + N '@CDCMINLSN = @CDCMINLSN,
@CCCMAXLSN = @CCCMAXLSN; '
- Imprimer
EXEC
SP_EXECUTSQL @stMT = @sqlstat , @Params = n '@dcminlsn binaire (10),
Binary (10)' (10) '
= @CCCMINLSN, @CCCMAXLSN = @CDCMAXLSN
@cdcCompletd = 1
@ddderdt = getutcdate ();
Insérer
dans dbo.cdc_driven (transactions, CDCID, CDCSTARTDT,
CDCCompletted, CDCMinlsn, CDCMAXLSN)
Valeur (@TransactionAb,
@CDCID, @cdcstartdt, @ CDCCondt, @ cdcminlsn, @ cdcminlsn, @ cdcmaxlsn)
Fetch
Suivant de My_Cur dans @CDCID, @CDCTable, @ CDC ProcesssSp
Terminer
Fermer
Terminer
Essayez
Démarrage
Obtenir
Déclaration
@errormsgnvarchar (4000)= 'Erreur de transfert:' + error_message ()
;
Si
Cursor_status ('Global', 'My_Cur') & GT; -1
Démarrer
Fermer
My_Cur
RèglementMy_CUR
RAISError
(@ errorormsg, 16, 1)
Terminer
]Obtenir
Terminer
EXEC
-
3 . Vérifiez le test
Choisissez
Count (*) Missedrows
De
(
(Select
, zone
de
Sauf
Choisir
Zone, zone
de DBO.REGION_CDC) Union [Choisissez Zone, zone DBO.REGION_CDC Sauf Choisir à partir de dbo.region) ) TMP - 4. oscapez les données transformées Processus Démarrer Démarrage Essayez My_Cur Pointeur Pour sélectionner CDCID, Cadctable de DBO.CDC_TABLES dans laquelle ] CDCenables = 1 @CDCID INT, @CDCTacle Varchar (200) @CDCInstance Varchar (200) ] Déclaration @CDCCommettable Varcharchar (200) @maxlsn binaire (10) Ouvrir Fetch Suivant de My_Cur en @ CDCID @ CDACTABLE @@ fetch_status = 0 @maxlsn = max (CDCMAXLSN) de dbo.cdc_driven où CDCID = @CDCID et CDCCompletd = 1 Si ISNULL (@ maxlsn, 0) & Lt; 0 Démarrer Choisissez @CDCCHANGETIBLABLETABLE = 'CDC.' + Object_Name (objet_id) à partir de CDC.change_tables dans lesquels Source_Object_id = Object_Id (@cdchable) @sqlstate nvarchar (max) Réglez @sqlstate = N 'Supprimer' + @CDCCommettable + 'dans lequel __ $ start_lsn & lt; = @maxlsn ' EXEC SP_EXECUTSQL @state = @sqlstate, @params = n' @ maxlsn binaire (10), @Maxlsn = @ maxlsn Terminer Fetch Ensuite de My_Cur dans @CDCID, @CDCACTABLE Terminer Cursor_status ('Global', 'My_Cur') & GT; -1 Fermer My_Cur ] Résolvez My_Cur Terminer Finition Démarrer DÉCLARATION @Erormsg Nvarchar (4000) = 'Erreur lors de la commutation:' + error_message () ; Si Cursor_status ('global', 'my_cur') & gt; -1 Démarrer Fermer My_CUR ] Solve My_Cur Finition RaisError (@ errorormsg, 16, 1) Terminer les extrémités de la capture