Importazione utilizzando Oracle Data Pump - Amazon Relational Database Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Importazione utilizzando Oracle Data Pump

Oracle Data Pump è un'utilità che consente di esportare i dati Oracle in un file di dump e importarli in un altro database Oracle. È un sostituto a lungo termine per le utilità di esportazione/importazione di Oracle e rappresenta lo strumento consigliato per spostare grandi quantità di dati da un'installazione di Oracle a un'istanza database Amazon RDS.

Gli esempi riportati in questa sezione mostrano un modo per importare i dati in un database Oracle, ma Oracle Data Pump supporta anche altre procedure. Per ulteriori informazioni, consulta la documentazione relativa a Oracle Database.

Gli esempi in questa sezione utilizzano il pacchetto DBMS_DATAPUMP. Puoi eseguire le stesse attività utilizzando le utilità della riga di comando di Oracle Data Pump impdp e expdp. È possibile installare queste utilità in un host remoto come parte di un'installazione Oracle Client, incluso Oracle Instant Client. Per ulteriori informazioni, consulta la pagina relativa alla procedura di Oracle Instant Client da usare per eseguire l'importazione o l'esportazione di Data Pump per l'istanza database Amazon RDS per Oracle.

Panoramica su Oracle Data Pump

Oracle Data Pump è composto dai seguenti componenti:

  • Client della riga di comando expdp e impdp

  • Pacchetto PL/SQL DBMS_DATAPUMP

  • Pacchetto PL/SQL DBMS_METADATA

Puoi utilizzare Oracle Data Pump per gli scenari seguenti:

  • Importazione dei dati da un database Oracle (on-premise o in un'istanza Amazon EC2) in un'istanza database Amazon RDS per Oracle.

  • Importazione dei dati da un'istanza database RDS per Oracle in un database Oracle (locale o su un'istanza Amazon EC2).

  • Importazione dei dati tra istanze database RDS per Oracle (ad esempio, per la migrazione dei dati da EC2-Classic a VPC).

Per scaricare le utilità di Oracle Data Pump, consultare Download di software per database Oracle sul sito web di Oracle Technology Network. Per le considerazioni sulla compatibilità durante la migrazione tra versioni di Oracle Database, consulta la documentazione di Oracle Database.

Flusso di lavoro di Oracle Data Pump

In genere, si utilizza Oracle Data Pump nelle seguenti fasi:

  1. Esportazione dei dati in un file di dump nel database di origine.

  2. Caricamento del file di dump nell'istanza database RDS per Oracle di destinazione. Puoi eseguire il trasferimento utilizzando un bucket Amazon S3 o un collegamento di database tra i due database.

  3. Importazione i dati dal file di dump nell'istanza database RDS per Oracle.

Best practice di Oracle Data Pump

Quando si utilizza Oracle Data Pump per importare dati in un'istanza RDS per Oracle, si consiglia di attenersi alle seguenti best practice:

  • Esegui le importazioni in modalità schema o table per importare schemi e oggetti specifici.

  • Limita gli schemi che importi a quelli richiesti dalla tua applicazione.

  • Non eseguire l'importazione in modalità full, né importare schemi per i componenti gestiti dal sistema.

    Perché RDS per Oracle non consente l'accesso a utenti con privilegi di amministratore SYS o SYSDBA, queste azioni potrebbero danneggiare il dizionario dei dati Oracle e pregiudicare la stabilità del database.

  • Quando si caricano grandi quantità di dati, procedere nel seguente modo:

    1. Trasferire il file di dump nell'istanza database RDS per Oracle di destinazione.

    2. Acquisire una snapshot DB dell'istanza.

    3. Verificare che l'importazione ha esito positivo.

    Se i componenti del database sono invalidati, puoi eliminare l'istanza database e ricrearla dallo snapshot del database. L'istanza database ripristinata include i file di dump archiviati sull'istanza database al momento della creazione dello snapshot del database.

  • Non importare file di dump creati utilizzando i parametri di esportazione di Oracle Data Pump TRANSPORT_TABLESPACES, TRANSPORTABLE oppure TRANSPORT_FULL_CHECK. Le istanze database RDS per Oracle non supportano l'importazione di questi file di dump.

  • Non importare file di dump che contengono oggetti Oracle Scheduler in SYS, SYSTEM, RDSADMIN, RDSSEC e RDS_DATAGUARD, e che appartengono alle seguenti categorie:

    • Processi

    • Programmi

    • Piani

    • Chain

    • Regolamento

    • Contesti di valutazione

    • Set di regole

    Le istanze database RDS per Oracle non supportano l'importazione di questi file di dump.

  • Per escludere gli oggetti di Oracle Scheduler non supportati, utilizza direttive aggiuntive durante l'esportazione Data Pump. Se utilizzi DBMS_DATAPUMP, aggiungi un'altra direttiva METADATA_FILTER prima di DBMS_METADATA.START_JOB:

    DBMS_DATAPUMP.METADATA_FILTER( v_hdnl, 'EXCLUDE_NAME_EXPR', q'[IN (SELECT NAME FROM SYS.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) ) ]', 'PROCOBJ' );

    Se utilizzi expdp, crea un file di parametri contenente la direttiva exclude illustrata nell'esempio seguente. Quindi usa PARFILE=parameter_file con il comando expdp.

    exclude=procobj:"IN (SELECT NAME FROM sys.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) )"

