Préparer les tables pour traitement
Vous devez effectuer les tâches suivantes pour préparer vos tables en vue de leur utilisation dans un environnement Oracle GoldenGate pour Db2 z/OS.
Désactiver les déclencheurs et les contraintes en cascade
Désactivez les déclencheurs, les contraintes de suppression en cascade et les contraintes de mise à jour en cascade sur les tables cible, ou modifiez-les pour ignorer les modifications apportées par l'utilisateur de base de données Oracle GoldenGate. Oracle GoldenGate réplique les instructions LMD résultant d'un déclencheur ou d'une contrainte en cascade. Si le même déclencheur ou la même contrainte est activé sur la table cible, il devient redondant en raison de la version répliquée et la base de données renvoie une erreur. Prenons l'exemple suivant, où les tables source sont emp_src et salary_src, et les tables cible emp_targ et salary_targ.
-
Une suppression est émise pour
emp_src. -
Il met en cascade une suppression dans
salary_src. -
Oracle GoldenGate envoie les deux suppressions à la cible.
-
La suppression parent arrive en premier et est appliquée à
emp_targ. -
La suppression parent met en cascade une suppression vers
salary_targ. -
La suppression en cascade de
salary_srcest appliquée àsalary_targ. -
La ligne est supprimée à l'étape 5 et ne peut pas être localisée.
Garantir l'unicité des lignes pour les tables
Oracle GoldenGate requiert un 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 existe 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 qu'Oracle GoldenGate ne prend pas en charge 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 qu'il n'y a aucune clé dans la table, Oracle GoldenGate consigne un message approprié dans le fichier d'état. 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 WHERE plus étendue 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 les paramètres d'extractionTABLEet 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 l'un des types d'identificateur de ligne précédents ou si vous préférez que ces identificateurs ne soient pas utilisés, vous pouvez définir une clé de substitution si la table contient des colonnes qui contiennent toujours des valeurs uniques. Vous définissez cette clé de substitution en incluant une clause KEYCOLS dans les paramètres d'extraction TABLE et de réplication MAP. La clé indiquée remplacera toute clé primaire ou unique existante détectée par Oracle GoldenGate. Pour plus d'informations, reportez-vous à Référence pour Oracle GoldenGate.
Gérer les tables avec des colonnes ROWID
Toute tentative d'insertion dans une table cible qui inclut une colonne dont le type de données est ROWID GENERATED ALWAYS (valeur par défaut) échouera avec l'erreur ODBC suivante :
ODBC error: SQLSTATE 428C9 native database error -798. {DB2 FOR OS/390}{ODBC DRIVER}{DSN08015} DSNT408I SQLCODE = -798, ERROR: YOU CANNOT INSERT A VALUE INTO A COLUMN THAT IS DEFINED WITH THE OPTION GENERATED ALWAYS. COLUMN NAME ROWIDCOL.
Vous pouvez effectuer l'une des opérations suivantes pour préparer les tables avec des colonnes ROWID à traiter par Oracle GoldenGate :
-
Assurez-vous que toutes les colonnes
ROWIDdes tables cible sont définies en tant queGENERATED BY DEFAULT. -
Si vous ne pouvez pas modifier la définition de la table, vous pouvez la contourner à l'aide de la procédure suivante.
Pour la solution de contournement ROWID GENERATE ALWAYS :
-
Pour la table source, créez une instruction
TABLEd'extraction et utilisez une clauseCOLSEXCEPTdans cette instruction qui exclut la colonneROWID. Exemple :TABLE tab1, COLSEXCEPT (rowidcol);La clause
COLSEXCEPTexclut la capture et la réplication de la colonneROWIDdans la table cible. -
Pour la table cible, assurez-vous que le processus Replicat n'essaie pas d'utiliser la colonne
ROWIDcomme clé. Cette opération peut être effectuée de l'une des manières suivantes :-
Indiquez une clé primaire dans la définition de la table cible.
-
Si une clé ne peut pas être créée, créez un paramètre
MAPde réplication pour la table et utilisez une clauseKEYCOLSdans cette instruction qui contient des colonnes uniques à l'exception de la colonneROWID. Le processus Replicat utilisera ces colonnes comme clé. Exemple :MAP tab1, TARGET tab1, KEYCOLS (num, ckey);
-
Tenir à jour les tables de requêtes matérialisées
Pour maintenir la parité entre les tables de requêtes matérialisées (MQT) source et cible, vous répliquez les tables de base, mais pas les tables MQT. La base de données cible gère les MQT en fonction des modifications que le processus Replicat applique aux tables de base.
Les règles de configuration de ces tables sont les suivantes :
-
Incluez les tables de base dans vos instructions
TABLEetMAP. -
N'incluez pas de MQT dans les instructions
TABLEetMAP. -
Les caractères génériques peuvent être utilisés dans les instructions
TABLEetMAP, même s'ils peuvent résoudre des noms MQT avec des noms de table standard. Oracle GoldenGate exclut automatiquement les MQT des listes de tables avec caractères génériques. Cependant, tout MQT explicitement répertorié dans une instructionTABLEExtract par son nom entraînera l'abandon du processus Extract.