Migrer des données avec DBMS_CLOUD_IMPORT

DBMS_CLOUD_IMPORT vous permet d'importer des données à partir de bases de données Oracle et non Oracle dans Oracle Autonomous AI Database à l'aide d'une approche simple et cohérente.

Migrer des données avec DBMS_CLOUD_IMPORT

Lorsque vous travaillez sur plusieurs systèmes de base de données, le déplacement de données peut être complexe en raison de différences dans les technologies, les formats et les outils. DBMS_CLOUD_IMPORT simplifie ce processus en fournissant une approche unifiée pour importer des données entre les plates-formes, éliminant ainsi la nécessité de gérer plusieurs outils ou workflows.

DBMS_CLOUD_IMPORT prend également en charge le transfert de données hautes performances et fiable. Le processus d'import utilise l'exécution parallèle pour améliorer le débit. Si un import est interrompu, par exemple lors d'une maintenance ou d'une perte de connexion à la base de données source, il reprend automatiquement à partir de l'endroit où il s'est arrêté, ce qui garantit son exécution sans avoir à relancer l'import.

Vous pouvez importer des données à partir de bases de données Oracle et de bases de données non Oracle prises en charge, notamment MySQL, PostgreSQL et Amazon Redshift. Pour les sources Oracle, les données et les objets de base de données sont importés. Pour les sources non Oracle, l'import se concentre sur le déplacement de données avec conversion automatique des types de données vers des formats compatibles Oracle.

Cette fonctionnalité prend en charge l'importation flexible de données. Vous pouvez importer une base de données entière ou un sous-ensemble de données, tels que des schémas ou des tables sélectionnés, en fonction de vos besoins. Oracle fournit également des vues de dictionnaire de données pour surveiller la progression et le statut de l'importation.

Principaux avantages

  • Importation de données unifiées sur différentes plates-formes : importez des données à partir de bases de données Oracle et non Oracle sans utiliser plusieurs outils.
  • Transfert de données hautes performances : déplacement de grands volumes de données à l'aide d'une exécution en parallèle.
  • Résilience intégrée : reprenez automatiquement les opérations d'import après les interruptions, y compris la maintenance ou la perte de connexion à la base de données source.
  • Sélection flexible des données : importez une base de données complète ou un sous-ensemble de données, y compris des schémas ou des tables spécifiques.

Pour plus d'informations, reportez-vous à :

Prérequis

Répertorie les prérequis pour l'exécution de l'import dans la base de données Autonomous AI.

