Pourquoi ma tâche AWS DMS a-t-elle échoué lors de l'utilisation de Binary Reader pour Amazon RDS Oracle ?

Date de la dernière mise à jour : 02/10/2019

Pourquoi ma tâche AWS Database Migration Service (AWS DMS) a-t-elle échoué lors de l'utilisation de Binary Reader pour Amazon Relational Database Service (Amazon RDS) pour Oracle ?

Brève description

Au cours de la phase de capture des modifications des données (CDC), Oracle fournit deux méthodes pour lire les journaux redo : Oracle LogMiner et Binary Reader. Oracle LogMiner est une interface SQL qui accède aux journaux redo en ligne et archivés, et Binary Reader est une fonction AWS DMS qui lit et analyse les journaux redo directement.

Lorsque vous utilisez Binary Reader pour les migrations qui présentent un volume élevé de modifications, Binary Reader a moins d'impact sur la base de données source Oracle que sur Oracle LogMiner, car les journaux d'archivage sont copiés, puis analysés sur l'instance de réplication. Pour les migrations qui ont un volume élevé de modifications, Binary Reader offre généralement de meilleures performances CDC qu'Oracle LogMiner. Veillez à allouer une bande passante réseau suffisante pour éviter les goulots d'étranglement des performances réseau.

Si les prérequis ne sont pas respectés lors de l'utilisation de Binary Reader, vous pouvez recevoir deux types d'erreurs :

  • Erreurs d'autorisations
  • Erreurs d'attribut de connexion supplémentaires

Résolution

Erreurs d'autorisations

AWS DMS utilise Binary Reader en créant des répertoires sur la base de données source. Par conséquent, le compte utilisateur AWS DMS doit disposer des privilèges requis pour accéder au point de terminaison Oracle source et créer les répertoires nécessaires. Si AWS DMS ne dispose pas des autorisations nécessaires, vous voyez des entrées de journal similaires à ce qui suit :

Messages
[SOURCE_CAPTURE ]E: OCI error 'ORA-00604: error occurred at recursive SQL level 1 ORA-20900: Invalid path used for directory: /rdsdbdata/log/arch ORA-06512: at "RDSADMIN.RDSADMIN", line 321 ORA-06512: at line 2' [1022307] (oradcdc_bfilectx.c:164) (erreur OCI 'ORA-00604 : une erreur s'est produite au niveau 1 SQL récursif ORA-20900 : chemin non valide utilisé pour le répertoire : /rdsdbdata/log/arch ORA-06512 : au niveau de "RDSADMIN.RDSADMIN", ligne 321 ORA-06512 : à la ligne 2' [1022307] [oradcdc_bfilectx.c:164].)

Pour résoudre ces erreurs, veillez à utiliser l'utilisateur principal Amazon RDS en tant qu'utilisateur AWS DMS. Les répertoires sont créés automatiquement lorsqu'une tâche AWS DMS commence à s'exécuter. Si les répertoires ne sont pas créés, connectez-vous à la base de données Oracle à l'aide de l'utilisateur principal. Exécutez ensuite les commandes suivantes pour tester si ces répertoires peuvent être créés :

SQL> exec rdsadmin.rdsadmin_master_util.create_archivelog_dir;
SQL> exec rdsadmin.rdsadmin_master_util.create_onlinelog_dir;

Vérifiez les résultats en interrogeant la table all_directories :

SQL> select directory_path from all_directories where directory_name in ('ONLINELOG_DIR','ARCHIVELOG_DIR');
DIRECTORY_PATH
--------------------------------------------------------------------------------
/rdsdbdata/log/arch
/rdsdbdata/log/onlinelog

Une fois que vous avez créé les répertoires obligatoires ONLINELOG_DIR et ARCHIVELOG_DIR, redémarrez votre tâche AWS DMS.

Erreurs d'attribut de connexion supplémentaires

Si vous utilisez Binary Reader, mais que les attributs de connexion supplémentaires nécessaires sont manquants pour votre source Oracle, vous voyez l'entrée de journal suivante :

Messages
[TASK_MANAGER ]E: ORA-00604: error occurred at recursive SQL level 1 ORA-20900: Invalid path used for directory: awsdms_dir_test ORA-06512: at "RDSADMIN.RDSADMIN", line 321 ORA-06512: at line 2 ; Invalid RDS Oracle binary reader db settings, replacePathPrefix should be set to TRUE and usePathPrefix should be set to '/rdsdbdata/log/'; Invalid RDS Oracle binary reader db settings, useAlternateFolderForOnline should be set to TRUE; Invalid RDS Oracle binary reader db setting, oraclePathPrefix should not be empty; Invalid RDS Oracle binary reader db settings; Failed while preparing stream component 'st_0_4MGMBIOJCILNOU3UHICCDBCNFQ'.; Cannot initialize subtask; Stream component 'st_0_4MGMBIOJCILNOU3UHICCDBCNFQ' terminated [1020418] (replicationtask.c:2680) (ORA-00604 : une erreur s'est produit au niveau 1 SQL récursif ORA-20900 : chemin non valide utilisé pour le répertoire : awsdms_dir_test ORA-06512 : au niveau de "RDSADMIN.RDSADMIN", ligne 321 ORA-06512 : à la ligne 2 ; paramètres de base de données RDS Oracle Binary Reader non valides, replacePathPrefix doit être défini sur TRUE et usePathPrefix doit être défini sur '/rdsdbdata/log/' ; paramètres de base de données RDS Oracle Binary Reader non valides, useAlternateFolderForOnline doit être défini sur TRUE ; paramètre de base de données RDS Oracle Binary Reader non valides, oraclePathPrefix ne doit pas être vide ; paramètres de base de données RDS Oracle Binary Reader non valides ; échec lors de la préparation du composant de flux 'st_0_4MGMBIOJCILNOU3UHICCDBCNFQ' ; impossible d'initialiser subtask ; composant de flux 'st_0_4MGMBIOJCILNOU3UHICCDBCNFQ' mis hors service [1020418] [replicationtask.c:2680])

Pour utiliser Binary Reader afin de capturer les modifications des données pour une source Amazon RDS Oracle, ajoutez les attributs de connexion supplémentaires suivants au point de terminaison source :

useLogMinerReader=N;useBfile=Y;replacePathPrefix=true;usePathPrefix=/rdsdbdata/log/;useAlternateFolderForOnline=true;oraclePathPrefix=/rdsdbdata/db/ORCL_A/;accessAlternateDirectly=false