Importazione di dati con Oracle Data Pump e un bucket Amazon S3

Il seguente processo di importazione utilizza Oracle Data Pump e un bucket Amazon S3. I passaggi sono i seguenti:

  1. Esporta i dati nel database di origine utilizzando il pacchetto Oracle DBMS_DATAPUMP.

  2. Inserisci il file di dump in un bucket Amazon S3.

  3. Scarica il file di dump dal bucket Amazon S3 nella directory DATA_PUMP_DIR sull'istanza database RDS per Oracle di destinazione.

  4. Importa i dati del file di dump copiato nell'istanza database RDS per Oracle utilizzando il pacchetto DBMS_DATAPUMP.

Requisiti di importazione dei dati con Oracle Data Pump e un bucket Amazon S3

Il processo ha i requisiti seguenti:

  • Assicurati che sia disponibile un bucket Amazon S3 per i trasferimenti di file e che il bucket Amazon S3 sia nella stessa istanza DB. Regione AWS Per istruzioni, consultare Creazione di un bucket nella Guida introduttiva di Amazon Simple Storage Service.

  • L'oggetto caricato nel bucket Amazon S3 deve essere pari o inferiore a 5 TB. Per ulteriori informazioni sull'utilizzo di oggetti nel Amazon S3, consulta Guida per l'utente di Amazon Simple Storage Service.

    Nota

    Se il file di dump supera i 5 TB, è possibile eseguire l'esportazione Oracle Data Pump con l'opzione parallela. Questa operazione diffonde i dati in più file di dump in modo da non superare il limite di 5 TB per i singoli file.

  • È necessario preparare il bucket Amazon S3 per l'integrazione con Amazon RDS seguendo le istruzioni in Configurazione delle autorizzazioni IAM per l'integrazione di RDS per Oracle con Amazon S3.

  • È necessario disporre di spazio di storage sufficiente per archiviare il file dump nell'istanza di origine e nell'istanza database di destinazione.

Nota

Questo processo importa un file dump nella directory DATA_PUMP_DIR, una directory preconfigurata in tutte le istanze database Oracle. La directory si trova nello stesso volume di storage dei file di dati. Quando importi il file di dump, i file di dati di Oracle esistenti occupano più spazio. Pertanto, devi assicurarti che l'istanza database possa accomodare tale utilizzo dello spazio aggiuntivo. Il file dump importato non viene eliminato o ripulito automaticamente dalla directory DATA_PUMP_DIR. Per rimuovere il file di dump importato, utilizzare UTL_FILE.FREMOVE, disponibile sul sito web di Oracle.

Fase 1: concessione dei privilegi all'utente del database sull'istanza database RDS per Oracle

In questa fase, si creano gli schemi in cui si intende importare i dati e si concedono agli utenti i privilegi necessari.

