Bulkvorgänge für Dateien in der Cloud

Das PL/SQL-Package DBMS_CLOUD bietet Unterstützung für die parallele Ausführung von Bulk-Dateiupload-, -download-, -kopier- und -übertragungsaktivitäten, wodurch die Benutzererfahrung optimiert und eine optimale Performance für Bulk-Dateivorgänge bereitgestellt wird.

Das Package DBMS_CLOUD unterstützt das Laden und Entladen von Dateien in die folgenden Cloud-Services:

  • Oracle Cloud Infrastructure Object Storage

  • Azure Blob Storage oder Azure Data Lake Storage

  • Amazon S3

  • Amazon S3-Kompatible, einschließlich Wasabi Hot Cloud Storage

  • Google Cloud Storage

Weitere Informationen finden Sie unter DBMS_CLOUD Package File URI Formats.

Informationen zu Bulk File-Vorgängen

DBMS_CLOUD-Massendateivorgänge unterstützen das Herunterladen und Hochladen von Dateien in Autonomous Database, einschließlich Unterstützung für das Kopieren, Verschieben und Löschen von Dateien in Cloud-Objektspeichern, entweder innerhalb desselben Objektspeicherproviders oder zwischen Objektspeicherprovidern.

Die Bulk-Dateivorgänge unterstützen Parallelität und bieten optimale Performance beim Hochladen, Herunterladen, Kopieren und Verschieben von Dateien. Die Parallelität für Bulk-Dateivorgänge wird durch Angabe einer Priorität für einen Vorgang behandelt. Folgende Prioritäten werden unterstützt:

  • HIGH: Mit der CPU-Compute-Anzahl der Autonomous Database-Instanz können Sie die Anzahl der verarbeiteten parallelen Dateien bestimmen.
  • MEDIUM: Verwenden Sie das Nebenläufigkeitslimit für den Medium-Service, um die Parallelität zu bestimmen.
  • LOW: Dateien in serieller Reihenfolge verarbeiten (keine Nebenläufigkeit).

Beim Ausführen von Bulkvorgängen mit einer höheren Priorität werden mehr Datenbankressourcen und Vorgänge schneller abgeschlossen, wenn die Parallelisierung den Vorgang beschleunigen kann. Eine niedrigere Priorität verbraucht weniger Datenbankressourcen und die Ausführung von Vorgängen dauert länger, wenn die Parallelität den Vorgang beschleunigen kann. Wenn Bulk-Vorgänge eine geringe Anzahl von Dateien enthalten, die wenig Daten enthalten, ändert die Angabe einer höheren Priorität möglicherweise nicht die Performance.

Um die Parallelität für Bulk-Dateivorgänge zu erhöhen, verwenden Sie die Priorität HIGH, und erhöhen Sie die Anzahl der CPUs, die Ihrer Autonomous Database-Instanz zugewiesen sind. Die maximal unterstützte Anzahl nebenläufiger Dateivorgänge ist für Bulk-Dateivorgänge auf 64 begrenzt.

Die Standardpriorität ist MEDIUM, die angibt, dass Bulk-Dateivorgänge das für die MEDIUM-Nutzungsgruppe definierte Nebenläufigkeitslimit verwenden. Weitere Informationen finden Sie unter Autonomous Database - Parallelität und Prioritäten verwalten.

Weitere Informationen zur Verwendung des Parameters format zur Angabe von priority mit Bulkdateivorgängen finden Sie unter DBMS_CLOUD für Bulk File Management.

Massenkopie von Dateien in Cloud Object Storage

