Esegui migrazione dati con DBMS_CLOUD_IMPORT

DBMS_CLOUD_IMPORT ti consente di importare dati da database Oracle e non Oracle in Oracle Autonomous AI Database utilizzando un approccio semplice e coerente.

Esegui migrazione dati con DBMS_CLOUD_IMPORT

Quando si lavora su più sistemi di database, lo spostamento dei dati può essere complesso a causa delle differenze tra tecnologie, formati e strumenti. DBMS_CLOUD_IMPORT semplifica questo processo fornendo un approccio unificato per importare i dati tra le piattaforme, eliminando la necessità di gestire più strumenti o flussi di lavoro.

DBMS_CLOUD_IMPORT supporta anche il trasferimento dati affidabile e ad alte prestazioni. Il processo di importazione utilizza l'esecuzione parallela per migliorare il throughput e, se un'importazione viene interrotta, ad esempio durante la manutenzione o la perdita di connessione al database di origine, riprende automaticamente da dove è stata interrotta, garantendo il completamento senza dover riavviare l'importazione.

Puoi importare i dati dai database Oracle e dai database non Oracle supportati, inclusi MySQL, PostgreSQL e Amazon Redshift. Per le origini Oracle, vengono importati sia i dati che gli oggetti di database. Per le origini non Oracle, l'importazione si concentra sullo spostamento dei dati con conversione automatica dei tipi di dati in formati compatibili con Oracle.

La funzionalità supporta l'importazione flessibile dei dati. È possibile importare un intero database o un subset di dati, ad esempio schemi o tabelle selezionati, in base ai requisiti. Oracle fornisce inoltre viste del dizionario dati per monitorare l'avanzamento e tenere traccia dello stato di importazione.

Vantaggi principali

  • Importazione di dati unificata tra piattaforme: importa i dati dai database Oracle e non Oracle senza utilizzare più strumenti.
  • Trasferimento dati ad alte prestazioni: sposta grandi volumi di dati utilizzando l'esecuzione parallela.
  • Resistenza integrata: riprende automaticamente le operazioni di importazione dopo le interruzioni, inclusa la manutenzione o la perdita di connessione al database di origine.
  • Selezione flessibile dei dati: importa un database completo o un subset di dati, inclusi schemi o tabelle specifici.

Per ulteriori informazioni, vedere gli argomenti riportati di seguito.

Requisiti indispensabili

Elenca i prerequisiti per eseguire l'importazione in Autonomous AI Database.

Prima di avviare l'importazione, assicurarsi che vengano soddisfatti i prerequisiti riportati di seguito.

  • È necessario eseguire il login come utente ADMIN.

  • I sottoprogrammi DBMS_CLOUD_IMPORT accedono al database di origine utilizzando un database link creato implicitamente nell'ambito del task di importazione. Per stabilire questa connessione, è necessario creare un oggetto credenziale con le credenziali del database remoto e farvi riferimento durante la creazione del task di importazione. Per ulteriori informazioni, vedere Procedura CREDENTIAL.

  • Per i database di origine non Oracle, specificare longtovarchar => 'true' nel parametro gateway_params quando si chiama DBMS_CLOUD_IMPORT.CREATE_IMPORT_TASK. Ciò è necessario perché i metadati nei database non Oracle sono costituiti da colonne LONG. Ad esempio: gateway_params => JSON_OBJECT('db_type' VALUE <db_type>, 'longtovarchar' VALUE 'true').

  • Assicurarsi che il database specificato da service_name sia in grado di connettersi allo schema di destinazione e di accedervi.

  • I job di importazione riprendono dal punto di interruzione, ad esempio dopo un evento di manutenzione pianificato o un'interruzione imprevista. L'elaborazione parallela e il curriculum automatico sono supportati per i database di origine Oracle, MySQL, PostgreSQL e Amazon Redshift. Per i database di origine non Oracle, per abilitare l'elaborazione parallela e la ripresa automatica sono necessari i prerequisiti riportati di seguito (a seconda del tipo di database di origine possono essere applicati prerequisiti aggiuntivi):

    • La tabella di origine è sottoposta a partizionamento intervallo.

    • Esistono statistiche dell'istogramma per almeno una colonna numerica.

    • È presente un indice numerico o una chiave primaria.

Se questi prerequisiti non vengono soddisfatti, la tabella viene copiata utilizzando CREATE TABLE AS SELECT (CTAS). In questo caso, l'elaborazione parallela non è supportata e, se il job viene interrotto, viene riavviato dall'inizio della tabella invece di riprendere dal punto di interruzione.