Per creare utenti e concedere i privilegi necessari sull'istanza RDS per Oracle di destinazione
  1. Utilizza SQL*Plus o Oracle SQL Developer per la connessione come utente master all'istanza database RDS per Oracle in cui verranno importati i dati. Per informazioni sulla connessione a un'istanza database, consulta Connessione all'istanza database RDS per Oracle.

  2. Prima di importare i dati, crea gli spazi di tabella necessari. Per ulteriori informazioni, consulta Creazione e dimensionamento di spazi tabelle.

  3. Se l'account utente in cui vengono importati i dati non esiste, crealo e concedigli le autorizzazioni e i ruoli necessari. Se intendi importare i dati su più schemi utente, crea tutti gli account utente e concedi loro i privilegi e i ruoli necessari.

    Ad esempio, le istruzioni SQL seguenti permettono di creare un nuovo utente e concedergli le autorizzazioni e i ruoli necessari per importare i dati nel suo schema. In questo passaggio e in quelli successivi, sostituisci schema_1 con il nome del tuo schema.

    CREATE USER schema_1 IDENTIFIED BY my_password; GRANT CREATE SESSION, RESOURCE TO schema_1; ALTER USER schema_1 QUOTA 100M ON users;
    Nota

    Specifica una password diversa dal prompt mostrato qui come best practice per la sicurezza.

    Le istruzioni precedenti concedono al nuovo utente il privilegio CREATE SESSION e il ruolo RESOURCE. Potrebbero essere necessari privilegi e ruoli aggiuntivi, a seconda degli oggetti del database da importare.

Fase 2: esportazione dei dati in un file di dump utilizzando DBMS_DATAPUMP

Per creare un file di dump, utilizza il pacchetto DBMS_DATAPUMP.

Per esportare i dati Oracle in un file di dump
  1. Utilizza SQL Plus o Oracle SQL Developer per connetterti all'istanza database RDS per Oracle di origine come utente amministratore. Se il database di origine è un'istanza database RDS per Oracle, esegui la connessione con l'utente master Amazon RDS.

  2. Esporta i dati richiamando le procedure DBMS_DATAPUMP.

    Il seguente script esporta lo schema SCHEMA_1 in un file di dump denominato sample.dmpnella directory DATA_PUMP_DIR. Sostituisci SCHEMA_1 con il nome dello schema che si desidera esportare.

    DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'EXPORT', job_mode => 'SCHEMA', job_name => null ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl , filename => 'sample.dmp' , directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_exp.log', directory => 'DATA_PUMP_DIR' , filetype => dbms_datapump.ku$_file_type_log_file ); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''SCHEMA_1'')'); DBMS_DATAPUMP.METADATA_FILTER( v_hdnl, 'EXCLUDE_NAME_EXPR', q'[IN (SELECT NAME FROM SYS.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) ) ]', 'PROCOBJ' ); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
    Nota

    Data Pump avvia i processi in modo asincrono. Per informazioni sul monitoraggio di un processo di Data Pump, consulta la pagina relativa al monitoraggio dello stato dei processi nella documentazione di Oracle.

  3. (Facoltativo) Visualizza il contenuto del log di esportazione utilizzando la procedura rdsadmin.rds_file_util.read_text_file. Per ulteriori informazioni, consulta Lettura dei file in una directory di istanze database.

Passaggio 3: Caricamento del file di dump sul bucket Amazon S3

Utilizzare la procedura rdsadmin.rdsadmin_s3_tasks.upload_to_s3 di Amazon RDS per copiare il file dump sul bucket Amazon S3. L'esempio seguente carica tutti i file dalla directory DATA_PUMP_DIR su un bucket Amazon S3 denominato DOC-EXAMPLE-BUCKET.

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'DOC-EXAMPLE-BUCKET', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

L'istruzione SELECT restituisce l'ID dell'attività in un tipo di dati VARCHAR2. Per ulteriori informazioni, consulta Caricamento di file da un'istanza database Oracle a un bucket Amazon S3.

Fase 4: scaricamento del file di dump dal bucket Amazon S3 all'istanza database di destinazione

Esegui questo passaggio utilizzando la procedura Amazon RDS rdsadmin.rdsadmin_s3_tasks.download_from_s3. Quando si scarica un file in una directory, la procedura download_from_s3 salta il processo di scaricamento se nella directory esiste già un file con lo stesso nome. Per rimuovere il file di dump importato, utilizza UTL_FILE.FREMOVE, disponibile sul sito Web di Oracle.

Per scaricare il file di dump
  1. Avvia SQL*Plus o Oracle SQL Developer e accedi come utente principale nell'istanza database Amazon RDS per Oracle di destinazione.

  2. Scarica il file di dump utilizzando la procedura Amazon RDS rdsadmin.rdsadmin_s3_tasks.download_from_s3.

    L'esempio seguente illustra come scaricare tutti i file da un bucket Amazon S3 denominato DOC-EXAMPLE-BUCKET nella directory DATA_PUMP_DIR.

    SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'DOC-EXAMPLE-BUCKET', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

    L'istruzione SELECT restituisce l'ID dell'attività in un tipo di dati VARCHAR2. Per ulteriori informazioni, consulta Download di file da un bucket Amazon S3 a un'istanza database Oracle.