Verwenden Sie die Prozedur DBMS_CLOUD.BULK_COPY, um Dateien im Bulkverfahren aus einem Objektspeicher-Bucket oder -Ordner in einen anderen Bucket oder Ordner zu kopieren.

  1. Erstellen Sie ein Zugangsdatenobjekt für den Zugriff auf den Quellspeicherort.

    Der Quellzugangsdatenname, wie mit dem Parameter source_credential_name angegeben, wird standardmäßig auch als Zugangsdaten für den Zielspeicherort verwendet.

    Weitere Informationen finden Sie unter Prozedur CREATE_CREDENTIAL.

  2. Wenn sich Quelle und Ziel in eindeutigen Objektspeichern befinden oder unterschiedliche Accounts mit demselben Cloud-Provider aufweisen, erstellen Sie Zugangsdaten für den Zugriff auf den Zielspeicherort, und nehmen Sie den Parameter target_credential_name auf.
  3. Führen Sie die Prozedur DBMS_CLOUD.BULK_COPY aus, um Dateien parallel aus einem Objektspeicher-Bucket oder -Ordner in einen anderen Bucket oder Ordner zu kopieren, der sich über Cloud-Provider, Accounts und Buckets erstrecken kann. Um die Prozedur auszuführen, müssen Sie als ADMIN-Benutzer angemeldet sein oder die Berechtigung EXECUTE für DBMS_CLOUD besitzen.
    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 diesem Beispiel werden Dateien im Bulkverfahren aus einem Oracle Cloud Infrastructure Object Storage-Bucket in einen anderen kopiert.

    Weitere Informationen finden Sie unter Prozedur BULK_COPY.

    Weitere Informationen finden Sie unter DBMS_CLOUD URI-Formate.

Beispiel: Verwenden Sie DBMS_CLOUD.BULK_COPY, um Dateien aus Amazon S3 in Oracle Cloud Infrastructure Object Storage zu kopieren.

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

Dateien im Cloud-Objektspeicher global verschieben

Verwenden Sie die Prozedur DBMS_CLOUD.BULK_MOVE, um Dateien im Bulkverfahren von einem Cloud-Objektspeicherort in einen anderen zu verschieben.

Der erste Schritt beim Verschieben von Dateien ist das Kopieren in den Zielspeicherort. Nachdem die Dateien erfolgreich kopiert wurden, werden sie aus dem Quellspeicherort gelöscht.

Die Dateien werden umbenannt und nicht kopiert, wenn der Objektspeicher Umbenennungsvorgänge zwischen Quell- und Zielspeicherorten zulässt.

  1. Erstellen Sie ein Zugangsdatenobjekt für den Zugriff auf den Quellspeicherort.

    Der Quellzugangsdatenname, wie mit dem Parameter source_credential_name angegeben, wird standardmäßig auch als Zugangsdaten für den Zielspeicherort verwendet.

    Weitere Informationen finden Sie unter Prozedur CREATE_CREDENTIAL.

  2. Wenn sich Quelle und Ziel in eindeutigen Objektspeichern befinden oder unterschiedliche Accounts mit demselben Cloud-Provider aufweisen, erstellen Sie Zugangsdaten für den Zugriff auf den Zielspeicherort, und nehmen Sie den Parameter target_credential_name auf.
  3. Führen Sie die Prozedur DBMS_CLOUD.BULK_MOVE aus, um Dateien im Bulkverfahren von einem Cloud-Objektspeicherort in einen anderen zu verschieben. Um die Prozedur auszuführen, müssen Sie als ADMIN-Benutzer angemeldet sein oder die Berechtigung EXECUTE für DBMS_CLOUD besitzen.
    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 diesem Beispiel werden Dateien im Bulkverfahren von einem Oracle Cloud Infrastructure Object Storage-Speicherort in einen anderen verschoben.

    Weitere Informationen finden Sie unter Prozedur BULK_MOVE.

    Weitere Informationen finden Sie unter DBMS_CLOUD URI-Formate.

Beispiel: Verwenden Sie DBMS_CLOUD.BULK_MOVE, um Dateien von Amazon S3 in Oracle Cloud Infrastructure Object Storage zu verschieben.

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

Dateien aus Cloud Object Storage per Bulkdownload herunterladen