Avant de commencer l'import, assurez-vous que les prérequis suivants sont respectés.

  • Vous devez être connecté en tant qu'utilisateur ADMIN.

  • Les sous-programmes DBMS_CLOUD_IMPORT accèdent à la base de données source à l'aide d'un lien de base de données créé implicitement dans le cadre de la tâche d'import. Pour établir cette connexion, vous devez créer un objet d'informations d'identification avec les informations d'identification de la base de données distante et le référencer lors de la création de la tâche d'import. Pour plus d'informations, reportez-vous à Procédure CREATE_CREDENTIAL.

  • Pour les bases de données source non Oracle, indiquez longtovarchar => 'true' dans le paramètre gateway_params lors de l'appel de DBMS_CLOUD_IMPORT.CREATE_IMPORT_TASK. Cette opération est requise car les métadonnées des bases de données non Oracle sont composées de colonnes LONG. Par exemple : gateway_params => JSON_OBJECT('db_type' VALUE <db_type>, 'longtovarchar' VALUE 'true').

  • Assurez-vous que la base de données indiquée par service_name peut se connecter au schéma cible et y accéder.

  • Les travaux d'importation reprennent à partir du point d'interruption, par exemple après un événement de maintenance planifié ou une interruption inattendue. Le traitement parallèle et la reprise automatique sont pris en charge pour les bases de données source Oracle, MySQL, PostgreSQL et Amazon Redshift. Pour les bases de données non source Oracle, les prérequis suivants sont requis pour activer le traitement parallèle et la reprise automatique (des prérequis supplémentaires peuvent s'appliquer en fonction du type de base de données source) :

    • La table source est partitionnée par plage.

    • Des statistiques d'histogramme existent pour au moins une colonne numérique.

    • Un index numérique ou une clé primaire est présent.

Si ces prérequis ne sont pas satisfaits, la table est copiée à l'aide de CREATE TABLE AS SELECT (CTAS). Dans ce cas, le traitement parallèle n'est pas pris en charge et, si le travail est interrompu, il redémarre à partir du début de la table au lieu de reprendre à partir du point d'interruption.

Des prérequis supplémentaires peuvent être requis pour prendre en charge le traitement parallèle et la possibilité de redémarrer de manière fiable, en fonction du type de base de données source. Pour plus d'informations, reportez-vous aux rubriques suivantes :

  • Base de données source PostgreSQL
    • Créez les vues requises sur la base de données PostgreSQL source. Pour prendre en charge le traitement parallèle et la possibilité de redémarrer de manière fiable lors de la migration à partir de PostgreSQL, créez les vues requises sur la base de données source. Si les vues ne sont pas présentes, l'import utilise CREATE TABLE AS SELECT(CTAS). Dans ce mode, le traitement parallèle n'est pas pris en charge et, si un chargement de table est interrompu, il redémarre depuis le début. Pour plus d'informations, reportez-vous à CREATE TABLE AS SELECT.
    • Vous pouvez créer ces vues à l'aide des scripts fournis par Oracle disponibles sur GitHub. Vérifiez et exécutez les scripts sur la base de données PostgreSQL source avant de lancer l'import.

Pour plus d'informations, reportez-vous à la documentation PostgreSQL 18.3.

  • Base de données source MySQL
    • schema_list n'est pas pris en charge pour les sources MySQL car MySQL n'utilise pas de schémas. Lorsque vous appelez REATE_IMPORT_TASK, indiquez un tableau vide pour schema_list ([]).

    • La valeur que vous indiquez pour service_name est utilisée comme nom de schéma.

    • Créez les vues requises sur la base de données MySQL source. Pour prendre en charge le traitement parallèle et la possibilité de redémarrer de manière fiable lors de la migration à partir de MySQL, créez les vues requises sur la base de données source. Si les vues ne sont pas présentes, l'import utilise CREATE TABLE AS SELECT (CTAS). Dans ce mode, le traitement parallèle n'est pas pris en charge et, si un chargement de table est interrompu, il redémarre depuis le début. Pour plus d'informations, reportez-vous à CREATE TABLE AS SELECT.

    • Vous pouvez créer ces vues à l'aide des scripts fournis par Oracle disponibles sur Github. Vérifiez et exécutez les scripts sur la base de données MySQL source avant de lancer l'import.

Pour plus d'informations, reportez-vous à Référence MySQL.

  • Base de données source Amazon Redshift
    • Accordez des privilèges pour l'accès aux liens de base de données. Pour lire des données à partir de tables distantes, vous devez vous assurer que le compte que vous utilisez pour créer le lien de base de données dispose des privilèges requis, par exemple :

      • GRANT USAGE ON SCHEMA <remote_schema> TO <dblink_user>;

      • GRANT SELECT ON <remote_schema>.<remote_table> TO <dblink_user>;

    • Garantir la visibilité des métadonnées pour les schémas non-public. Si le schéma distant n'est pas public et que l'import doit interroger les métadonnées (par exemple, via pg_table_def), vous devez inclure le schéma dans le fichier search_path de l'utilisateur de lien de base de données, par exemple :

      • ALTER USER <dblink_user> SET search_path TO <new_value>;

Pour plus d'informations, reportez-vous à la documentation Amazon Redshift.

Importer des données à l'aide de DBMS_CLOUD_IMPORT

Explique comment importer des données dans la base de données d'IA autonome à l'aide de DBMS_CLOUD_IMPORT.

Pour importer des données dans une base de données Autonomous AI, utilisez la procédure DBMS_CLOUD_IMPORT.CREATE_IMPORT_TASK. Cette procédure vous permet d'importer des données à partir de bases de données Oracle et non Oracle prises en charge en indiquant les détails de connexion requis et, éventuellement, les objets à importer.

Vous pouvez importer une base de données entière ou un sous-ensemble de données, tels que des schémas ou des tables spécifiques, en indiquant des paramètres tels que schema_list ou table_list. Lorsque vous exécutez cette procédure, Oracle Database crée un travail Oracle Scheduler pour gérer la tâche d'import. Le travail utilise les informations d'identification et les détails de connexion fournis pour créer un lien de base de données vers la base de données source et transférer des données vers la base de données Autonomous AI.

Le comportement de l'import dépend du type de base de données source :

  • Importations Oracle vers Oracle : les données et les objets de base de données sont migrés. Les index, les contraintes et les partitions sont automatiquement créés dans la base de données Autonomous AI cible. Si l'importation est interrompue (par exemple en raison d'une maintenance), elle reprend à partir du point d'interruption.
  • Imports à partir de bases de données non Oracle : seules les données sont migrées. Les clés, les index, les contraintes et les autres objets dépendants ne sont pas créés. Les partitions sont créées uniquement si la table source est partitionnée par plage. La capacité de reprise dépend des prérequis ; sinon, l'import redémarre depuis le début.

