Migración de datos con DBMS_CLOUD_IMPORT

DBMS_CLOUD_IMPORT permite importar datos de bases de datos de Oracle y no de Oracle a Oracle Autonomous AI Database mediante un enfoque simple y coherente.

Migración de datos con DBMS_CLOUD_IMPORT

Cuando se trabaja en varios sistemas de bases de datos, el movimiento de datos puede ser complejo debido a las diferencias en tecnologías, formatos y herramientas. DBMS_CLOUD_IMPORT simplifica este proceso al proporcionar un enfoque unificado para importar datos entre plataformas, eliminando la necesidad de gestionar varias herramientas o flujos de trabajo.

DBMS_CLOUD_IMPORT también admite la transferencia de datos fiable y de alto rendimiento. El proceso de importación utiliza la ejecución en paralelo para mejorar el rendimiento y, si se interrumpe una importación, como durante el mantenimiento o la pérdida de conexión a la base de datos de origen, se reanuda automáticamente desde donde se detuvo, lo que garantiza la finalización sin tener que reiniciar la importación.

Puede importar datos de bases de datos Oracle y bases de datos no Oracle compatibles, incluidas MySQL, PostgreSQL y Amazon Redshift. Para los orígenes de Oracle, se importan tanto los datos como los objetos de base de datos. Para los orígenes que no son de Oracle, la importación se centra en el movimiento de datos con la conversión automática de tipos de datos a formatos compatibles con Oracle.

La capacidad admite la importación de datos flexible. Puede importar una base de datos completa o un subjuego de datos, como esquemas o tablas seleccionados, según sus requisitos. Oracle también proporciona vistas del diccionario de datos para supervisar el progreso y realizar un seguimiento del estado de importación.

Beneficios clave

  • Importación de datos unificada entre plataformas: importe datos de bases de datos de Oracle y no de Oracle sin utilizar varias herramientas.
  • Transferencia de datos de alto rendimiento: permite mover grandes volúmenes de datos mediante la ejecución en paralelo.
  • Resiliencia incorporada: reanude las operaciones de importación automáticamente después de las interrupciones, incluido el mantenimiento o la pérdida de conexión a la base de datos de origen.
  • Selección flexible de datos: importe una base de datos completa o un subjuego de datos, incluidos esquemas o tablas específicos.

Puede obtener más información en los siguientes enlaces:

Requisitos

Muestra los requisitos para realizar la importación en la base de datos de IA autónoma.

Antes de iniciar la importación, asegúrese de que se cumplan los siguientes requisitos previos.

  • Debe haber iniciado sesión como usuario ADMIN.

  • Los subprogramas DBMS_CLOUD_IMPORT acceden a la base de datos origen mediante un enlace de base de datos creado implícitamente como parte de la tarea de importación. Para establecer esta conexión, debe crear un objeto de credencial con las credenciales de la base de datos remota y hacer referencia a él al crear la tarea de importación. Consulte Procedimiento CREATE_CREDENTIAL para obtener más información.

  • Para bases de datos de origen que no sean de Oracle, especifique longtovarchar => 'true' en el parámetro gateway_params al llamar a DBMS_CLOUD_IMPORT.CREATE_IMPORT_TASK. Esto es necesario porque los metadatos de las bases de datos que no son de Oracle constan de columnas LONG. Por ejemplo: gateway_params => JSON_OBJECT('db_type' VALUE <db_type>, 'longtovarchar' VALUE 'true').

  • Asegúrese de que la base de datos especificada por service_name puede conectarse al esquema de destino y acceder a él.

  • Los trabajos de importación se reanudan desde el punto de interrupción, como después de un evento de mantenimiento planificado o una interrupción inesperada. El procesamiento paralelo y la reanudación automática son compatibles con las bases de datos de origen de Oracle, MySQL, PostgreSQL y Amazon Redshift. Para las bases de datos de origen que no son de Oracle, se necesitan los siguientes requisitos para activar el procesamiento en paralelo y la reanudación automática (pueden aplicarse requisitos adicionales según el tipo de base de datos de origen):

    • La tabla de origen está particionada por rango.

    • Existen estadísticas de histograma para al menos una columna numérica.

    • Existe un índice numérico o una clave primaria.

Si no se cumplen estos requisitos, la tabla se copia mediante CREATE TABLE AS SELECT (CTAS). En este caso, no se admite el procesamiento paralelo y, si se interrumpe el trabajo, se reinicia desde el principio de la tabla en lugar de reanudarse desde el punto de interrupción.