Mit der Prozedur DBMS_CLOUD.BULK_DOWNLOAD können Sie Dateien im Bulkverfahren aus dem Cloud-Objektspeicherort in das Verzeichnisobjekt in einer Autonomous Database herunterladen.

  1. Erstellen Sie Zugangsdaten für den Zugriff auf Ihren Cloud-Objektspeicher.

    Der Zugangsdatenname wird mit dem Parameter credential_name angegeben.

    Weitere Informationen finden Sie unter Prozedur CREATE_CREDENTIAL.

  2. Führen Sie die Prozedur DBMS_CLOUD.BULK_DOWNLOAD aus, um Dateien aus Cloud Object Storage in ein Autonomous Database-Verzeichnis herunterzuladen. Um die Prozedur auszuführen, müssen Sie als ADMIN-Benutzer angemeldet sein oder die Berechtigung EXECUTE für DBMS_CLOUD besitzen.
    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 diesem Beispiel werden Dateien im Bulkverfahren von der Speicherort-URI des Oracle Cloud Infrastructure-Objektspeichers in das Verzeichnisobjekt in einer Autonomous Database heruntergeladen.

    Hinweis

    Um die Dateien in das Zielverzeichnisobjekt zu schreiben, benötigen Sie die Berechtigung WRITE für das Verzeichnisobjekt.

    Weitere Informationen finden Sie unter Prozedur BULK_DOWNLOAD.

    Weitere Informationen finden Sie unter DBMS_CLOUD URI-Formate.

Massenupload von Dateien in Cloud Object Storage

Verwenden Sie die Prozedur DBMS_CLOUD.BULK_UPLOAD, um Dateien aus einem Verzeichnisobjekt in der Datenbank im Bulkverfahren in einen Cloud-Objektspeicherort hochzuladen.

  1. Erstellen Sie Zugangsdaten für den Zugriff auf Ihren Cloud-Objektspeicher.

    Der Zugangsdatenname wird mit dem Parameter credential_name angegeben.

    Weitere Informationen finden Sie unter Prozedur CREATE_CREDENTIAL.

  2. Führen Sie die Prozedur DBMS_CLOUD.BULK_UPLOAD aus, um Dateien aus einem Datenbankverzeichnis in der Autonomous Database-Instanz in Cloud Object Storage zu kopieren. Um die Prozedur auszuführen, müssen Sie als ADMIN-Benutzer angemeldet sein oder die Berechtigung EXECUTE für DBMS_CLOUD besitzen.
    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 diesem Beispiel werden Dateien per Bulkvorgang aus einem Verzeichnisobjekt hochgeladen, wie mit dem Parameter directory_name angegeben, in die Speicherort-URI des Oracle Cloud Infrastructure-Objektspeichers.

    Hinweis

    Um die Quelldateien im Verzeichnisobjekt zu lesen, benötigen Sie die Berechtigung READ für das Verzeichnisobjekt.

    Weitere Informationen finden Sie unter Prozedur BULK_UPLOAD.

Dateien aus dem Cloud-Objektspeicher per Bulkvorgang löschen

Verwenden Sie die Prozedur DBMS_CLOUD.BULK_DELETE, um Dateien im Bulkverfahren aus Cloud-Objektspeicher zu löschen.

  1. Erstellen Sie Zugangsdaten für den Zugriff auf Ihren Cloud-Objektspeicher.

    Der Zugangsdatenname wird mit dem Parameter credential_name angegeben.

    credential_name kann für öffentliche oder vorab authentifizierte oder vorab signierte Bucket-URI NULL sein.

    Weitere Informationen finden Sie unter Prozedur CREATE_CREDENTIAL.

  2. Führen Sie die Prozedur DBMS_CLOUD.BULK_DELETE aus, um Dateien aus dem Cloud-Objektspeicher zu löschen. Um die Prozedur auszuführen, müssen Sie als ADMIN-Benutzer angemeldet sein oder die Berechtigung EXECUTE für DBMS_CLOUD besitzen.
    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 diesem Beispiel werden Dateien im Bulkverfahren aus dem Oracle Cloud Infrastructure-Objektspeicher gelöscht.

    Weitere Informationen finden Sie unter Prozedur BULK_DELETE.

    Weitere Informationen finden Sie unter DBMS_CLOUD URI-Formate.