Fase 5: importazione del file di dump nell'istanza DB di destinazione utilizzando DBMS_DATAPUMP

Usa DBMS_DATAPUMP per importare lo schema nell'istanza database RDS per Oracle. Potrebbero essere necessarie opzioni aggiuntive, come METADATA_REMAP.

Per importare dati nell'istanza database di destinazione
  1. Avvia SQL*Plus o SQL Developer e accedi come utente master all'istanza database RDS per Oracle.

  2. Importa i dati chiamando le procedure. DBMS_DATAPUMP

    L'esempio seguente importa i dati SCHEMA_1 da sample_copied.dmp nell'istanza database di destinazione.

    DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'SCHEMA', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_copied.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_imp.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''SCHEMA_1'')'); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
    Nota

    I processi di Data Pump vengono avviati in modo asincrono. Per informazioni sul monitoraggio di un processo di Data Pump, consulta la pagina relativa al monitoraggio dello stato dei processi nella documentazione di Oracle. È possibile visualizzare il contenuto del log di importazione utilizzando la procedura rdsadmin.rds_file_util.read_text_file. Per ulteriori informazioni, consulta Lettura dei file in una directory di istanze database.

  3. Verifica l'importazione dei dati elencando le tabelle dello schema nell'istanza database di destinazione.

    Ad esempio, la query seguente restituisce il numero di tabelle per SCHEMA_1.

    SELECT COUNT(*) FROM DBA_TABLES WHERE OWNER='SCHEMA_1';

Fase 6: eseguire la pulizia

Dopo che i dati sono stati importati, puoi eliminare i file che non intendi conservare.

Per rimuovere i file non necessari
  1. Avvia SQL*Plus o SQL Developer e accedi come utente master all'istanza database RDS per Oracle.

  2. Elenca i file contenuti in DATA_PUMP_DIR utilizzando il seguente comando.

    SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir('DATA_PUMP_DIR')) ORDER BY MTIME;
  3. Elimina i file non più necessari da DATA_PUMP_DIR utilizzando il seguente comando.

    EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','filename');

    Ad esempio, il comando seguente elimina il file denominato sample_copied.dmp.

    EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','sample_copied.dmp');

I processi di importazione seguenti utilizzano Oracle Data Pump e il pacchetto Oracle DBMS_FILE_TRANSFER. I passaggi sono i seguenti:

  1. Stabilisci una connessione a un database Oracle di origine che può essere on-premise, un'istanza Amazon EC2 o un'istanza database RDS per Oracle.

  2. Esporta i dati utilizzando il pacchetto DBMS_DATAPUMP.

  3. Utilizza DBMS_FILE_TRANSFER.PUT_FILE per copiare il file di dump dal database Oracle alla directory DATA_PUMP_DIR sull'istanza database RDS per Oracle di destinazione connessa tramite un collegamento di database.

  4. Importa i dati del file di dump copiato nell'istanza database RDS per Oracle utilizzando il pacchetto DBMS_DATAPUMP.

Il processo di importazione che utilizza Oracle Data Pump e il pacchetto DBMS_FILE_TRANSFER è costituito dalle seguenti fasi.

Requisiti di importazione dei dati con Oracle Data Pump e un collegamento di database

Il processo ha i requisiti seguenti:

  • Sono necessari i privilegi di esecuzione per i pacchetti DBMS_FILE_TRANSFER e DBMS_DATAPUMP.

  • Sono necessari i privilegi di scrittura nella directory DATA_PUMP_DIR nell'istanza database di origine.

  • È necessario disporre di spazio di storage sufficiente per archiviare il file dump nell'istanza di origine e nell'istanza database di destinazione.

Nota

Questo processo importa un file dump nella directory DATA_PUMP_DIR, una directory preconfigurata in tutte le istanze database Oracle. La directory si trova nello stesso volume di storage dei file di dati. Quando importi il file di dump, i file di dati di Oracle esistenti occupano più spazio. Pertanto, devi assicurarti che l'istanza database possa accomodare tale utilizzo dello spazio aggiuntivo. Il file dump importato non viene eliminato o ripulito automaticamente dalla directory DATA_PUMP_DIR. Per rimuovere il file di dump importato, utilizzare UTL_FILE.FREMOVE, disponibile sul sito web di Oracle.

