Bases de données Oracle CDC

Important

La capture de données modifiées pour Oracle par Attunity est déconseillée maintenant. Pour les détails, référez-vous à l'annonce.

Une instance d'Oracle CDC est associée à une base de données SQL Server du même nom sur l’instance SQL Server cible. Cette base de données est appelée base de données Oracle CDC (ou base de données CDC).

La base de données CDC est créée et configurée à l’aide de la console Oracle CDC Designer et contient les éléments suivants :

  • Schéma cdc créé en activant la base de données pour SQL Server CDC.

  • Ensemble de tables cdc.xdbcdc_xxxx utilisées par l’instance CDC Oracle.

  • Un ensemble de tables miroir vides avec les définitions des tables capturées dans la base de données Oracle source.

  • Ensemble de tables de modifications et fonctions d'accès aux modifications générées par le mécanisme CDC de SQL Server, identiques à celles utilisées dans le CDC SQL Server standard, non-Oracle.

Le cdc schéma est initialement accessible uniquement aux membres du rôle de base de données fixe dbowner . L’accès aux tables de modification et aux fonctions de suivi des modifications est déterminé par le même modèle de sécurité que le SQL Server CDC. Pour plus d’informations sur le modèle de sécurité, consultez Modèle de sécurité.

Création de la base de données CDC

Dans la plupart des cas, la base de données CDC est créée à l’aide de la CDC Designer Console, mais elle peut également être créée avec un script de déploiement CDC généré à l’aide de la CDC Designer Console. L’administrateur système SQL Server peut modifier les paramètres de base de données si nécessaire (pour les éléments tels que le stockage, la sécurité ou la disponibilité).

Pour plus d’informations sur l’utilisation de la console du concepteur CDC pour créer des tables de base de données et les scripts nécessaires, consultez Utiliser l’Assistant Nouvelle instance.

Rôles d’utilisateur de base de données CDC

Lorsqu’une base de données CDC est créée et activée pour la capture de données modifiées, un utilisateur de base de données appelé cdc_service est créé dans la base de données CDC et est associé à la connexion SQL Server avec laquelle le service de capture de données modifiées Oracle a été configuré. Cet utilisateur est membre des rôles de base de données db_datareader, db_datawriter et db_ddladmin. Si la connexion SQL Server est également associée à l’utilisateur dbo , la cdc_service n’est pas créée.

Cette attribution de rôle permet au service Oracle CDC de mettre à jour les tables dans le schéma cdc avec des données capturées et des informations de contrôle.

Lorsqu’une base de données CDC est créée et que les tables sources Oracle de Capture de Données de Changement (CDC) sont configurées, le propriétaire de la base de données CDC peut accorder l’autorisation SELECT sur les tables miroirs et définir des rôles de contrôle pour la Capture de Données de Changement sur SQL Server afin de réguler qui a accès aux données modifiées.

Tables miroir

Pour chaque table collectée, <nom_schéma>.<nom_table>, dans la base de données source Oracle, une table vide similaire est créée dans la base de données CDC, avec le même schéma et le même nom de table. Les tables sources Oracle avec le nom de schéma cdc (ne respectant pas la casse) ne peuvent pas être capturées, car le schéma cdc dans SQL Server est réservé pour SQL Server CDC.

Les tables miroirs sont vides ; aucune donnée n’est stockée dans ces tables. Ils sont utilisés pour activer l'infrastructure standard de capture de modifications (CDC) de SQL Server, qui est employée par l'instance CDC Oracle. Pour empêcher l’insertion ou la mise à jour de données dans les tables miroir, toutes les opérations UPDATE, DELETE et INSERT sont refusées à PUBLIC. Cela garantit qu’ils ne peuvent pas être modifiés.

Accès aux données modifiées

En raison du modèle de sécurité SQL Server utilisé pour accéder aux données modifiées associées à une instance de capture, l’utilisateur doit avoir select accès à toutes les colonnes capturées de la table miroir associée (les autorisations d’accès aux tables Oracle d’origine ne fournissent pas l’accès aux tables de modification dans SQL Server). Pour plus d’informations sur le modèle de sécurité SQL Server, consultez Modèle de sécurité.

En outre, si un rôle de filtrage est spécifié lors de la création de l’instance de capture, l’appelant doit également être membre du rôle de filtrage spécifié. D’autres fonctions de capture de données modifiées générales pour accéder aux métadonnées sont accessibles à tous les utilisateurs de la base de données par le biais du rôle PUBLIC, bien que l’accès aux métadonnées retournées soit généralement contrôlé à l’aide de l’accès sélectionné aux tables sources sous-jacentes et par l’appartenance à n’importe quel rôle de regroupement défini.