Es posible que se necesiten requisitos adicionales para soportar el procesamiento paralelo y la capacidad de reinicio fiable, en función del tipo de base de datos origen. Para obtener detalles, consulte lo siguiente:

  • Base de datos de origen de PostgreSQL
    • Cree las vistas necesarias en la base de datos PostgreSQL de origen. Para soportar el procesamiento paralelo y la reiniciabilidad fiable al migrar desde PostgreSQL, cree las vistas necesarias en la base de datos de origen. Si las vistas no están presentes, la importación utiliza CREATE TABLE AS SELECT(CTAS), en ese modo no se soporta el procesamiento paralelo y, si se interrumpe la carga de una tabla, se reinicia desde el principio. Consulte CREATE TABLE AS SELECT para obtener más información.
    • Puede crear estas vistas mediante los scripts proporcionados por Oracle disponibles en GitHub. Revise y ejecute los scripts en la base de datos PostgreSQL de origen antes de iniciar la importación.

Consulte la documentación de PostgreSQL 18.3 para obtener más información.

  • Base de datos de origen de MySQL
    • schema_list no está soportado para los orígenes de MySQL porque MySQL no utiliza esquemas. Al llamar a REATE_IMPORT_TASK, especifique una matriz vacía para schema_list ([]).

    • El valor que especifique para service_name se utiliza como nombre de esquema.

    • Cree las vistas necesarias en la base de datos MySQL de origen. Para soportar el procesamiento paralelo y la reiniciabilidad fiable al migrar desde MySQL, cree las vistas necesarias en la base de datos de origen. Si las vistas no están presentes, la importación utiliza CREATE TABLE AS SELECT (CTAS), en ese modo no se soporta el procesamiento paralelo y, si se interrumpe la carga de una tabla, se reinicia desde el principio. Consulte CREATE TABLE AS SELECT para obtener más información.

    • Puede crear estas vistas mediante los scripts proporcionados por Oracle disponibles en Github. Revise y ejecute los scripts en la base de datos MySQL de origen antes de iniciar la importación.

Consulte Referencia de MySQL para obtener más información.

  • Base de datos de origen de Amazon Redshift
    • Otorgue privilegios para el acceso a enlaces de base de datos. Para leer datos de tablas remotas, debe asegurarse de que la cuenta que utiliza para crear el enlace de base de datos tiene los privilegios necesarios, por ejemplo:

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

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

    • Garantice la visibilidad de los metadatos para los esquemas que no sean public. Si el esquema remoto no es public y la importación necesita consultar metadatos (por ejemplo, mediante pg_table_def), debe incluir el esquema en el enlace de base de datos search_path del usuario, por ejemplo:

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

Consulte la documentación de Amazon Redshift para obtener más información.

Importación de datos usando DBMS_CLOUD_IMPORT

Describe cómo importar datos a la base de datos de IA autónoma mediante DBMS_CLOUD_IMPORT.

Para importar datos a la base de datos de IA autónoma, utilice el procedimiento DBMS_CLOUD_IMPORT.CREATE_IMPORT_TASK. Este procedimiento permite importar datos de bases de datos Oracle y no Oracle soportadas especificando los detalles de conexión necesarios y, opcionalmente, los objetos que se van a importar.

Puede importar una base de datos completa o un subjuego de datos, como esquemas o tablas específicos, especificando parámetros como schema_list o table_list. Al ejecutar este procedimiento, Oracle Database crea un trabajo de Oracle Scheduler para gestionar la tarea de importación. El trabajo utiliza los detalles y las credenciales de conexión proporcionados para crear un enlace de base de datos a la base de datos de origen y transferir datos a la base de datos de IA autónoma.

El comportamiento de la importación depende del tipo de base de datos origen:

  • Importaciones de Oracle a Oracle: tanto los datos como los objetos de base de datos se migran. Los índices, las restricciones y las particiones se crean automáticamente en la base de datos de IA autónoma de destino. Si la importación se interrumpe (por ejemplo, debido al mantenimiento), se reanuda desde el punto de interrupción.
  • Importaciones desde bases de datos que no son de Oracle: solo se migran los datos. No se crean claves, índices, restricciones y otros objetos dependientes. Las particiones se crean solo si la tabla de origen está particionada por rango. La capacidad de reanudación depende de los requisitos; de lo contrario, la importación se reinicia desde el principio.