Fase 1: concessione dei privilegi all'utente sull'istanza database RDS per Oracle di destinazione

Per concedere i privilegi all'utente sull'istanza database RDS per Oracle di destinazione, esegui i seguenti passaggi:

  1. Utilizza SQL Plus o Oracle SQL Developer per la connessione all'istanza database RDS per Oracle di destinazione in cui verranno importati i dati. Esegui la connessione come utente master Amazon RDS. Per informazioni sulla connessione all'istanza database, consulta Connessione all'istanza database RDS per Oracle.

  2. Prima di importare i dati, crea gli spazi di tabella necessari. Per ulteriori informazioni, consulta Creazione e dimensionamento di spazi tabelle.

  3. Se l'account utente in cui vengono importati i dati non esiste, crealo e concedigli le autorizzazioni e i ruoli necessari. Se intendi importare i dati su più schemi utente, crea tutti gli account utente e concedi loro i privilegi e i ruoli necessari.

    Ad esempio, i comandi seguenti permettono di creare un nuovo utente denominato schema_1 e di concedergli le autorizzazioni e i ruoli necessari per importare i dati nel relativo schema.

    CREATE USER schema_1 IDENTIFIED BY my-password; GRANT CREATE SESSION, RESOURCE TO schema_1; ALTER USER schema_1 QUOTA 100M ON users;
    Nota

    Specifica una password diversa dal prompt mostrato qui come best practice per la sicurezza.

    L'esempio precedente concede al nuovo utente il privilegio CREATE SESSION e il ruolo RESOURCE. Potrebbero essere necessari privilegi e ruoli aggiuntivi, a seconda degli oggetti del database da importare.

    Nota

    In questo passaggio e in quelli successivi, sostituisci schema_1 con il nome del tuo schema.

Passaggio 2: Concessione dei privilegi all'utente nel database di origine

Utilizza SQL*Plus o Oracle SQL Developer per la connessione all'istanza database RDS per Oracle contenente i dati da importare. Se necessario, crea un account utente e concedi le autorizzazioni necessarie.

Nota

Se il database di origine è un'istanza Amazon RDS, puoi ignorare questa fase. Per eseguire l'esportazione, utilizzi l'account utente master Amazon RDS.

I comandi seguenti creano un nuovo utente e gli concedono le autorizzazioni necessarie.

CREATE USER export_user IDENTIFIED BY my-password; GRANT CREATE SESSION, CREATE TABLE, CREATE DATABASE LINK TO export_user; ALTER USER export_user QUOTA 100M ON users; GRANT READ, WRITE ON DIRECTORY data_pump_dir TO export_user; GRANT SELECT_CATALOG_ROLE TO export_user; GRANT EXECUTE ON DBMS_DATAPUMP TO export_user; GRANT EXECUTE ON DBMS_FILE_TRANSFER TO export_user;
Nota

Specifica una password diversa dal prompt mostrato qui come best practice per la sicurezza.

Fase 3: creazione di un file di dump mediante DBMS_DATAPUM

Per creare il file batch, procedi come segue:

  1. Utilizza SQL*Plus o Oracle SQL Developer per la connessione all'istanza Oracle di origine come utente amministratore o come l'utente creato nel passaggio 2. Se il database di origine è un'istanza database Amazon RDS for Oracle, esegui la connessione con l'utente master Amazon RDS.

  2. Crea un file di dump utilizzando l'utilità Oracle Data Pump.

    Lo script seguente crea un file dump denominato sample.dmp nella directory DATA_PUMP_DIR.

    DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'EXPORT' , job_mode => 'SCHEMA' , job_name => null ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample.dmp' , directory => 'DATA_PUMP_DIR' , filetype => dbms_datapump.ku$_file_type_dump_file ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl , filename => 'sample_exp.log' , directory => 'DATA_PUMP_DIR' , filetype => dbms_datapump.ku$_file_type_log_file ); DBMS_DATAPUMP.METADATA_FILTER( v_hdnl , 'SCHEMA_EXPR' , 'IN (''SCHEMA_1'')' ); DBMS_DATAPUMP.METADATA_FILTER( v_hdnl, 'EXCLUDE_NAME_EXPR', q'[IN (SELECT NAME FROM sys.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) ) ]', 'PROCOBJ' ); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
    Nota

    I processi di Data Pump vengono avviati in modo asincrono. Per informazioni sul monitoraggio di un processo di Data Pump, consulta la pagina relativa al monitoraggio dello stato dei processi nella documentazione di Oracle. È possibile visualizzare il contenuto del log di esportazione utilizzando la procedura rdsadmin.rds_file_util.read_text_file. Per ulteriori informazioni, consulta Lettura dei file in una directory di istanze database.