Potrebbero essere necessari prerequisiti aggiuntivi per supportare l'elaborazione parallela e la riavviabilità affidabile, a seconda del tipo di database di origine. Per ulteriori informazioni, vedere:

  • Database di origine PostgreSQL
    • Creare le viste richieste nel database PostgreSQL di origine. Per supportare l'elaborazione parallela e la riavviabilità affidabile durante la migrazione da PostgreSQL, creare le viste necessarie sul database di origine. Se le viste non sono presenti, l'importazione utilizza CREATE TABLE AS SELECT(CTAS), in tale modalità l'elaborazione parallela non è supportata e, se il caricamento di una tabella viene interrotto, viene riavviato dall'inizio. Per ulteriori informazioni, vedere CREATE TABLE AS SELECT.
    • È possibile creare queste viste utilizzando gli script forniti da Oracle disponibili su GitHub. Rivedere ed eseguire gli script nel database PostgreSQL di origine prima di avviare l'importazione.

Per ulteriori informazioni, consulta la documentazione di PostgreSQL 18.3.

  • Database di origine MySQL
    • schema_list non è supportato per le origini MySQL perché MySQL non utilizza schemi. Quando si richiama REATE_IMPORT_TASK, specificare un array vuoto per schema_list ([]).

    • Il valore specificato per service_name viene utilizzato come nome dello schema.

    • Crea le viste richieste nel database MySQL di origine. Per supportare l'elaborazione parallela e la riavviabilità affidabile durante la migrazione da MySQL, crea le viste necessarie sul database di origine. Se le viste non sono presenti, l'importazione utilizza CREATE TABLE AS SELECT (CTAS), in tale modalità l'elaborazione parallela non è supportata e, se il caricamento di una tabella viene interrotto, viene riavviato dall'inizio. Per ulteriori informazioni, vedere CREATE TABLE AS SELECT.

    • È possibile creare queste viste utilizzando gli script forniti da Oracle disponibili in Github. Rivedere ed eseguire gli script nel database MySQL di origine prima di avviare l'importazione.

Per ulteriori informazioni, consulta le riferimenti su MySQL.

  • Database di origine Amazon Redshift
    • Concedere i privilegi per l'accesso al database link. Per leggere i dati dalle tabelle remote, è necessario assicurarsi che l'account utilizzato per creare il database link disponga dei privilegi necessari, ad esempio:

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

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

    • Garantire la visibilità dei metadati per schemi non public. Se lo schema remoto non è public e l'importazione deve eseguire una query sui metadati (ad esempio, tramite pg_table_def), è necessario includere lo schema nel file search_path dell'utente del database link, ad esempio:

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

Per ulteriori informazioni, consulta la documentazione di Amazon Redshift.

Importa dati mediante DBMS_CLOUD_IMPORT

Descrive come importare i dati in Autonomous AI Database utilizzando DBMS_CLOUD_IMPORT.

Per importare i dati in Autonomous AI Database, utilizzare la procedura DBMS_CLOUD_IMPORT.CREATE_IMPORT_TASK. Questa procedura consente di importare i dati da database Oracle e non Oracle supportati specificando i dettagli di connessione richiesti e, facoltativamente, gli oggetti da importare.

È possibile importare un intero database o un subset di dati, ad esempio schemi o tabelle specifici, specificando parametri quali schema_list o table_list. Quando si esegue questa procedura, Oracle Database crea un job di Oracle Scheduler per gestire il task di importazione. Il job utilizza i dettagli e le credenziali di connessione forniti per creare un database link al database di origine e trasferire i dati in Autonomous AI Database.

Il funzionamento dell'importazione dipende dal tipo di database di origine:

  • Importazioni da Oracle a Oracle: viene eseguita la migrazione di entrambi gli oggetti dati e database. Indici, vincoli e partizioni vengono creati automaticamente nell'Autonomous AI Database di destinazione. Se l'importazione viene interrotta (ad esempio, a causa di manutenzione), riprende dal punto di interruzione.
  • Importazioni da database non Oracle: viene eseguita la migrazione solo dei dati. Chiavi, indici, vincoli e altri oggetti dipendenti non vengono creati. Le partizioni vengono create solo se la tabella di origine è partizionata in base all'intervallo. La capacità di ripresa dipende dai prerequisiti; in caso contrario, l'importazione viene riavviata dall'inizio.