Debe ejecutar la importación como usuario ADMIN. La base de datos de IA autónoma de destino permanece disponible durante la importación; sin embargo, Oracle recomienda evitar otras actividades en la base de datos de destino hasta que finalice la importación. Si se interrumpe un trabajo de importación (por ejemplo, debido a un mantenimiento planificado o a una interrupción inesperada), puede reanudarse desde el punto de interrupción o reinicio, según el tipo de base de datos de origen y si se cumplen los requisitos. También puede utilizar suspender y reanudar para pausar temporalmente y, a continuación, continuar con el trabajo.

Crear una tarea de importación

Describe los pasos para crear una tarea de importación.

Antes de crear e iniciar la tarea de importación, configure la autenticación en la base de datos de origen. DBMS_CLOUD_IMPORT utiliza un objeto de credencial para conectarse de forma segura al origen (y para crear el enlace de base de datos necesario para la tarea).

Siga estos pasos para crear una tarea de importación:

  1. Cree credenciales para la base datos de origen. Estas credenciales se utilizan para autenticarse y conectarse de forma segura al sistema de origen. Por ejemplo:
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'db1_cred',
        username        => '<username>',
        password        => '<password>'
      );
    END;
    /

    Consulte Procedimiento CREATE_CREDENTIAL para obtener más información.

  2. Crear una tarea de importación:

    Después de crear la credencial, utilice el procedimiento DBMS_CLOUD_IMPORT.CREATE_IMPORT_TASK para crear e iniciar una tarea de importación. Este procedimiento importa datos de Oracle y bases de datos compatibles que no son de Oracle, como MySQL, PostgreSQL y Amazon Redshift.

    Al ejecutar este procedimiento, especifique los detalles y las credenciales de conexión necesarios. También puede controlar qué datos se importan mediante parámetros como schema_list o table_list.

    Oracle Database ejecuta la importación como un trabajo de Oracle Scheduler, que gestiona la operación y realiza un seguimiento del progreso. El trabajo mantiene el estado de la importación en el nivel de tabla. Si la importación se interrumpe, se reanuda automáticamente continuando desde las últimas tablas incompletas, en lugar de reiniciar toda la operación.

    En los siguientes ejemplos se muestra cómo crear tareas de importación para diferentes tipos de bases de datos de origen proporcionando los detalles y las credenciales de conexión necesarios.

    Ejemplo: crea una tarea de importación que se conecta a un origen de Oracle y solo migra las tablas especificadas (por ejemplo, ADMIN.TABLE1 y ADMIN.TABLE2) a la base de datos de IA autónoma de destino.
    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;
    /

    Ejemplo: crea una tarea de importación que se conecta a la base de datos Oracle de origen mediante la credencial y los detalles de conexión especificados, y migra todo el esquema ADMIN. Utilice schema_list cuando desee migrar uno o más esquemas, en lugar de especificar tablas individuales.
    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;
    /
    Nota

    • Para restringir el ámbito de la importación:
      • Utilice schema_list para importar uno o más esquemas.

      • Utilice table_list para importar tablas específicas en varios esquemas.

    • El parámetro table_list solo está soportado cuando la base de datos origen es Oracle y no está soportado para bases de datos que no sean de Oracle.
    • Cuando se utiliza table_list:
      • Los metadatos de esquema para los esquemas asociados se importan según sea necesario.

      • Los datos solo se importan para las tablas especificadas explícitamente en table_list.

    • No especifique objetos superpuestos tanto en schema_list como en table_list; utilice solo una opción para seleccionar un esquema o una tabla determinados.

    Ejemplo: crea una tarea de importación para un origen de MySQL mediante la especificación de gateway_params con db_type definido en mysql e identifica qué migrar mediante schema_list (según corresponda para la configuración de gateway).

    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;
    /

    Ejemplo: crea una tarea de importación para un origen de PostgreSQL especificando gateway_params con db_type definido en postgres. La tarea se conecta a PostgreSQL y migra datos a la base de datos de IA autónoma de destino según la configuración de la tarea.

    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;
    /

    En estos ejemplos, hostname, port y service_name identifican el punto final de la base de datos de origen y la tarea lo utiliza para establecer la conectividad (incluida la creación del enlace de base de datos necesario). credential_name se autentica en la base de datos de origen para que se pueda crear el enlace. En el caso de los orígenes de Oracle, utilice table_list para migrar tablas específicas o schema_list para migrar uno o más esquemas. Para las bases de datos que no son de Oracle, gateway_params también es necesario para especificar el tipo de base de datos de origen (por ejemplo, MySQL o PostgreSQL) y activar la conectividad basada en gateway adecuada para la importación.

