Operazioni di massa per i file nel cloud

Il package PL/SQL DBMS_CLOUD offre il supporto dell'esecuzione parallela per le attività di caricamento, download, copia e trasferimento di file in blocco, semplificando l'esperienza utente e offrendo prestazioni ottimali per le operazioni dei file in blocco.

Il pacchetto DBMS_CLOUD supporta il caricamento e lo scaricamento di file nei seguenti servizi cloud:

  • Oracle Cloud Infrastructure Object Storage

  • Azure Blob Storage o Azure Data Lake Storage

  • Amazon S3

  • Compatibile con Amazon S3, incluso lo storage cloud a caldo Wasabi

  • Google Cloud Storage

Per ulteriori informazioni, vedere DBMS_CLOUD Formati URI file pacchetto.

Informazioni sulle operazioni file di massa

Le operazioni sui file in blocco DBMS_CLOUD supportano il download e il caricamento di file su Autonomous Database, incluso il supporto per la copia, lo spostamento e l'eliminazione di file nelle aree di memorizzazione degli oggetti cloud, all'interno dello stesso provider dell'area di memorizzazione degli oggetti o tra i provider dell'area di memorizzazione degli oggetti.

Le operazioni dei file in blocco supportano il parallelismo e forniscono prestazioni ottimali per il caricamento, il download, la copia e lo spostamento dei file. Il parallelismo per le operazioni dei file in blocco viene gestito specificando una priorità per un'operazione. Le priorità supportate sono le seguenti:

  • HIGH: utilizzare il conteggio di calcolo della CPU dell'istanza di Autonomous Database per determinare il numero di file paralleli elaborati.
  • MEDIUM: utilizzare il limite di concorrenza per il servizio Medio per determinare il parallelismo.
  • LOW: elabora i file in ordine seriale (nessuna concorrenza).

L'esecuzione di operazioni in blocco con una priorità più elevata utilizza un maggior numero di risorse di database e operazioni completate più velocemente quando il parallelismo può accelerare l'operazione. Una priorità inferiore consuma meno risorse del database e il completamento delle operazioni richiede più tempo quando il parallelismo può accelerare l'operazione. Quando le operazioni in blocco coinvolgono un numero limitato di file che contengono pochi dati, la specifica di una priorità più elevata potrebbe non modificare le prestazioni.

Per aumentare il parallelismo per le operazioni dei file in blocco, utilizzare la priorità HIGH e aumentare il numero di CPU assegnate all'istanza di Autonomous Database. Il numero massimo di operazioni file concorrenti supportate è limitato a 64 per le operazioni file bulk.

La priorità predefinita è MEDIUM, che specifica che le operazioni dei file in blocco utilizzano il limite di concorrenza definito per il gruppo di consumer MEDIUM. Per ulteriori informazioni, vedere Gestione di concorrenza e priorità in Autonomous Database.

Per informazioni dettagliate sull'utilizzo del parametro format per specificare priority con operazioni file bulk, vedere DBMS_CLOUD per la gestione dei file in blocco.

Copia di massa dei file nello storage degli oggetti cloud

Utilizzare la procedura DBMS_CLOUD.BULK_COPY per copiare in blocco i file da un bucket o una cartella dell'area di memorizzazione degli oggetti in un altro bucket o cartella.

  1. Creare un oggetto credenziale per accedere alla posizione di origine.

    Il nome della credenziale di origine, specificato con il parametro source_credential_name, viene utilizzato per impostazione predefinita anche come credenziale per la posizione di destinazione.

    Per ulteriori informazioni, vedere CREATE_CREDENTIAL Procedura.

  2. Quando l'origine e la destinazione si trovano in aree di memorizzazione oggetti distinte o hanno account diversi con lo stesso provider cloud, creare una credenziale per accedere alla posizione di destinazione e includere il parametro target_credential_name.
  3. Eseguire la procedura DBMS_CLOUD.BULK_COPY per copiare i file in parallelo da un bucket o una cartella dell'area di memorizzazione degli oggetti a un altro bucket o cartella che può trovarsi tra provider cloud, account e bucket. Per eseguire la procedura, è necessario aver eseguito il login come utente ADMIN o disporre del privilegio EXECUTE su DBMS_CLOUD.
    BEGIN 
    DBMS_CLOUD.BULK_COPY (
          source_credential_name => 'OCI_CRED',
          source_location_uri    => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname1/o',
          target_location_uri    => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname2/o',
          format                 => JSON_OBJECT ('logretention' value 7, 'logprefix' value 'BULKOP')
    );
    END;
    /

    Questo esempio copia in blocco i file da un bucket di Oracle Cloud Infrastructure Object Storage a un altro.

    Per ulteriori informazioni, vedere BULK_COPY Procedura.

    Vedere DBMS_CLOUD Formati URI per ulteriori informazioni.

