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, il che semplifica l'esperienza utente e offre prestazioni ottimali per le operazioni di file in blocco.

Il pacchetto DBMS_CLOUD supporta il caricamento e lo scaricamento dei file nei servizi cloud riportati di seguito.

  • Oracle Cloud Infrastructure Object Storage

  • Azure Blob Storage o Azure Data Lake Storage

  • Amazon S3

  • Compatibile con Amazon S3, incluso Wasabi Hot Cloud Storage

  • Archiviazione Google Cloud

Per ulteriori informazioni, vedere DBMS_CLOUD Package File URI Formats.

Informazioni sulle operazioni dei file bulk

Le operazioni di file bulk DBMS_CLOUD supportano il download e il caricamento di file su Autonomous Database, incluso il supporto per la copia, lo spostamento e l'eliminazione dei file negli storage degli oggetti cloud, nello stesso provider dell'area di memorizzazione degli oggetti o tra provider dell'area di memorizzazione degli oggetti.

Le operazioni di file di massa 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 di massa viene gestito specificando una priorità per un'operazione. Le priorità sostenute sono:

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

L'esecuzione di operazioni di massa con priorità più elevata utilizza più risorse del database e il completamento delle operazioni più rapido quando il parallelismo può accelerare l'operazione. Una priorità inferiore utilizza meno risorse del database e il completamento delle operazioni richiede più tempo quando il parallelismo può accelerare l'operazione. Quando le operazioni di massa comportano un numero limitato di file che contengono pochi dati, l'impostazione di una priorità più alta potrebbe non modificare le prestazioni.

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

La priorità predefinita è MEDIUM, che specifica che le operazioni di file bulk utilizzano il limite di concorrenza definito per il gruppo di consumer MEDIUM. Per ulteriori informazioni, consulta la sezione Gestire l'accesso concorrente e le priorità in Autonomous Database.

Vedere DBMS_CLOUD for Bulk File Management per i dettagli sull'uso del parametro format per specificare priority con le operazioni di file bulk.

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 Procedure.

  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, account e bucket 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_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;
    /

    In questo esempio vengono copiati in blocco i file da un bucket di Oracle Cloud Infrastructure Object Storage a un altro.

    Per ulteriori informazioni, vedere BULK_COPY Procedure.

    Per ulteriori informazioni, vedere DBMS_CLOUD Formati URI.

Ad esempio, utilizzare 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 spostare in blocco i file da una posizione di storage degli oggetti cloud a un'altra.

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

I file vengono rinominati anziché copiati se l'area di memorizzazione degli oggetti 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 Procedure.

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

    In questo esempio vengono spostati in blocco i file da una posizione di Oracle Cloud Infrastructure Object Storage a un'altra.

    Per ulteriori informazioni, vedere BULK_MOVE Procedure.

    Per ulteriori informazioni, vedere DBMS_CLOUD Formati URI.

Ad esempio, utilizzare 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;
/

Download di massa dei file dallo storage degli oggetti cloud

Utilizzare la procedura DBMS_CLOUD.BULK_DOWNLOAD per eseguire il download di massa 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 Procedure.

  2. Eseguire la procedura DBMS_CLOUD.BULK_DOWNLOAD per scaricare i file in una directory 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;
    /

    Questo esempio scarica in blocco i file dall'URI della posizione dell'area di memorizzazione degli oggetti di Oracle Cloud Infrastructure nell'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 Procedure.

    Per ulteriori informazioni, vedere DBMS_CLOUD Formati URI.

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 Procedure.

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

    Questo esempio carica in blocco i file 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 Procedure.

Eliminazione di massa dei file dallo 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.

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

    Per ulteriori informazioni, vedere CREATE_CREDENTIAL Procedure.

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

    Questo esempio elimina in blocco i file dall'area di memorizzazione degli oggetti di Oracle Cloud Infrastructure.

    Per ulteriori informazioni, vedere BULK_DELETE Procedure.

    Per ulteriori informazioni, vedere DBMS_CLOUD Formati URI.

Monitorare e risolvere i problemi relativi ai caricamenti di file di massa

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 di file di massa in corso e completate. Ad esempio, l'istruzione SELECT seguente con un predicato 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 file e il relativo stato per l'operazione in blocco.

Il numero di errore e il messaggio 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 e riuscita.

FAILED

Operazione file non riuscita. È possibile tentare un nuovo tentativo per due volte.

PENDING

L'operazione file non è stata ancora avviata.

RUNNING

L'operazione sul file è attualmente in corso.

SKIPPED

Operazione file saltata.

Se un'operazione di file non riesce dopo due nuovi tentativi, l'operazione di massa 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 di 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 di 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 bulk 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 Procedure.

Note per operazioni file di massa

Fornisce note per le credenziali utilizzate con le operazioni di file bulk.

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

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

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

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