Les données modifiées peuvent être lues en appelant des fonctions spéciales basées sur des tables générées par le composant CDC SQL Server lors de la création d’une instance de capture. Pour plus d’informations sur cette fonction, consultez Fonctions de capture de données modifiées (Transact-SQL).

L’accès aux données CDC par le biais du composant source CDC Integration Services est soumis aux mêmes règles.

Tables de base de données CDC

Cette section décrit les tableaux suivants dans la base de données CDC.

Modifier des tables (_CT)

Les tables de modifications sont créées à partir des tables miroir. Ils contiennent les données modifiées capturées à partir de la base de données Oracle. Les tables sont nommées conformément à la convention suivante :

[cdc].[<capture-instance>_CT]

Lorsque la capture est initialement activée pour la table <schema-name>.<table-name>, le nom de l’instance de capture par défaut est <schema-name>_<table-name>. Par exemple, le nom d’instance de capture par défaut pour la table Oracle HR.EMPLOYEES est HR_EMPLOYEES et la table de modifications associée est [cdc]. [HR_EMPLOYEES_CT].

Les tables de capture sont écrites par l'instance Oracle CDC. Ils sont lus à l’aide de fonctions à valeur de table spéciales générées par SQL Server lorsque l’instance de capture est créée. Par exemple : fn_cdc_get_all_changes_HR_EMPLOYEES. Pour plus d’informations sur ces fonctions de CDC, consultez Fonctions de capture de données modifiées (Transact-SQL).

cdc.lsn_time_mapping

Le [cdc].[ lsn_time_mapping] table est générée par le composant CDC SQL Server. Son utilisation dans le cas d’Oracle CDC est différente de son utilisation normale.

Pour oracle CDC, les valeurs LSN stockées dans cette table sont basées sur la valeur SCN (Oracle System Change Number) associée à la modification. Les 6 premiers octets de la valeur LSN sont le numéro Oracle SCN d’origine.

En outre, lors de l’utilisation de la capture de données modifiées Oracle, les colonnes de temps (tran_begin_time et tran_end_time) stockent l’heure UTC de la modification plutôt que l’heure locale comme il le fait avec la capture de données modifiées SQL Server standard. Cela garantit que les changements liés à l’heure d’été n’affectent pas les données stockées dans la table lsn_time_mapping.

cdc.xdbcdc_config

Cette table contient les données de configuration de l'instance Oracle CDC. Elle est mise à jour à l’aide de la CDC Designer Console. Cette table ne comporte qu’une seule ligne.

Le tableau suivant décrit les colonnes de la table cdc.xdbcdc_config .

Élément Descriptif
version Cela permet de suivre la version de la configuration de l'instance CDC. Il est mis à jour chaque fois que la table est mise à jour et chaque fois qu’une nouvelle instance de capture est ajoutée ou qu’une instance de capture existante est supprimée.
connect_string Chaîne de connexion Oracle. Voici un exemple de base :

<server>:<port>/<instance> (par exemple, erp.contoso.com:1521/orcl).

La chaîne de connexion peut également spécifier un descripteur Oracle Net Connect, par exemple (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=erp.contoso.com) (PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=orcl))).

Si vous utilisez un serveur d'annuaire ou des noms TNS, la chaîne de connexion peut être le nom de la connexion.

Pour en savoir plus sur les chaînes de connexion Oracle, consultez le Guide du programmeur de l’interface d’appel, qui fournit des informations détaillées sur les chaînes de connexion de base de données Oracle pour l'Oracle Instant Client utilisé par l'Oracle CDC Service.
use_windows_authentication Valeur booléenne qui peut être :

0 : Un nom d’utilisateur et un mot de passe Oracle sont fournis pour l’authentification (valeur par défaut)

1 : l’authentification Windows est utilisée pour se connecter à la base de données Oracle. Vous pouvez utiliser cette option uniquement si la base de données Oracle est configurée pour fonctionner avec l’authentification Windows.
nom d'utilisateur Nom de l'utilisateur de la base de données Oracle d'exploration de données de journaux. Cela n’est obligatoire que si use_windows_authentication = 0.
mot de passe Mot de passe de l'utilisateur de la base de données Oracle d'exploration de données de journaux. Cela n’est obligatoire que si use_windows_authentication = 0.
transaction_staging_timeout La durée, exprimée en secondes, pendant laquelle une transaction Oracle non validée est conservée en mémoire avant d’être écrite dans la table cdc.xdbcdc_staged_transactions. La valeur par défaut est de 120 secondes.
limite_de_mémoire Limite de la quantité de mémoire, en Mo, qui peut être utilisée pour la mise en cache des données en mémoire. Un paramètre inférieur entraîne l’écriture d’une transaction supplémentaire dans la table cdc.xdbcdc_staged_transactions . La valeur par défaut est 50 Mo.
options Liste des options sous la forme de nom[=valeur][ ; ] : elle est utilisée pour spécifier des options secondaires (par exemple, le suivi, le réglage). Consultez le tableau ci-dessous pour obtenir une description des options disponibles.