Ad esempio, utilizza DBMS_CLOUD.BULK_COPY per copiare i file da Amazon S3 a Oracle Cloud Infrastructure Object Storage.

BEGIN
DBMS_CLOUD.BULK_COPY(      
      source_credential_name  => 'AWS_CRED',
      source_location_uri     => 'https://bucketname.s3-us-west-2.amazonaws.com/',
      target_credential_name  => 'OCI_CRED',
      target_location_uri     => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname2/o',
      format                  =>  JSON_OBJECT ('logretention' value 7, 'logprefix' value 'BULKOP')
);
END;
/

Spostamento di massa dei file nello storage degli oggetti cloud

Utilizzare la procedura DBMS_CLOUD.BULK_MOVE per eseguire lo spostamento in blocco dei file da una posizione di storage degli oggetti cloud a un'altra.

Il primo passo per spostare i file è copiarli nella posizione di destinazione. Una volta copiati correttamente, i file vengono eliminati dalla posizione di origine.

I file vengono rinominati anziché copiati se Object Store consente di rinominare le operazioni tra le posizioni di origine e di destinazione.

  1. Creare un oggetto credenziale per accedere alla posizione di origine.

    Il nome della credenziale di origine, specificato con il parametro source_credential_name, viene utilizzato per impostazione predefinita anche come credenziale per la posizione di destinazione.

    Per ulteriori informazioni, vedere CREATE_CREDENTIAL Procedura.

  2. Quando l'origine e la destinazione si trovano in aree di memorizzazione oggetti distinte o hanno account diversi con lo stesso provider cloud, creare una credenziale per accedere alla posizione di destinazione e includere il parametro target_credential_name.
  3. Eseguire la procedura DBMS_CLOUD.BULK_MOVE per spostare in blocco i file da una posizione di storage degli oggetti cloud a un'altra. Per eseguire la procedura, è necessario aver eseguito il login come utente ADMIN o disporre del privilegio EXECUTE su DBMS_CLOUD.
    BEGIN 
    DBMS_CLOUD.BULK_MOVE (    
         source_credential_name => 'OCI_CRED',
         source_location_uri    => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname1/o',
         target_location_uri    => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname2/o',
         format                 => JSON_OBJECT ('logretention' value 7, 'logprefix' value 'BULKMOVE')
    );
    END;
    /

    Questo esempio sposta in blocco i file da una posizione di Oracle Cloud Infrastructure Object Storage a un'altra.

    Per ulteriori informazioni, vedere BULK_MOVE Procedura.

    Vedere DBMS_CLOUD Formati URI per ulteriori informazioni.

Ad esempio, utilizza DBMS_CLOUD.BULK_MOVE per spostare i file da Amazon S3 a Oracle Cloud Infrastructure Object Storage.

BEGIN
DBMS_CLOUD.BULK_MOVE(      
      source_credential_name  => 'AWS_CRED',
      source_location_uri     => 'https://bucketname.s3-us-west-2.amazonaws.com/',
      target_credential_name  => 'OCI_CRED',
      target_location_uri     => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname2/o',
      format                  =>  JSON_OBJECT ('logretention' value 7, 'logprefix' value 'BULKOP')
);
END;
/

Scaricamento di massa dei file dallo storage degli oggetti cloud

Utilizzare la procedura DBMS_CLOUD.BULK_DOWNLOAD per eseguire il download in blocco dei file dalla posizione dell'area di memorizzazione degli oggetti cloud all'oggetto directory in un Autonomous Database.

  1. Creare una credenziale per accedere allo storage degli oggetti cloud.

    Il nome della credenziale viene specificato con il parametro credential_name.

    Per ulteriori informazioni, vedere CREATE_CREDENTIAL Procedura.

  2. Eseguire la procedura DBMS_CLOUD.BULK_DOWNLOAD per scaricare i file in una directory di Autonomous Database dallo storage degli oggetti cloud. Per eseguire la procedura, è necessario aver eseguito il login come utente ADMIN o disporre del privilegio EXECUTE su DBMS_CLOUD.
    BEGIN
    DBMS_CLOUD.BULK_DOWNLOAD (
         credential_name => 'OCI_CRED',
         location_uri    => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o',
         directory_name  => 'BULK_TEST',
         format          => JSON_OBJECT ('logretention' value 7, 'logprefix' value 'BULKOP')
     );
    END;
    /

    In questo esempio i file vengono scaricati in blocco dall'URI della posizione dell'area di memorizzazione degli oggetti Oracle Cloud Infrastructure all'oggetto directory in un Autonomous Database.

    Nota

    Per scrivere i file nell'oggetto directory di destinazione, è necessario disporre del privilegio WRITE sull'oggetto directory.

    Per ulteriori informazioni, vedere BULK_DOWNLOAD Procedura.

    Vedere DBMS_CLOUD Formati URI per ulteriori informazioni.