Eseguire l'importazione come utente ADMIN. L'Autonomous AI Database di destinazione rimane disponibile durante l'importazione; tuttavia, Oracle consiglia di evitare altre attività nel database di destinazione fino al completamento dell'importazione. Se un job di importazione viene interrotto, ad esempio a causa di una manutenzione pianificata o di un'indisponibilità imprevista, può riprendere dal punto di interruzione o riavvio, a seconda del tipo di database di origine e se i prerequisiti sono soddisfatti. È inoltre possibile utilizzare la sospensione e la ripresa per sospendere temporaneamente e quindi continuare il job.

Crea un task di importazione

Descrive i passi per creare un task di importazione.

Prima di creare e avviare il task di importazione, impostare l'autenticazione sul database di origine. DBMS_CLOUD_IMPORT utilizza un oggetto credenziale per connettersi in modo sicuro all'origine e per creare il database link richiesto per il task.

Per creare un task di importazione, procedere come indicato di seguito.

  1. Creare le credenziali per il database d'origine. Queste credenziali vengono utilizzate per eseguire l'autenticazione e la connessione sicure al sistema di origine. Ad esempio:
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'db1_cred',
        username        => '<username>',
        password        => '<password>'
      );
    END;
    /

    Per ulteriori informazioni, vedere Procedura CREDENTIAL.

  2. Crea un task di importazione:

    Dopo aver creato la credenziale, utilizzare la procedura DBMS_CLOUD_IMPORT.CREATE_IMPORT_TASK per creare e avviare un task di importazione. Questa procedura importa i dati da database Oracle e non Oracle supportati, come MySQL, PostgreSQL e Amazon Redshift.

    Quando si esegue questa procedura, specificare i dettagli e le credenziali di connessione richiesti. È inoltre possibile controllare quali dati vengono importati utilizzando parametri quali schema_list o table_list.

    Oracle Database esegue l'importazione come processo di Oracle Scheduler, che gestisce l'operazione e tiene traccia dell'avanzamento. Il job gestisce lo stato dell'importazione a livello di tabella. Se l'importazione viene interrotta, riprende automaticamente continuando dalle ultime tabelle incomplete, anziché riavviare l'intera operazione.

    Gli esempi riportati di seguito mostrano come creare task di importazione per diversi tipi di database di origine fornendo i dettagli e le credenziali di connessione richiesti.

    Esempio: crea un task di importazione che si connette a un'origine Oracle ed esegue la migrazione solo delle tabelle specificate (ad esempio, ADMIN.TABLE1 e ADMIN.TABLE2) nell'Autonomous AI Database di destinazione.
    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;
    /

    Esempio: crea un task di importazione che si connette al database Oracle di origine utilizzando i dettagli e le credenziali di connessione specificati e esegue la migrazione dell'intero schema ADMIN. Utilizzare schema_list quando si desidera eseguire la migrazione di uno o più schemi, invece di specificare singole tabelle.
    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

    • Per limitare l'ambito dell'importazione:
      • Utilizzare schema_list per importare uno o più schemi.

      • Utilizzare table_list per importare tabelle specifiche in più schemi.

    • Il parametro table_list è supportato solo se il database di origine è Oracle e non è supportato per i database non Oracle.
    • Quando si utilizza table_list:
      • I metadati dello schema per gli schemi associati vengono importati in base alle esigenze.

      • I dati vengono importati solo per le tabelle specificate esplicitamente in table_list.

    • Non specificare oggetti sovrapposti sia in schema_list che in table_list; utilizzare una sola opzione per selezionare uno schema o una tabella specifica.

    Esempio: crea un task di importazione per un'origine MySQL specificando gateway_params con db_type impostato su mysql e identifica cosa eseguire la migrazione utilizzando schema_list (come applicabile per la configurazione del 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;
    /

    Esempio: crea un task di importazione per un'origine PostgreSQL specificando gateway_params con db_type impostato su postgres. Il task si connette a PostgreSQL ed esegue la migrazione dei dati nell'Autonomous AI Database di destinazione in base alla configurazione del task.

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

    In questi esempi, hostname, port e service_name identificano l'endpoint del database di origine e vengono utilizzati dal task per stabilire la connettività, inclusa la creazione del database link richiesto. credential_name esegue l'autenticazione al database di origine in modo che il collegamento possa essere creato. Per le origini Oracle, utilizzare table_list per eseguire la migrazione di tabelle specifiche o schema_list per eseguire la migrazione di uno o più schemi. For non-Oracle databases, gateway_params is also required to specify the source database type (for example, MySQL or PostgreSQL) and enable the appropriate gateway-based connectivity for the import.

