Übertragen von Dateien zwischen Amazon RDS für Oracle und einem Amazon S3-Bucket
Wenn Sie Dateien zwischen einer DB-Instance von RDS für Oracle und einem Amazon-S3-Bucket übertragen möchten, können Sie das Amazon-RDS-Paket rdsadmin_s3_tasks verwenden. Sie können Dateien beim Hochladen mit GZIP komprimieren und beim Herunterladen dekomprimieren.
Themen
Anforderungen und Einschränkungen für Dateiübertragungen
Beachten Sie Folgendes, bevor Sie Dateien zwischen Ihrer DB-Instance und einem Amazon-S3-Bucket übertragen:
-
Das Paket
rdsadmin_s3_tasksüberträgt Dateien, die sich in einem einzelnen Verzeichnis befinden. Bei einer Übertragung werden keine Unterverzeichnisse berücksichtigt. -
Die maximale Objektgröße in einem Amazon S3-Bucket beträgt 5 TB.
-
Die durch
rdsadmin_s3_taskserstellten Aufgaben werden asynchron ausgeführt. -
Sie können Dateien aus dem Data-Pump-Verzeichnis, wie
DATA_PUMP_DIR, oder einem beliebigen, vom Benutzer erstellten Verzeichnis hochladen. Sie können keine Dateien aus einem Verzeichnis hochladen, das von Oracle-Hintergrundprozessen verwendet wird, wie z. B. die Verzeichnisseadump,bdumpodertrace. -
Das Download-Limit für
download_from_s3liegt bei 2000 Dateien pro Prozeduraufruf. Wenn Sie mehr als 2000 Dateien von Amazon S3 herunterladen müssen, teilen Sie den Download in separate Aktionen mit maximal 2000 Dateien pro Prozeduraufruf auf. -
Wenn in Ihrem Download-Ordner eine Datei vorhanden ist und Sie versuchen, eine Datei mit demselben Namen herunterzuladen überspringt
download_from_s3den Download. Zum Entfernen einer Datei aus dem Download-Verzeichnis verwenden Sie die PL/SQL-Prozedur UTL_FILE.FREMOVE.
Hochladen von Dateien aus Ihrer DB-Instance von RDS für Oracle in einen Amazon-S3-Bucket
Verwenden Sie zum Hochladen von Dateien aus Ihrer Oracle DB-Instance in einen Amazon-S3-Bucket das Verfahren rdsadmin.rdsadmin_s3_tasks.upload_to_s3. Sie können beispielsweise Oracle Recovery Manager (RMAN)-Sicherungsdateien oder Oracle-Data-Pump-Dateien hochladen. Weitere Informationen zur Arbeit mit Objekten finden Sie im Amazon Simple Storage Service User Guide. Weitere Informationen zur Durchführung von RMAN-Sicherungen finden Sie unter Ausführen allgemeiner RMAN-Aufgaben für Oracle DB-Instances.
Die Prozedur rdsadmin.rdsadmin_s3_tasks.upload_to_s3 hat die folgenden Parameter.
| Parametername | Datentyp | Standard | Erforderlich | Beschreibung |
|---|---|---|---|---|
|
|
VARCHAR2 |
– |
Erforderlich |
Der Name des Amazon S3-Buckets, in den die Dateien hochgeladen werden sollen. |
|
|
VARCHAR2 |
– |
Erforderlich |
Der Name des Oracle-Verzeichnisobjekts, aus dem Dateien hochgeladen werden sollen. Das Verzeichnis kann jedes beliebige vom Benutzer erstellte Verzeichnisobjekt oder das Data Pump-Verzeichnis, z. B. , sei AnmerkungSie können nur Dateien aus dem angegebenen Verzeichnis hochladen. Sie können keine Dateien in Unterverzeichnisse des angegebenen Verzeichnisses hochladen. |
|
|
VARCHAR2 |
– |
Erforderlich |
Ein Amazon S3-Dateinamenspräfix, zu dem Dateien hochgeladen werden. Ein leeres Präfix lädt alle Dateien zur obersten Ebene im angegebenen Amazon S3-Bucket hoch und fügt kein Präfix an die Dateinamen an. Bei dem Präfix |
|
|
VARCHAR2 |
– |
Erforderlich |
Ein Dateinamenspräfix, dem Dateinamen entsprechen müssen, damit die Dateien hochgeladen werden. Ein leeres Präfix lädt alle Dateien im angegebenen Verzeichnis hoch. |
|
|
NUMBER |
|
optional |
Der Grad der GZIP-Komprimierung. Der Bereich gültiger Werte lautet
|
|
|
VARCHAR2 |
– |
optional |
Die Einstellung der Zugriffssteuerung für den Bucket. Die einzigen gültigen Werte sind null und |
Der Rückgabewert für die rdsadmin.rdsadmin_s3_tasks.upload_to_s3-Prozedur ist eine Aufgaben-ID.
Im folgenden Beispiel werden alle Dateien im Verzeichnis in den Amazon-S3-Bucket DATA_PUMP_DIRamzn-s3-demo-bucket hochgeladen. Die Dateien werden nicht komprimiert.
SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'amzn-s3-demo-bucket', p_prefix => '', p_s3_prefix => '', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;
Das folgende Beispiel lädt alle Dateien mit dem Präfix im Verzeichnis db in den Amazon S3-Bucket DATA_PUMP_DIR hoch. Amazon RDS wendet die höchste Stufe der GZIP-Komprimierung auf die Dateien an.amzn-s3-demo-bucket
SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'amzn-s3-demo-bucket', p_prefix => 'db', p_s3_prefix => '', p_directory_name => 'DATA_PUMP_DIR', p_compression_level =>9) AS TASK_ID FROM DUAL;
Das folgende Beispiel lädt alle Dateien im Verzeichnis in den Amazon S3-Bucket DATA_PUMP_DIR hoch. Die Dateien werden in einen amzn-s3-demo-bucketdbfiles-Ordner hochgeladen. In diesem Beispiel ist der GZIP-Komprimierungsgrad 1, was die schnellste Komprimierungsstufe ist.
SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'amzn-s3-demo-bucket', p_prefix => '', p_s3_prefix => 'dbfiles/', p_directory_name => 'DATA_PUMP_DIR', p_compression_level =>1) AS TASK_ID FROM DUAL;
Das folgende Beispiel lädt alle Dateien im Verzeichnis in den Amazon S3-Bucket DATA_PUMP_DIR hoch. Die Dateien werden in einen amzn-s3-demo-bucketdbfiles-Order hochgeladen und ora wird an den Anfang eines jeden Dateinamens hinzugefügt. Es erfolgt keine Komprimierung.
SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'amzn-s3-demo-bucket', p_prefix => '', p_s3_prefix => 'dbfiles/ora', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;
Im folgenden Beispiel wird davon ausgegangen, dass der Befehl in Konto A ausgeführt wird, aber Konto B die vollständige Kontrolle über den Bucket-Inhalt benötigt. Der Befehl rdsadmin_s3_tasks.upload_to_s3 überträgt alle Dateien im -Verzeichnis auf den Bucket namens DATA_PUMP_DIR. Die Zugriffskontrolle ist auf s3bucketOwnedByAccountBFULL_CONTROL eingestellt, damit Konto B auf die Dateien im Bucket zugreifen kann. Der GZIP-Komprimierungsgrad ist 6, was Geschwindigkeit und Dateigröße ausgleicht.
SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 's3bucketOwnedByAccountB', p_prefix => '', p_s3_prefix => '', p_directory_name => 'DATA_PUMP_DIR', p_bucket_owner_full_control => 'FULL_CONTROL', p_compression_level =>6) AS TASK_ID FROM DUAL;
In jedem Beispiel gibt die Anweisung SELECT die ID der Aufgabe in einem VARCHAR2-Datentyp zurück.
Sie können das Ergebnis anzeigen, indem Sie die Ausgabedatei der Aufgabe anzeigen.
SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-task-id.log'));
Ersetzen Sie durch die von der Prozedur zurückgegebene Aufgaben-ID.task-id
Anmerkung
Die Aufgaben werden asynchron ausgeführt.
Hochladen von Dateien aus einem Amazon S3-Bucket zu einer Oracle-DB-Instance
Verwenden Sie zum Herunterladen von Dateien aus einem Amazon-S3-Bucket zu einer RDS-für-Oracle-Instance das Amazon-RDS-Verfahren rdsadmin.rdsadmin_s3_tasks.download_from_s3.
Die Prozedur download_from_s3 hat die folgenden Parameter.
| Parametername | Datentyp | Standard | Erforderlich | Beschreibung |
|---|---|---|---|---|
|
|
VARCHAR2 |
– |
Erforderlich |
Der Name des Amazon S3-Buckets, aus dem die Dateien heruntergeladen werden sollen. |
|
|
VARCHAR2 |
– |
Erforderlich |
Der Name des Oracle-Verzeichnisobjekts, in das die Dateien heruntergeladen werden sollen. Das Verzeichnis kann jedes beliebige vom Benutzer erstellte Verzeichnisobjekt oder das Data Pump-Verzeichnis, z. B. , sei |
|
|
VARCHAR2 |
FALSE |
Optional |
Ein Flag, das bestimmt, ob die Aufgabe einen Fehler auslöst, wenn keine Objekte im Amazon-S3-Bucket dem Präfix entsprechen. Wenn dieser Parameter nicht festgelegt oder auf FALSE (Standard) eingestellt ist, gibt die Aufgabe eine Meldung aus, dass keine Objekte gefunden wurden, löst jedoch keine Ausnahme oder einen Fehler aus. Wenn dieser Parameter TRUE ist, löst die Aufgabe eine Ausnahme und einen Fehler aus. Beispiele für Präfixspezifikationen, die bei Übereinstimmungsprüfungen problematisch sein können, sind Leerzeichen in Präfixen wie in |
|
|
VARCHAR2 |
– |
Erforderlich |
Ein Dateinamenspräfix, dem Dateinamen entsprechen müssen, damit die Dateien heruntergeladen werden. Wenn das Präfix leer ist, werden alle Dateien auf der höchsten Verzeichnisebene des angegebenen Amazon S3-Buckets heruntergeladen, nicht jedoch Dateien in Unterordnern in diesem Bucket. Das Verfahren lädt Amazon S3-Objekte nur aus dem Ordner der ersten Ebene mit dem entsprechenden Präfix herunter. Verschachtelte Verzeichnisstrukturen, die dem angegebenen Präfix entsprechen, werden nicht heruntergeladen. Angenommen, ein Amazon S3-Bucket hat die Ordnerstruktur Wenn Sie stattdessen das Präfix |
|
|
VARCHAR2 |
– |
Optional |
Das Dekomprimierungsformat. Gültige Werte sind |
Der Rückgabewert für die rdsadmin.rdsadmin_s3_tasks.download_from_s3-Prozedur ist eine Aufgaben-ID.
Das folgende Beispiel lädt alle Dateien namens im Amazon-S3-Bucket in das amzn-s3-demo-bucket-Verzeichnis herunter. Die Dateien werden nicht komprimiert, daher wird keine Dekomprimierung angewendet.DATA_PUMP_DIR
SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'amzn-s3-demo-bucket', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;
Das folgende Beispiel lädt alle Dateien mit dem Präfix im Amazon S3-Bucket db in das Verzeichnis amzn-s3-demo-bucket herunter. Die Dateien werden mit GZIP komprimiert, daher wird Dekomprimierung angewendet. Der Parameter DATA_PUMP_DIRp_error_on_zero_downloads aktiviert die Präfixfehlerüberprüfung. Wenn das Präfix also mit keiner Datei im Bucket übereinstimmt, löst die Aufgabe eine Ausnahme und einen Fehler aus.
SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'amzn-s3-demo-bucket', p_s3_prefix => 'db', p_directory_name => 'DATA_PUMP_DIR', p_decompression_format => 'GZIP', p_error_on_zero_downloads => 'TRUE') AS TASK_ID FROM DUAL;
Das folgende Beispiel lädt alle Dateien im Ordner im Amazon S3-Bucket myfolder/ in das Verzeichnis amzn-s3-demo-bucket herunter. Verwenden Sie zur Angabe des Amazon-S3-Ordners den Parameter DATA_PUMP_DIRp_s3_prefix. Die hochgeladenen Dateien werden mit GZIP komprimiert, beim Download aber nicht dekomprimiert.
SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'amzn-s3-demo-bucket', p_s3_prefix => 'myfolder/', p_directory_name => 'DATA_PUMP_DIR', p_decompression_format => 'NONE') AS TASK_ID FROM DUAL;
Das folgende Beispiel lädt die Datei im Amazon-S3-Bucket mydumpfile.dmp ins Verzeichnis amzn-s3-demo-bucket herunter. Es erfolgt keine Dekomprimierung.DATA_PUMP_DIR
SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'amzn-s3-demo-bucket', p_s3_prefix => 'mydumpfile.dmp', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;
In jedem Beispiel gibt die Anweisung SELECT die ID der Aufgabe in einem VARCHAR2-Datentyp zurück.
Sie können das Ergebnis anzeigen, indem Sie die Ausgabedatei der Aufgabe anzeigen.
SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-task-id.log'));
Ersetzen Sie durch die von der Prozedur zurückgegebene Aufgaben-ID.task-id
Anmerkung
Die Aufgaben werden asynchron ausgeführt.
Sie können mithilfe des Oracle-Verfahrens UTL_FILE.FREMOVE Dateien aus einem Verzeichnis entfernen. Weitere Informationen finden Sie unter FREMOVE Procedure
Überwachen des Status einer Dateiübertragung
Dateiübertragungsaufgaben veröffentlichen Amazon-RDS-Ereignisse, wenn sie starten und wenn sie abgeschlossen werden. Die Ereignisnachricht enthält die Aufgaben-ID für die Dateiübertragung. Informationen zum Anzeigen dieser Grenze finden Sie unter Anzeigen von Amazon-RDS-Ereignissen.
Sie können den Status einer laufenden Aufgabe in einer bdump-Datei einsehen. Die bdump-Dateien befinden sich im Verzeichnis /rdsdbdata/log/trace. Jeder bdump-Dateiname weist das folgende Format auf.
dbtask-task-id.log
Ersetzen Sie durch die ID der Aufgabe, die Sie überwachen möchten.task-id
Anmerkung
Die Aufgaben werden asynchron ausgeführt.
Sie können das gespeicherte Verfahren rdsadmin.rds_file_util.read_text_file zur Ansicht des Inhalts der bdump-Dateien verwenden. Beispiel: Die folgende Abfrage gibt den Inhalt der bdump-Datei zurück.dbtask-1234567890123-1234.log
SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-1234567890123-1234.log'));
Das folgende Beispiel zeigt die Protokolldatei für eine fehlgeschlagene Übertragung.
TASK_ID -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1234567890123-1234 TEXT -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 2023-04-17 18:21:33.993 UTC [INFO ] File #1: Uploading the file /rdsdbdata/datapump/A123B4CDEF567890G1234567890H1234/sample.dmp to Amazon S3 with bucket nameamzn-s3-demo-bucketand key sample.dmp. 2023-04-17 18:21:34.188 UTC [ERROR] RDS doesn't have permission to write to Amazon S3 bucket nameamzn-s3-demo-bucketand key sample.dmp. 2023-04-17 18:21:34.189 UTC [INFO ] The task failed.