Caricamento di massa dei file nello storage degli oggetti cloud

Utilizzare la procedura DBMS_CLOUD.BULK_UPLOAD per caricare in blocco i file da un oggetto directory nel database in una posizione dell'area di memorizzazione degli oggetti cloud.

  1. Creare una credenziale per accedere allo storage degli oggetti cloud.

    Il nome della credenziale viene specificato con il parametro credential_name.

    Per ulteriori informazioni, vedere CREATE_CREDENTIAL Procedura.

  2. Eseguire la procedura DBMS_CLOUD.BULK_UPLOAD per copiare i file nello storage degli oggetti cloud da una directory di database nell'istanza di Autonomous Database. Per eseguire la procedura, è necessario aver eseguito il login come utente ADMIN o disporre del privilegio EXECUTE su DBMS_CLOUD.
    BEGIN
    DBMS_CLOUD.BULK_UPLOAD (    
         credential_name => 'OCI_CRED',
         location_uri    => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o',
         directory_name  => 'BULK_TEST',
         format          => JSON_OBJECT ('logretention' value 5, 'logprefix' value 'BULKUPLOAD')
     );
    END;
    /

    In questo esempio i file vengono caricati in blocco da un oggetto directory, come specificato con il parametro directory_name nell'URI della posizione dell'area di memorizzazione degli oggetti di Oracle Cloud Infrastructure.

    Nota

    Per leggere i file di origine nell'oggetto directory, è necessario disporre del privilegio READ sull'oggetto directory.

    Per ulteriori informazioni, vedere BULK_UPLOAD Procedura.

Elimina file in blocco da storage degli oggetti cloud

Utilizzare la procedura DBMS_CLOUD.BULK_DELETE per eliminare in blocco i file dallo storage degli oggetti cloud.

  1. Creare una credenziale per accedere allo storage degli oggetti cloud.

    Il nome della credenziale viene specificato con il parametro credential_name.

    credential_name può essere NULL per l'URI del bucket pubblico, preautenticato o prefirmato.

    Per ulteriori informazioni, vedere CREATE_CREDENTIAL Procedura.

  2. Eseguire la procedura DBMS_CLOUD.BULK_DELETE per eliminare i file dall'area di memorizzazione degli oggetti cloud. Per eseguire la procedura, è necessario aver eseguito il login come utente ADMIN o disporre del privilegio EXECUTE su DBMS_CLOUD.
    BEGIN
    DBMS_CLOUD.BULK_DELETE (    
         credential_name => 'OCI_CRED',
         location_uri    => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o',
         format          => JSON_OBJECT ('logretention' value 5, 'logprefix' value 'BULKDEL')
    );
    END;
    /

    In questo esempio i file vengono eliminati in blocco dall'area di memorizzazione degli oggetti di Oracle Cloud Infrastructure.

    Per ulteriori informazioni, vedere BULK_DELETE Procedura.

    Vedere DBMS_CLOUD Formati URI per ulteriori informazioni.

Monitoraggio e risoluzione dei problemi relativi ai caricamenti di file in blocco

Tutte le operazioni di caricamento dati DBMS_CLOUD vengono registrate nelle viste dba_load_operations e user_load_operations.

È possibile utilizzare le viste riportate di seguito per monitorare e risolvere i problemi relativi ai caricamenti di file in blocco.

  • dba_load_operations: mostra tutte le operazioni di caricamento.

  • user_load_operations: mostra le operazioni di caricamento nello schema.

Eseguire una query su queste viste per visualizzare informazioni sulle operazioni dei file in blocco in corso e completate. Ad esempio, l'istruzione SELECT seguente con un predicato di clausola WHERE in TYPE mostra le operazioni DOWNLOAD:


SELECT owner_name, type, status, start_time, update_time, status_table, rows_loaded 
   FROM user_load_operations WHERE type = 'DOWNLOAD';

OWNER_NAME TYPE     STATUS    START_TIME               UPDATE_TIME              STATUS_TABLE ROWS_LOADED 
---------- -------- --------- ------------------------ ------------------------ ------------ ----------- 
"ADMIN"    DOWNLOAD COMPLETED 2022-10-17T20:42:19.498Z 2022-10-17T20:42:21.054Z DWN$2_STATUS           4 
"ADMIN"    DOWNLOAD FAILED    2022-10-17T20:40:54.348Z 2022-10-17T20:40:55.679Z DWN$1_STATUS             