Sospendi e riprendi importa

Descrive come sospendere e riprendere un'operazione di importazione.

Se necessario, è possibile sospendere temporaneamente l'importazione utilizzando la procedura SUSPEND_IMPORT_TASK.

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

In questo modo, il job dello scheduler viene arrestato conservando tutti i progressi e i metadati. Per ulteriori informazioni, vedere Procedura SUSPEND_IMPORT_TASK.

Per continuare l'importazione, utilizzare la procedura RESUME_IMPORT_TASK:

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

Il job riprende dall'ultimo checkpoint, salta le tabelle completate e continua il lavoro rimanente.

Nota

Il funzionamento del curriculum dipende dal tipo e dai prerequisiti del database di origine. Quando vengono soddisfatti i prerequisiti per l'elaborazione parallela e il ripristino automatico, l'importazione continua dal punto di interruzione. In caso contrario, l'importazione utilizza CREATE TABLE AS SELECT (CTAS); in questa modalità, l'elaborazione parallela non è supportata e, se il job viene interrotto, viene riavviato dall'inizio della tabella.

Per ulteriori informazioni, vedere Procedura RESUME_IMPORT_TASK.

Monitora avanzamento importazione

Dopo l'avvio di un task di importazione, il job dello scheduler viene eseguito in background e Autonomous AI Database registra l'avanzamento sia a livello di task che di tabella.

È possibile utilizzare le viste del dizionario dati riportate di seguito per monitorare l'avanzamento e lo stato dell'importazione.
  • DBA_DATA_IMPORT_TASK_STATUS: mostra l'avanzamento a livello di task, inclusi lo stato complessivo, la percentuale di completamento e un sintetico dell'attività, ad esempio le tabelle attualmente in corso.
  • DBA_DATA_IMPORT_TABLE_STATUS: mostra l'avanzamento a livello di tabella per ogni tabella importata, inclusi i dettagli sullo stato e sull'errore per le tabelle non riuscite.

Ad esempio, eseguire una query su DBA_DATA_IMPORT_TABLE_STATUS per visualizzare l'avanzamento e gli errori a livello di tabella. La colonna STATUS indica lo stato corrente di ogni tabella, ad esempio SUCCEEDED, FAILED, LOADING o STOPPED.

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

L'output è simile al seguente:

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

Al termine dell'importazione, il job dello scheduler viene disabilitato automaticamente. Per ulteriori informazioni, vedere Monitoraggio e diagnosi dell'importazione eterogenea.

Elimina un task di importazione

Descrive i passi per eliminare un task di importazione.

Una volta completata l'importazione e non più necessaria, è possibile rimuovere il task di importazione. L'eliminazione del task comporta la rimozione del job scheduler, dei database link e dei metadati associati. Non esegue il rollback di oggetti o dati già creati nello schema di destinazione e può lasciare una tabella in corso caricata parzialmente.

Se si esegue di nuovo l'importazione per lo stesso schema, potrebbe essere necessario eseguire manualmente il cleanup delle tabelle caricate parzialmente. Per identificare le tabelle incomplete, eseguire una query sulle viste del dizionario dati, ad esempio DBA_DATA_IMPORT_TABLE_STATUS, ed esaminare lo stato della tabella prima di eseguire il cleanup.

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

In questo esempio viene eliminato il job di importazione ORCL_IMPORT_JOB. Per ulteriori informazioni, vedere Procedura DROP_IMPORT_TASK.

Monitoraggio e diagnosi dell'importazione eterogenea

Per diagnosticare i problemi e monitorare l'avanzamento delle operazioni di importazione dei dati, è possibile eseguire una query sulle viste del dizionario dati riportate di seguito. Queste viste forniscono informazioni dettagliate sullo stato dei task, sull'avanzamento dell'esecuzione, sulle operazioni parallele e sugli oggetti correlati.

Nome vista Descrizione
Vista DBA_DATA_IMPORT_TASK_STATUS Visualizza lo stato di ogni tabella all'interno di un task di importazione, inclusi gli eventuali errori rilevati durante l'elaborazione.
Vista DBA_DATA_IMPORT_TABLE_STATUS Fornisce dettagli generali a livello di task, incluse informazioni sull'avanzamento, ad esempio il numero di tabelle elaborate, caricate e completate correttamente.