Vous devez exécuter l'import en tant qu'utilisateur ADMIN. La base de données Autonomous AI cible reste disponible pendant l'import. Cependant, Oracle recommande d'éviter toute autre activité sur la base de données cible jusqu'à la fin de l'import. Si un travail d'import est interrompu (par exemple, en raison d'une maintenance planifiée ou d'une interruption inattendue), il peut reprendre à partir du point d'interruption ou de redémarrage, selon le type de base de données source et si les prérequis sont satisfaits. Vous pouvez également utiliser Suspendre et reprendre pour suspendre temporairement le travail, puis le poursuivre.

Créer une tâche d'importation

Décrit les étapes de création d'une tâche d'importation.

Avant de créer et de démarrer la tâche d'import, configurez l'authentification sur la base de données source. DBMS_CLOUD_IMPORT utilise un objet d'informations d'identification pour se connecter en toute sécurité à la source (et pour créer le lien de base de données requis pour la tâche).

Pour créer une tâche d'importation, procédez comme suit :

  1. Créez des informations d'identification pour la base source. Ces informations d'identification permettent d'authentifier et de se connecter en toute sécurité au système source. Par exemple :
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'db1_cred',
        username        => '<username>',
        password        => '<password>'
      );
    END;
    /

    Pour plus d'informations, reportez-vous à Procédure CREATE_CREDENTIAL.

  2. Créer une tâche d'import :

    Une fois les informations d'identification créées, utilisez la procédure DBMS_CLOUD_IMPORT.CREATE_IMPORT_TASK pour créer et démarrer une tâche d'import. Cette procédure importe des données à partir de bases de données Oracle et non Oracle prises en charge, telles que MySQL, PostgreSQL et Amazon Redshift.

    Lorsque vous exécutez cette procédure, indiquez les informations d'identification et de connexion requises. Vous pouvez également contrôler les données importées à l'aide de paramètres tels que schema_list ou table_list.

    Oracle Database exécute l'import en tant que travail Oracle Scheduler, qui gère l'opération et suit la progression. Le travail conserve l'état de l'import au niveau de la table. Si l'import est interrompu, il reprend automatiquement en continuant à partir des dernières tables incomplètes, au lieu de redémarrer l'opération entière.

    Les exemples suivants montrent comment créer des tâches d'import pour différents types de base de données source en fournissant les informations d'identification et les détails de connexion requis.

    Exemple : crée une tâche d'import qui se connecte à une source Oracle et migre uniquement les tables indiquées (par exemple, ADMIN.TABLE1 et ADMIN.TABLE2) vers la base de données Autonomous AI cible.
    BEGIN
      DBMS_CLOUD_IMPORT.CREATE_IMPORT_TASK(
        task_name          => '<orcl_import_job>',
        hostname           => '<example1.oraclecloud.com>',
        port               => '<port>',
        service_name       => '<service_name>',
        ssl_server_cert_dn => '<cn=remote_db_cn_name>',
        directory_name     => '<walletdb1>',
        credential_name    => 'db1_cred',
        table_list         => '[{"schema_name": "admin", "table_name": "table1"},
                               {"schema_name": "admin",  "table_name": "table2"}]'
      );
    END;
    /

    Exemple : crée une tâche d'import qui se connecte à la base de données Oracle source à l'aide des informations d'identification et des détails de connexion indiqués, et migre l'ensemble du schéma ADMIN. Utilisez schema_list lorsque vous voulez migrer des schémas au lieu de spécifier des tables individuelles.
    BEGIN
      DBMS_CLOUD_IMPORT.CREATE_IMPORT_TASK(
        task_name          => 'orcl_import_job',
        hostname           => '<remote_db_hostname>',
        port               => '<remote_db_port>',
        service_name       => '<remote_db_service_name>',
        ssl_server_cert_dn => '<cn=remote_db_cn_name>',
        directory_name     => '<walletdb>',
        credential_name    => 'db1_cred',
        schema_list        => '["admin"]'
      );
    END;
    /
    Remarque

    • Pour restreindre la portée de l'import :
      • Utilisez schema_list pour importer des schémas.

      • Utilisez table_list pour importer des tables spécifiques dans plusieurs schémas.

    • Le paramètre table_list est pris en charge uniquement lorsque la base de données source est Oracle et n'est pas pris en charge pour les bases de données non Oracle.
    • Lorsque table_list est utilisé :
      • Les métadonnées de schéma pour les schémas associés sont importées si nécessaire.

      • Les données sont importées uniquement pour les tables explicitement indiquées dans table_list.

    • N'indiquez pas de chevauchement d'objets dans schema_list et table_list. Utilisez une seule option pour sélectionner un schéma ou une table donné.

    Exemple : crée une tâche d'import pour une source MySQL en indiquant gateway_params avec db_type défini sur mysql, et identifie les éléments à migrer à l'aide de schema_list (s'il y a lieu pour la configuration de passerelle).

    BEGIN
      DBMS_CLOUD_IMPORT.CREATE_IMPORT_TASK(
        task_name        => 'mysql_import_job',
        hostname         => '<mysql_hostname>',
        port             => '<mysql_port>',
        service_name     => '<mysql_service>',
        credential_name  => '<mysql_cred>',
        gateway_params   => JSON_OBJECT('db_type' VALUE 'mysql'),
        schema_list      => '["dg4odbc"]'
      );
    END;
    /

    Exemple : crée une tâche d'import pour une source PostgreSQL en indiquant gateway_params avec db_type défini sur postgres. La tâche se connecte à PostgreSQL et migre les données vers la base de données Autonomous AI cible en fonction de la configuration de la tâche.

    BEGIN
      DBMS_CLOUD_IMPORT.CREATE_IMPORT_TASK(
        task_name        => '<postgres_import_job>',
        hostname         => '<postgres_hostname>',
        port             => '<5432>',
        service_name     => '<postgres_serv>',
        credential_name  => '<postgres_cred>',
        gateway_params   => JSON_OBJECT('db_type' VALUE 'postgres')
      );
    END;
    /

    Dans ces exemples, hostname, port et service_name identifient l'adresse de base de données source et sont utilisés par la tâche pour établir la connectivité (y compris la création du lien de base de données requis). credential_name s'authentifie auprès de la base de données source afin que le lien puisse être créé. Pour les sources Oracle, utilisez table_list pour migrer des tables spécifiques ou schema_list pour migrer des schémas. Pour les bases de données non Oracle, gateway_params est également requis pour indiquer le type de base de données source (par exemple, MySQL ou PostgreSQL) et activer la connectivité basée sur une passerelle appropriée pour l'import.

Suspendre et reprendre l'importation

Explique comment suspendre et reprendre une opération d'importation.

Si nécessaire, vous pouvez mettre temporairement l'import en pause à l'aide de la procédure SUSPEND_IMPORT_TASK :

BEGIN
  DBMS_CLOUD_IMPORT.SUSPEND_IMPORT_TASK(
    task_name => 'orcl_import_job'
 );
END;
/

Cela arrête le travail du planificateur tout en conservant toutes les métadonnées et la progression. Pour plus d'informations, reportez-vous à Procédure SUSPEND_IMPORT_TASK.

Pour poursuivre l'import, utilisez la procédure RESUME_IMPORT_TASK :

BEGIN
  DBMS_CLOUD_IMPORT.RESUME_IMPORT_TASK(
    task_name => 'orcl_import_job'
  );
END;
/

Le travail reprend à partir du dernier point de reprise, en ignorant les tables terminées et en continuant le travail restant.

Remarque

Le comportement de reprise dépend du type de base de données source et des prérequis. Lorsque les conditions préalables au traitement parallèle et à la reprise automatique sont remplies, l'importation se poursuit à partir du point d'interruption. Sinon, l'import utilise CREATE TABLE AS SELECT (CTAS). Dans ce mode, le traitement parallèle n'est pas pris en charge et, si le travail est interrompu, il redémarre à partir du début de la table.

Pour plus d'informations, reportez-vous à Procédure RESUME_IMPORT_TASK.

Surveiller la progression de l'importation

Une fois que vous avez démarré une tâche d'importation, le travail du planificateur s'exécute en arrière-plan et les enregistrements de la base de données Autonomous AI progressent aux niveaux tâche et table.

Vous pouvez utiliser les vues suivantes du dictionnaire de données pour surveiller la progression et le statut de l'importation :
  • DBA_DATA_IMPORT_TASK_STATUS : affiche l'avancement au niveau de la tâche, notamment le statut global, le pourcentage d'avancement et un récapitulatif de l'activité (par exemple, les tables actuellement en cours).
  • DBA_DATA_IMPORT_TABLE_STATUS : affiche la progression au niveau de la table pour chaque table en cours d'importation, notamment le statut et les détails des erreurs pour les tables en échec.

Par exemple, interrogez DBA_DATA_IMPORT_TABLE_STATUS pour afficher la progression et les erreurs au niveau de la table. La colonne STATUS indique l'état en cours de chaque table, tel que SUCCEEDED, FAILED, LOADING ou STOPPED.

BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'db1_cred',
    username        => '<username>',
    password        => '<password>'
  );