La colonna STATUS_TABLE mostra il nome della tabella su cui è possibile eseguire una query per esaminare le informazioni di log dettagliate per l'operazione di scaricamento di massa. Ad esempio:

DESCRIBE DWN$2_STATUS
Name          Null?    Type                        
------------- -------- --------------------------- 
ID            NOT NULL NUMBER                      
NAME                   VARCHAR2(4000)              
BYTES                  NUMBER                      
CHECKSUM               VARCHAR2(128)               
LAST_MODIFIED          TIMESTAMP(6) WITH TIME ZONE 
STATUS                 VARCHAR2(30)                
ERROR_CODE             NUMBER                      
ERROR_MESSAGE          VARCHAR2(4000)              
START_TIME             TIMESTAMP(6) WITH TIME ZONE 
END_TIME               TIMESTAMP(6) WITH TIME ZONE 
SID                    NUMBER                      
SERIAL#                NUMBER                      
ROWS_LOADED            NUMBER                      

SELECT id, name, bytes, status, error_message, start_time, end_time FROM DWN$2_STATUS;
ID NAME       BYTES STATUS    ERROR_MESSAGE START_TIME               END_TIME                 
-- ---------- ----- --------- ------------- ------------------------ ------------------------ 
 1 trees.txt     58 COMPLETED               2022-10-17T20:42:19.998Z 2022-10-17T20:42:20.421Z 
 2 trees1.txt    58 COMPLETED               2022-10-17T20:42:20.425Z 2022-10-17T20:42:20.533Z 
 3 trees2.txt    58 COMPLETED               2022-10-17T20:42:20.535Z 2022-10-17T20:42:20.894Z 
 4 trees3.txt    58 COMPLETED               2022-10-17T20:42:20.896Z 2022-10-17T20:42:21.043Z

La tabella di stato mostra ogni nome di file e il relativo stato per l'operazione in blocco.

Il numero e il messaggio di errore rilevanti vengono registrati nella tabella di stato se un'operazione su un file specifico non riesce.

Per le operazioni completate, il tempo necessario per ciascuna operazione può essere calcolato utilizzando l'ora riportata START_TIME e END_TIME.

La colonna STATUS dell'operazione file può avere uno dei seguenti valori:

Stato file descrizione;

COMPLETED

Operazione file completata.

FAILED

Operazione file non riuscita. È possibile riprovare due volte.

PENDING

L'operazione sul file non è stata ancora avviata.

RUNNING

L'operazione sul file è attualmente in corso.

SKIPPED

L'operazione sul file è stata ignorata.

Se un'operazione di file non riesce dopo due nuovi tentativi, l'operazione in blocco viene contrassegnata come non riuscita e viene generato un errore. Ad esempio:

ORA-20003: Operation failed, please query table DOWNLOAD$2_STATUS for error details

Quando si utilizza un'operazione file bulk DBMS_CLOUD, sono disponibili opzioni di parametro format che controllano le tabelle di stato:

  • logretention: specifica un valore intero che determina la durata in giorni della conservazione della tabella di stato. Il valore predefinito è 2 giorni.

  • logprefix: specifica un valore stringa che determina il prefisso del nome della tabella dello stato dell'operazione in blocco.

    Ogni operazione in blocco ha il proprio valore predefinito per l'opzione logprefix:

    Procedura Valore predefinito per logprefix
    DBMS_CLOUD.BULK_COPY COPYOBJ
    DBMS_CLOUD.BULK_DELETE DELETE
    DBMS_CLOUD.BULK_DOWNLOAD DOWNLOAD
    DBMS_CLOUD.BULK_MOVE MOVE
    DBMS_CLOUD.BULK_UPLOAD UPLOAD

Per informazioni sulla cancellazione della tabella user_load_operations, vedere DELETE_ALL_OPERATIONS Procedura.

Note per operazioni file di massa

Fornisce note per le credenziali utilizzate con le operazioni dei file in blocco.

  • È possibile specificare i principal come parametro credential_name, source_credential_name o target_credential_name per accedere in modo sicuro alle risorse cloud senza memorizzare le credenziali utente. I principal supportati sono i seguenti:

    • Principi delle risorse di Oracle Cloud Infrastructure
    • Nomi delle risorse AWS Amazon (ARN)
    • Principal di servizio di Azure
    • Account servizio Google

    Per ulteriori informazioni, vedere Configura criteri e ruoli per accedere alle risorse.

  • credential_name, source_credential_name o target_credential_name possono essere NULL per l'URI del bucket pubblico, preautenticato o prefirmato.