Le tableau suivant décrit les options disponibles.

Nom Par défaut Min Max Statique Descriptif
trace Faux - - Faux Les valeurs disponibles sont les suivantes :

Vrai

Faux

on

désactivé
cdc_update_state_interval 10 1 120 Faux Taille (en Kbytes) des blocs de mémoire alloués pour une transaction (une transaction peut allouer plusieurs blocs). Consultez la colonne memory_limit dans cdc.xdbcdc_config table.
target_max_batched_transactions 100 1 1 000 Vrai Nombre maximal de transactions Oracle qui peuvent être traitées comme une seule transaction dans la mise à jour des tables CT de SQL Server.
target_idle_lsn_update_interval 10 0 1 Faux Intervalle (en secondes) pour la mise à jour de la table lsn_time_mapping lorsque les tables capturées n’ont aucune activité.
période_de_rétention_des_traces Vingt-quatre 1 24*31 Faux Durée (en heures pour conserver les messages dans la table de trace).
sql_reconnect_interval 2 2 3600 Faux Durée d’attente (en secondes) avant de se reconnecter à SQL Server. Cet intervalle est utilisé en plus du délai de connexion du client SQL Server.
sql_reconnect_limit -1 -1 -1 Faux Nombre maximal de reconnexions SQL Server. La -1 par défaut signifie que le processus tente de se reconnecter jusqu’à ce qu’il s’arrête.
cdc_restart_limit 6 -1 3600 Faux Dans la plupart des cas, le service CDC redémarre automatiquement une instance CDC anormalement terminée. Cette propriété définit après combien d’échecs par heure le service s'arrête avant de redémarrer l’instance. La valeur -1 signifie que l’instance doit toujours être redémarrée.

Le service retourne redémarrer l’instance après toute mise à jour de la table de configuration.
cdc_memory_report 0 0 1 000 Faux Si la valeur du paramètre a été modifiée, l'instance CDC imprime son rapport mémoire sur la table de trace.
target_command_timeout 600 1 3600 Faux Délai d'attente de commande utilisé avec SQL Server.
source_character_set - - - Vrai Peut être défini sur un encodage Oracle spécifique à utiliser au lieu de la page de codes de base de données Oracle. Cela peut être utilisé lorsque l’encodage réel que les données de caractères utilisent est différent de celui exprimé par la page de codes de base de données Oracle.
source_error_retry_interval 30 1 3600 Faux Utilisé avant de réessayer sur plusieurs erreurs telles qu’une erreur de connexion ou un manque temporaire de synchronisation entre les tables système.
source_prefetch_size 100 1 10 000 Vrai Taille du lot de prérécupération.
source_max_tables_in_query 100 1 10 000 Vrai Nombre maximal de tables dans la clause WHERE avant de passer à la lecture du journal Oracle sans filtrage de table.
source_read_retry_interval 2 1 3600 Faux Durée pendant laquelle la source attend avant d'essayer de lire les journaux des transactions Oracle sur EOF.
source_reconnect_interval 30 1 3600 Faux Durée (en secondes) d’attente avant d’essayer de se reconnecter à la base de données source.
source_reconnect_limit -1 -1 Faux Nombre maximal de reconnexions de la base de données source. La -1 par défaut signifie que le processus tente de se reconnecter jusqu’à ce qu’il soit arrêté.
source_command_timeout 30 1 3600 Faux Délai de connexion utilisé avec Oracle.
source_connection_timeout 30 1 3600 Faux Délai de connexion utilisé avec SQL Server.
trace_data_errors Vrai - - Faux Booléen. True indique de consigner les erreurs de conversion et de troncation des données.
CDC_stop_on_breaking_schema_changes Faux - - Faux Booléen. La valeur True indique d'arrêter lors de la détection d'une modification de schéma incompatible.

False indique de supprimer la table miroir et l’instance de capture.
source_oracle_home - - Faux Peut être défini sur un chemin Oracle Home spécifique ou un nom Oracle Home que l'instance CDC utilisera pour se connecter à Oracle.

cdc.xdbcdc_state

Cette table contient des informations sur l'état persistant de l'instance Oracle CDC. L'état de capture est utilisé dans des scénarios de récupération et de basculement et à des fins de contrôle d'intégrité.

Le tableau suivant décrit les colonnes de la table cdc.xdbcdc_state .