END;
/

La sortie se présente de la manière suivante :

IMPORT_TASK_NAME   SCHEMA_NAME   SCHEMA_OBJECT   STATUS
------------------ ------------- --------------- ----------
IMPORT_JOB1        SALES         ORDERS          SUCCEEDED
IMPORT_JOB1        SALES         CUSTOMERS       SUCCEEDED
IMPORT_JOB1        HR            EMPLOYEES       LOADING
IMPORT_JOB1        HR            DEPARTMENTS     FAILED

Une fois l'import terminé, le travail du planificateur est automatiquement désactivé. Pour plus d'informations, reportez-vous à Surveillance et diagnostic de l'import hétérogène.

Supprimer une tâche d'importation

Décrit les étapes de suppression d'une tâche d'import.

Une fois l'import terminé et inutile, vous pouvez supprimer la tâche d'import. La suppression de la tâche enlève le travail du planificateur, les liens de base de données et les métadonnées associées. Elle n'annule pas les objets ou les données qui ont déjà été créés dans le schéma cible et peut laisser une table en cours partiellement chargée.

Si vous réexécutez l'import pour le même schéma, vous devrez peut-être nettoyer manuellement les tables partiellement chargées. Pour identifier les tables incomplètes, interrogez les vues du dictionnaire de données telles que DBA_DATA_IMPORT_TABLE_STATUS et vérifiez le statut de la table avant d'effectuer le nettoyage.

BEGIN
  DBMS_CLOUD_IMPORT.DROP_IMPORT_TASK(
    task_name => 'orcl_import_job'
  );
END;
/

Cet exemple supprime le travail d'import ORCL_IMPORT_JOB. Pour plus d'informations, voir Procédure DROP_IMPORT_TASK.

Surveillance et diagnostic de l'importation hétérogène

Pour diagnostiquer les problèmes et surveiller la progression des opérations d'import de données, vous pouvez interroger les vues suivantes du dictionnaire de données. Ces vues fournissent des informations détaillées sur le statut des tâches, la progression de l'exécution, les opérations parallèles et les objets associés.

Nom de la vue Description
Vue DBA_DATA_IMPORT_TASK_STATUS Affiche le statut de chaque table au sein d'une tâche d'importation, y compris les erreurs rencontrées au cours du traitement.
Vue DBA_DATA_IMPORT_TABLE_STATUS Fournit des détails généraux au niveau de la tâche, notamment des informations sur l'avancement, telles que le nombre de tables traitées, chargées et terminées avec succès.