Suspender y reanudar importación

Describe cómo suspender y reanudar una operación de importación.

Si es necesario, puede pausar temporalmente la importación mediante el procedimiento SUSPEND_IMPORT_TASK:

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

De esta forma, se detiene el trabajo del programador y se conservan todos los metadatos y el progreso. Consulte Procedimiento SUSPEND_IMPORT_TASK para obtener más información.

Para continuar con la importación, utilice el procedimiento RESUME_IMPORT_TASK:

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

El trabajo se reanuda desde el último punto de control, omitiendo las tablas completadas y continuando el trabajo restante.

Nota

El comportamiento de reanudación depende del tipo de base de datos de origen y de los requisitos. Cuando se cumplen los requisitos para el procesamiento paralelo y la reanudación automática, la importación continúa desde el punto de interrupción. De lo contrario, la importación utiliza CREATE TABLE AS SELECT (CTAS); en este modo, no se admite el procesamiento paralelo y, si se interrumpe el trabajo, se reinicia desde el principio de la tabla.

Consulte el procedimiento RESUME_IMPORT_TASK para obtener más información.

Supervisar progreso de importación

Después de iniciar una tarea de importación, el trabajo del programador se ejecuta en segundo plano y la base de datos de IA autónoma registra el progreso en los niveles de tarea y tabla.

Puede utilizar las siguientes vistas del diccionario de datos para supervisar el progreso y el estado de la importación:
  • DBA_DATA_IMPORT_TASK_STATUS: muestra el progreso en el nivel de tarea, incluido el estado general, el porcentaje finalizado y un resumen de la actividad (por ejemplo, tablas actualmente en curso).
  • DBA_DATA_IMPORT_TABLE_STATUS: muestra el progreso de nivel de tabla para cada tabla que se importa, incluidos los detalles de estado y error de las tablas con fallos.

Por ejemplo, consulte DBA_DATA_IMPORT_TABLE_STATUS para ver el progreso y los errores a nivel de tabla. La columna STATUS indica el estado actual de cada tabla, como SUCCEEDED, FAILED, LOADING o STOPPED.

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

La salida es similar a la siguiente:

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

Cuando finaliza la importación, el trabajo del programador se desactiva automáticamente. Consulte Supervisión y diagnóstico de la importación heterogénea para obtener más información.

Borrar una tarea de importación

Describe los pasos para borrar una tarea de importación.

Una vez que la importación se haya completado y ya no sea necesaria, puede eliminar la tarea de importación. Al borrar la tarea, se elimina el trabajo del programador, los enlaces de base de datos y los metadatos asociados. No realiza un rollback de los objetos o datos que ya se han creado en el esquema de destino y puede dejar una tabla en curso parcialmente cargada.

Si vuelve a ejecutar la importación para el mismo esquema, puede que necesite limpiar manualmente las tablas parcialmente cargadas. Para identificar las tablas incompletas, consulte las vistas del diccionario de datos como DBA_DATA_IMPORT_TABLE_STATUS y revise el estado de la tabla antes de realizar la limpieza.

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

En este ejemplo, se suprime el trabajo de importación ORCL_IMPORT_JOB. Consulte Procedimiento DROP_IMPORT_TASK para obtener más información.

Control y diagnóstico de importación heterogénea

Para diagnosticar problemas y supervisar el progreso de las operaciones de importación de datos, puede consultar las siguientes vistas del diccionario de datos. Estas vistas proporcionan información detallada sobre el estado de la tarea, el progreso de la ejecución, las operaciones en paralelo y los objetos relacionados.

Nombre de vista Descripción
DBA_DATA_IMPORT_TASK_STATUS - Vista Muestra el estado de cada tabla dentro de una tarea de importación, incluidos los errores encontrados durante el procesamiento.
Vista DBA_DATA_IMPORT_TABLE_STATUS Proporciona detalles generales de nivel de tarea, incluida la información de progreso, como el número de tablas procesadas, cargadas y completadas correctamente.