Préparer les tables pour le traitement
Les attributs de table des sections suivantes doivent être traités dans votre environnement Oracle GoldenGate.
Considérations relatives à la réplication pour les colonnes d'identité cible, les déclencheurs et les contraintes
Lors de la réplication de données vers une base de données SQL Server cible comportant des colonnes d'identité, des déclencheurs et des contraintes de cascade et de vérification, tenez compte des éléments suivants :
-
Pour les colonnes qui ont une colonne d'identité, le processus Replicat définit
IDENTITY_INSERT ONpour la table, ce qui peut réduire les performances de distribution. -
Pour les tables qui ont des déclencheurs ou des contraintes en cascade, l'exécution du déclencheur ou de l'opération en cascade peut entraîner une erreur de réplication si le processus Replicat est configuré pour fournir les mêmes données qu'un déclencheur insérera ou que la contrainte en cascade mettra à jour ou supprimera.
Par exemple,
TableAsur la source comporte un déclencheur qui insère un enregistrement dansTableB. Le processus Extract est configuré pour capturer les enregistrements pourTableAetTableB. Sur la cible, le processus Replicat insère d'abord un enregistrement pourTableA, puis le déclencheur pourTableAs'exécute et s'insère dansTableB, puis le processus Replicat tente d'insérer le même enregistrement dansTableB, ce qui entraîne une erreur de processus Replicat. -
Vérifiez que les contraintes de clé étrangère sont également appliquées, ce qui peut réduire les performances de transmission.
-
Pour les tables de la base de données cible qui ont des déclencheurs, désactivez le paramètre
SET XACT_ABORT. Cela garantit que l'exécution de l'opération de déclencheur n'entraîne pas l'absence de transactions.
Pour remédier à ces situations, plusieurs options peuvent être implémentées en fonction du cas d'emploi de la réplication.
-
Pour les implémentations unidirectionnelles où un processus Replicat est le seul processus à écrire des données dans les tables cible, envisagez les options suivantes pour les colonnes Identity, les déclencheurs et les contraintes sur les tables cible.
-
Désactivez ou supprimez la propriété Identity, les déclencheurs et les contraintes sur les tables cible.
-
Modifiez la propriété d'identité, les déclencheurs et les contraintes, et définissez l'option
NOT FOR REPLICATIONsur chacun d'eux et assurez-vous que le pilote ODBC Microsoft est au moins la version 17.8.1.
-
-
Pour les implémentations multidirectionnelles dans lesquelles un processus Replicat et une application écrivent des données dans les tables cible, et où les déclencheurs et les contraintes sont activés, modifiez la propriété Identity, les déclencheurs et les contraintes et définissez l'option
NOT FOR REPLICATIONsur chacune d'elles et assurez-vous que le pilote ODBC Microsoft est au moins la version 17.8.1.En outre, pour utiliser les colonnes
IDENTITYdans une configuration de réplication multidirectionnelle, définissez les colonnesIDENTITYpour qu'elles aient une valeur d'incrément égale au nombre de serveurs dans la configuration, avec une valeur de départ différente pour chacune d'elles.Par exemple, une configuration à trois bases de données serait la suivante :
Database1 définit la valeur de départ sur 0 avec un incrément de 3.
Database2 définit la valeur de départ sur 1 avec un incrément de 3.
Database3 définit la valeur de départ sur 2 avec un incrément de 3.
Amélioration de la réplication IDENTITY avec le traitement des tableaux
Etant donné qu'une seule table par session peut avoir IDENTITY_INSERT défini sur ON, le processus de réplication doit activer/désactiver en permanence IDENTITY_INSERT lorsqu'il applique les données IDENTITY à plusieurs tables d'une session. Pour améliorer les performances de la réplication dans ce cas, utilisez le paramètre BATCHSQL. BATCHSQL permet au processus Replicat d'utiliser le traitement de tableau au lieu d'appliquer des instructions SQL une par une.
Garantie de l'unicité des rangées dans les tableaux source et cible
Oracle GoldenGate requiert une forme d'identificateur de ligne unique sur les tables source et cible afin de localiser les lignes cible appropriées pour les mises à jour et les suppressions répliquées.
Sauf si une clause KEYCOLS est utilisée dans l'instruction TABLE ou MAP, Oracle GoldenGate sélectionne un identificateur de ligne à utiliser dans l'ordre de priorité suivant :
-
Clé primaire
-
Première clé unique alphanumérique ne contenant pas d'horodatage ni de colonne calculée non matérialisée.
-
S'il n'existe aucun des types de clé précédents (même si d'autres types de clé peuvent être définis dans la table), Oracle GoldenGate construit une pseudo-clé de toutes les colonnes. que la base de données permet d'être utilisée dans une clé unique, à l'exclusion de celles qui ne sont pas prises en charge par Oracle GoldenGate dans une clé ou de celles qui sont exclues de la configuration Oracle GoldenGate. Remarque : s'il existe d'autres clés non utilisables sur une table ou s'il n'y a aucune clé dans la table, Oracle GoldenGate consigne un message approprié dans le fichier de rapport. La création d'une clé à partir de toutes les colonnes entrave les performances d'Oracle GoldenGate sur le système source. Sur la cible, cette clé entraîne l'utilisation par le processus Replicat d'une clause
WHEREplus grande et moins efficace.
- Si une table n'a pas de clé appropriée ou si vous préférez que les clés existantes ne soient pas utilisées, vous pouvez définir une clé de substitution si la table comporte des colonnes qui contiennent toujours des valeurs uniques. Vous définissez cette clé de substitution en incluant une clause
KEYCOLSdans le paramètre d'extractionTABLEet le paramètre de réplicationMAP. La clé indiquée remplacera toute clé primaire ou unique existante détectée par Oracle GoldenGate. Reportez-vous à TABLE | MAP dans Référence pour Oracle GoldenGate.
Utilisation de KEYCOLS pour spécifier une clé personnalisée
Si une table n'a pas d'identificateur de ligne applicable ou si vous préférez que les identificateurs ne soient pas utilisés, vous pouvez définir une clé de substitution, à condition que la table comporte des colonnes qui contiennent toujours des valeurs uniques. Vous définissez cette clé de substitution en incluant une clause KEYCOLS dans le paramètre d'extraction TABLE et le paramètre de réplication MAP. La clé indiquée remplace toute clé primaire ou unique existante détectée par Oracle GoldenGate.