Massenladen von Dateien überwachen und Fehler beheben

Alle Dataload-Vorgänge von DBMS_CLOUD werden in den Views dba_load_operations und user_load_operations protokolliert.

Mit den folgenden Ansichten können Sie das Laden von Massendateien überwachen und Fehler beheben:

  • dba_load_operations: Zeigt alle Ladevorgänge an.

  • user_load_operations: Zeigt die Ladevorgänge in Ihrem Schema an.

Fragen Sie diese Ansichten ab, um Informationen zu laufenden und abgeschlossenen Bulk-Dateivorgängen anzuzeigen. Beispiel: Die folgende SELECT-Anweisung mit einem WHERE-Klauselprädikat für die TYPE zeigt DOWNLOAD-Vorgänge an:


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             

In der Spalte STATUS_TABLE wird der Name der Tabelle angezeigt, die Sie abfragen können, um detaillierte Logginginformationen für den Bulkdownloadvorgang anzuzeigen. Beispiele:

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

In der Statustabelle werden jeder Dateiname und sein Status für den Bulkvorgang angezeigt.

Die entsprechende Fehlernummer und Meldung werden in der Statustabelle aufgezeichnet, wenn ein Vorgang für eine bestimmte Datei nicht erfolgreich verläuft.

Bei abgeschlossenen Vorgängen kann die für jeden Vorgang benötigte Zeit mit der gemeldeten Zeit START_TIME und END_TIME berechnet werden.

Die Spalte STATUS für den Dateivorgang kann einen der folgenden Werte aufweisen:

Datei-Status Beschreibung

COMPLETED

Dateivorgang erfolgreich abgeschlossen.

FAILED

Dateivorgang nicht erfolgreich. Ein erneuter Versuch kann zweimal versucht werden.

PENDING

Der Dateivorgang wurde noch nicht gestartet.

RUNNING

Dateivorgang wird derzeit ausgeführt.

SKIPPED

Der Dateivorgang wurde übersprungen.

Wenn ein Dateivorgang nach zwei Wiederholungsversuchen nicht erfolgreich verläuft, wird der Bulkvorgang als nicht erfolgreich markiert, und es wird ein Fehler ausgelöst. Beispiele:

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

Wenn Sie einen DBMS_CLOUD-Massendateivorgang verwenden, gibt es format-Parameteroptionen, die Statustabellen steuern:

  • logretention: Gibt einen ganzzahligen Wert an, der die Dauer der Aufbewahrung der Statustabelle in Tagen bestimmt. Der Standardwert ist 2 Tage.

  • logprefix: Gibt einen Zeichenfolgenwert an, der das Namenspräfix der Statustabelle für Bulkvorgänge bestimmt.

    Jeder Bulkvorgang hat einen eigenen Standardwert für die Option logprefix:

    Prozedur Standardwert für 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

Informationen zum Löschen der Tabelle user_load_operations finden Sie unter DELETE_ALL_OPERATIONS-Prozedur.

Notizen für Bulk File-Vorgänge

Enthält Hinweise zu den Zugangsdaten, die Sie mit Bulk-Dateivorgängen verwenden.

  • Sie können Principals als Parameter credential_name, source_credential_name oder target_credential_name angeben, um sicher auf Cloud-Ressourcen zuzugreifen, ohne Benutzerzugangsdaten zu speichern. Folgende Principals werden unterstützt:

    • Oracle Cloud Infrastructure-Ressourcen-Prinzipien
    • AWS-Amazon-Ressourcennamen (ARN)s
    • Azure-Service Principal
    • Google-Serviceaccount

    Weitere Informationen finden Sie unter Policys und Rollen für den Zugriff auf Ressourcen konfigurieren.

  • Die credential_name, source_credential_name oder target_credential_name können für die öffentliche, vorab authentifizierte oder vorab signierte Bucket-URI NULL sein.