Fase 4: Creazione di un collegamento di database all'istanza database di destinazione

Crea un collegamento di database tra le istanze database di origine e destinazione. Tieni presente che, per creare un collegamento di database e trasferire il file dump esportato, l'istanza Oracle locale deve disporre di connettività di rete verso l'istanza database di destinazione.

Esegui questa fase connettendoti con lo stesso account utente utilizzato nella fase precedente.

Se crei un collegamento di database tra due istanze database nello stesso VPC o in VPC in peering, le due istanze database devono avere un instradamento valido tra loro. Il gruppo di sicurezza di ogni istanza database deve permettere l'ingresso e l'uscita dall'altra istanza database. Le regole per il traffico in entrata e in uscita del gruppo di sicurezza possono fare riferimento a gruppi di sicurezza dello stesso VPC o di un VPC in peering. Per ulteriori informazioni, consulta Modifica dei collegamenti di database per l'utilizzo con le istanze database in un VPC.

Il comando seguente crea un collegamento di database denominato to_rds che si connette all'utente master Amazon RDS sull'istanza database di destinazione:

CREATE DATABASE LINK to_rds CONNECT TO <master_user_account> IDENTIFIED BY <password> USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<dns or ip address of remote db>) (PORT=<listener port>))(CONNECT_DATA=(SID=<remote SID>)))';

Fase 5: copia del file di dump esportato nell'istanza database di destinazione mediante DBMS_FILE_TRANSFER

Utilizza DBMS_FILE_TRANSFER per copiare il file dump dall'istanza database di origine all'istanza database di destinazione. Il seguente script copia un file di dump denominato sample.dmp dall'istanza di origine su un collegamento di database di destinazione denominato to_rds (creato nel passaggio precedente).

BEGIN DBMS_FILE_TRANSFER.PUT_FILE( source_directory_object => 'DATA_PUMP_DIR', source_file_name => 'sample.dmp', destination_directory_object => 'DATA_PUMP_DIR', destination_file_name => 'sample_copied.dmp', destination_database => 'to_rds' ); END; /

Fase 6: importazione del file di dati nell'istanza database di destinazione mediante DBMS_DATAPUMP

Utilizza Oracle Data Pump per importare lo schema nell'istanza database. Potrebbero essere necessarie opzioni aggiuntive, come METADATA_REMAP.

Stabilisci la connessione all'istanza database con l'account utente master Amazon RDS per eseguire l'importazione.

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'SCHEMA', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_copied.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_imp.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''SCHEMA_1'')'); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
Nota

I processi di Data Pump vengono avviati in modo asincrono. Per informazioni sul monitoraggio di un processo di Data Pump, consulta la pagina relativa al monitoraggio dello stato dei processi nella documentazione di Oracle. È possibile visualizzare il contenuto del log di importazione utilizzando la procedura rdsadmin.rds_file_util.read_text_file. Per ulteriori informazioni, consulta Lettura dei file in una directory di istanze database.

Puoi verificare l'importazione dei dati visualizzando le tabelle dell'utente nell'istanza database. Ad esempio, la query seguente restituisce il numero di tabelle per schema_1.

SELECT COUNT(*) FROM DBA_TABLES WHERE OWNER='SCHEMA_1';

Fase 7: pulizia

Dopo che i dati sono stati importati, puoi eliminare i file che non intendi conservare. Puoi elencare i file contenuti in DATA_PUMP_DIR utilizzando il seguente comando.

SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir('DATA_PUMP_DIR')) ORDER BY MTIME;

Per eliminare i file non più necessari da DATA_PUMP_DIR, utilizza il seguente comando.

EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','<file name>');

Ad esempio, il comando seguente elimina il file denominato "sample_copied.dmp".

EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','sample_copied.dmp');