Élément Descriptif
status Code d'état actuel de l'instance Oracle CDC active. Le statut décrit l’état actuel pour le CDC.
sub_status État de second niveau qui fournit des informations supplémentaires sur l’état actuel.
active Valeur booléenne qui peut être :

0 : le processus d’instance Oracle CDC n’est pas actif.

1 : Le processus Oracle CDC est actif.
erreur Valeur booléenne qui peut être :

0 : le processus d’instance Oracle CDC n’est pas dans un état d’erreur.

1 : l’instance Oracle CDC est dans un état d’erreur.
message de statut Chaîne qui fournit une description de l’erreur ou de l’état.
horodatage L'horodatage indiquant l'heure (UTC) de la dernière mise à jour de l'état de capture.
nœud_de_capture_actif Nom de l’hôte (l’hôte peut être un nœud sur un cluster) qui exécute actuellement le service Oracle CDC et l’instance Oracle CDC (qui traite les journaux des transactions Oracle).
horodatage_dernière_transaction Horodatage indiquant l’heure (UTC) de la dernière transaction qui a été enregistrée dans les tables de modification.
last_change_timestamp Horodatage indiquant l'heure (UTC) à laquelle l'enregistrement de la modification la plus récente a été lu à partir du journal des transactions de l'Oracle source. Cet horodatage permet d’identifier la latence actuelle du processus cdc.
transaction_log_head_cn Numéro de modification (CN) le plus récent lu dans le journal des transactions Oracle.
transaction_log_tail_cn Numéro de modification (CN) dans le journal des transactions Oracle dans lequel l’instance Oracle CDC se repositionne en cas de redémarrage ou de récupération.
current_cn Numéro de modification (CN) le plus récent connu dans la base de données source.
version du logiciel Version interne du service de capture de données modifiées Oracle.
transactions terminées Nombre de transactions traitées depuis la dernière réinitialisation de la CDC.
written_changes Nombre d’enregistrements de modification écrits dans les tables de modification SQL Server.
read_changes Nombre d'enregistrements de modification lus dans le journal des transactions Oracle source.
staged_transactions Nombre de transactions actives intermédiaires dans la table cdc.xdbcdc_staged_transactions .

cdc.xdbcdc_trace

Cette table contient des informations sur le fonctionnement de l'instance de capture de données modifiées. Les informations stockées dans cette table incluent les enregistrements d’erreurs, les modifications d’état notables et les enregistrements de trace. Les informations d’erreur sont également écrites dans le journal des événements Windows pour s’assurer que les informations sont disponibles si la table cdc.xcbcdc_trace n’est pas disponible.

Le tableau suivant décrit les colonnes de la table cdc.xdbcdc_trace.

Élément Descriptif
horodatage Le horodatage UTC exact auquel l’enregistrement de trace a été enregistré.
type Contient l’une des valeurs suivantes.

ERREUR

INFO

TRACE
nœud Nom du nœud sur lequel l'enregistrement a été écrit.
status Code d’état utilisé par la table d’état.
sub_status Code de sous-état utilisé par la table d’état.
message de statut Message d’état utilisé par la table d’état.
données Données supplémentaires pour les cas où l’enregistrement d’erreur ou de trace contient une charge utile (par exemple, un enregistrement de journal endommagé).

cdc.xdbcdc_staged_transactions

Cette table stocke les enregistrements de modifications pour les transactions volumineuses ou longues jusqu'à ce que l'événement de validation ou d'annulation de la transaction soit capturé. Le service Oracle CDC organise les enregistrements capturés du journal par heure de confirmation des transactions, puis par ordre chronologique pour chaque transaction. Les enregistrements de journaux pour la même transaction sont stockés en mémoire jusqu'à ce que la transaction se termine, puis sont écrits dans la table de modifications cible ou ignorés (en cas de restauration). Étant donné qu’il existe une quantité limitée de mémoire disponible, les transactions volumineuses sont écrites dans la table cdc.xdbcdc_staged_transactions jusqu’à ce que la transaction soit terminée. Les transactions sont également écrites dans la table de mise en lots lorsqu'elles s'exécutent longtemps. Par conséquent, lorsque l'instance Oracle CDC est redémarrée, les anciennes modifications n'ont pas besoin d'être relues dans les journaux des transactions Oracle.

Le tableau suivant décrit les colonnes de la table cdc.xdbcdc_staged_transactions .

Élément Descriptif
identifiant_de_transaction Identificateur unique de la transaction en cours de préparation.
numéro_de_séquence Numéro de la ligne xcbcdc_staged_transactions pour la transaction active (commence par 0).
data_start_cn Numéro de modification (CN) pour la première modification des données de cette ligne.
data_end_cn Numéro de modification (CN) pour la dernière modification des données de cette ligne.
données Modifications intermédiaires pour la transaction sous forme d'un objet BLOB.