Wie kann ich Probleme beheben, wenn ich Amazon RDS for Oracle in Amazon S3 integriere?

Letzte Aktualisierung: 29.10.2021

Ich möchte Probleme und Fehler beheben, wenn ich Amazon Relational Database Service (Amazon RDS) for Oracle in Amazon Simple Storage Service (Amazon S3) integriere.

Kurzbeschreibung

Wenn Sie Dateien zwischen einer Amazon RDS for Oracle DB-Instance und einem Amazon-S3-Bucket übertragen, achten Sie auf Folgendes:

  • Die DB-Instance und der S3 Bucket befinden sich in derselben AWS-Region.
  • Die DB-Instance hat den erforderlichen Zugriff auf den S3 Bucket.
  • Die DB-Instance ist einer Optionsgruppe zugeordnet, welche die Option S3_INTEGRATION enthält.
  • Sie laden Dateien nur aus dem Oracle-Directory-Objekt hoch. Dieses Verzeichnis kann ein benutzererstelltes Verzeichnis oder ein DATA_PUMP_DIR-Verzeichnis sein.
  • Wenn Sie ein benutzererstelltes Verzeichnis verwenden, muss der Benutzer, der den Upload und Download durchführt, über die erforderlichen Lese- und Schreibberechtigungen für das Verzeichnis verfügen. Weitere Informationen finden Sie unter Gewähren von Berechtigungen für den Benutzer in der Quelldatenbank.
  • Wenn Sie Daten in Unterverzeichnissen kopieren, geben Sie den Namen des Unterverzeichnisses explizit an, wenn Sie die rdsadmin-Pakete verwenden. Mit der Option S3_INTEGRATION können Sie keine Unterverzeichnisse kopieren.

Auflösung

Stellen Sie sicher, dass die DB-Instance den erforderlichen Zugriff auf den S3 Bucket hat

Gehen Sie wie folgt vor, um zu überprüfen, ob Ihre DB-Instance eine AWS Identity and Access Management (IAM) -Rolle mit den geringsten Berechtigungen zum Hoch- und Herunterladen bei S3 besitzt:

  1. Öffnen Sie die Amazon RDS-Konsole.
  2. Wählen Sie im Navigationsbereich Datenbanken aus.
  3. Wählen Sie die DB-Instance aus, die Sie überprüfen möchten.
  4. Wählen Sie die Registerkarte Verbindung & Sicherheit aus.
  5. Scrollen Sie nach unten zum Abschnitt IAM-Rollen verwalten, um zu überprüfen, ob Sie über eine aktive IAM-Rolle mit den folgenden Berechtigungen verfügen:
    S3:ListBucket
    S3:PutObject
    S3:GetObject

Sie können auch den AWS Command Line Interface (AWS CLI)-Befehl describe-db-instances verwenden, um zu überprüfen, ob Ihre DB-Instance eine IAM-Rolle mit diesen geringsten Berechtigungen hat:

aws rds describe-db-instances \
--db-instance-identifier example-db-instance \
--query 'DBInstances[*].[AssociatedRoles[*]]'
Hinweis: Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version der AWS CLI verwenden.

Nachdem Sie überprüft haben, ob die IAM-Rolle existiert, führen Sie basierend auf Ihrem Ergebnis einen der folgenden Schritte aus:

  • Wenn die IAM-Rolle existiert, aber nicht über diese geringsten Berechtigungen verfügt, ändern Sie die Rolle so, dass sie diese Berechtigungen einschließt.
  • Wenn Sie keine IAM-Rolle mit den erforderlichen Berechtigungen haben, erstellen Sie eine IAM-Richtlinie mit den erforderlichen Berechtigungen, um die Dateien vom S3 Bucket zu Amazon RDS zu übertragen. Weitere Informationen finden Sie unter Voraussetzungen für Integration von Amazon RDS for Oracle mit Amazon S3. Achten Sie darauf, Bucket-Level-Berechtigungen zu Buckets und Berechtigungen auf Objektebene zu Objekten hinzuzufügen, wenn Sie die IAM-Richtlinie erstellen.

Wenn das Problem mit Bucket-Berechtigungen weiterhin besteht, ändern Sie die IAM-Rolle, um vollen Zugriff auf den S3 Bucket zu gewähren:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::example-bucket/*",
                "arn:aws:s3:::example-bucket"
            ]
        }
    ]
}

Wichtig: Die IAM-Rolle wurde geändert, um vollen Zugriff zu gewähren, nur um zu testen, ob das Problem aufgrund von IAM-Berechtigungen verursacht wird. Passen Sie nach Behebung des Problems die benutzerdefinierten Berechtigungen nach Bedarf an.

Um Dateien in einen bestimmten Ordner in S3 hochzuladen, verwenden Sie den Parameter p_s3_prefix in der Prozedur rdsadmin.rdsadmin_s3_tasks.upload_to_s3. Stellen Sie sicher, dass Sie über die erforderlichen Berechtigungen verfügen, bevor Sie die Dateien hochladen.

Um beispielsweise Dateien in den Ordner example-folder in den S3 Bucket example-bucket hochzuladen, fügen Sie die folgende IAM-Richtlinie an:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::example-bucket/example-folder/*"
            ]
        }
    ]
}

Stellen Sie sicher, dass die DB-Instance einer Optionsgruppe zugeordnet ist, welche die Option S3_INTEGRATION enthält

Gehen Sie wie folgt vor, um zu überprüfen, ob eine Optionsgruppe an Ihre RDS DB-Instance angefügt ist:

  1. Öffnen Sie die Amazon RDS-Konsole.
  2. Wählen Sie im Navigationsbereich Datenbanken aus.
  3. Wählen Sie die DB-Instance aus, die Sie überprüfen möchten.
  4. Wählen Sie die Registerkarte Konfiguration aus.
  5. Beachten Sie den Parameter Optionsgruppen.

Wenn diese Optionsgruppe sich nicht im Status gültig befindet und Sie versuchen, die Option S3_INTEGRATION hinzuzufügen, wird die Option nicht erfolgreich hinzugefügt. Stellen Sie daher sicher, dass sich die Optionsgruppe im Zustand gültig befindet.

Um zu überprüfen, ob sich diese Optionsgruppe im Zustand gültig befindet, führen Sie den folgenden AWS-CLI-Befehl aus:

aws rds describe-db-instances \
--db-instance-identifier example-db-instance \
--query 'DBInstances[*].[OptionGroupMemberships[*]]'

Wenn sich die Optionsgruppe nicht im Zustand gültig befindet, wählen Sie die Registerkarte Protokolle & Ereignisse für Ihre Datenbank und scrollen Sie dann nach unten zum Abschnitt Letzte Ereignisse. Identifizieren Sie die Komponente, welche die Optionsgruppe ungültig macht, und entfernen Sie diese Komponente aus der Datenbank.

Wenn sich die Optionsgruppe im Zustand gültig befindet, prüfen Sie, ob die Option S3_INTEGRATION in der Optionsgruppe enthalten ist. Weitere Informationen finden Sie unter Auflisten der Optionen und Optionseinstellungen für eine Optionsgruppe. Wenn die Option S3_INTEGRATION nicht in der Optionsgruppe enthalten ist, fügen Sie die Option hinzu. Weitere Informationen finden Sie unter Hinzufügen der Amazon-S3-Integrationsoption.

Hinweis: Wenn die Option S3_INTEGRATION nicht zu Ihrer DB-Instance hinzugefügt wird, erhalten Sie den Fehler ORA-00904: "RDSADMIN"."RDSADMIN_S3_TASKS"."UPLOAD_TO_S3": ungültiger Bezeichner”. Dieser Fehler weist darauf hin, dass die erforderlichen Verfahren zum Hoch- und Herunterladen nicht auf der DB-Instance erstellt wurden.

Das Hinzufügen der Option S3_INTEGRATION zu Amazon RDS führt nicht zu Ausfallzeiten. Wenn Sie planen, die Option Sofort anwenden zu verwenden, stellen Sie sicher, dass keine Wartungsmaßnahmen ausstehen. Wenn noch ausstehende Aktionen vorliegen, werden diese Aktionen zusammen mit der S3-Integration angewendet. Weitere Informationen finden Sie unter Pflege einer DB-Instance.

Stellen Sie sicher, dass Sie Dateien nur aus dem benutzererstellten Oracle Directory-Objekt oder DATA_PUMP_DIR-Verzeichnis hochladen/herunterladen

Sie können nicht direkt in der Datenbank-Instance auf die S3-Dateien zugreifen. Um auf diese Dateien zuzugreifen, müssen Sie die Dateien in ein Verzeichnis auf dem RDS-Host kopieren, um darauf zuzugreifen. Gehen Sie wie folgt vor, um Dateien von der DB-Instance in einen S3 Bucket hochzuladen und herunterzuladen:

  1. Um die Exportdateien in Amazon RDS nach S3 zu kopieren, erstellen Sie die Dump-Dateien unbedingt mit dem Befehl expdp oder der dbms_datapump-API im DATA_DUMP_DIR oder im benutzerdefinierten Verzeichnis. Verwenden Sie dann die Prozedur rdsadmin.rdsadmin_s3_tasks.upload_to_s3, um Dateien auf S3 hochzuladen. Informationen zu den Parametern dieses Verfahrens und Beispielabfragen zum Hochladen von Dateien finden Sie unter Hochladen von Dateien von einer Oracle DB-Instance in einen Amazon-S3-Bucket.
  2. Verwenden Sie die Prozedur rdsadmin. rdsadmin_s3_tasks.download_from_s3, um Dateien aus dem S3 Bucket in den Ordner DATA_PUMP_DIR oder in ein benutzererstelltes Verzeichnis herunterzuladen. Informationen zu den Parametern dieses Verfahrens und Beispielabfragen für Download-Dateien finden Sie unter Herunterladen von Dateien von einem Amazon-S3-Bucket auf eine Oracle-DB-Instance.

Um den Status der Dateiübertragung zu überwachen, zeigen Sie das Protokoll an, das generiert wird, wenn Sie die Prozedur ausführen, um die rdsadmin-Pakete hochzuladen oder herunterzuladen. Gehen Sie wie folgt vor, um diese Protokolle anzuzeigen:

  1. Öffnen Sie die Amazon RDS-Konsole.
  2. Wählen Sie im Navigationsbereich Datenbanken aus.
  3. Wählen Sie die DB-Instance aus, für die Sie die Protokolle anzeigen möchten.
  4. Wählen Sie die Registerkarte Protokolle & Ereignisse aus.
  5. Geben Sie im Abschnitt Protokolle die von der Prozedur zurückgegebene Aufgaben-ID in den Suchfilter ein.
  6. Wählen Sie die Datei aus, die zurückgegeben wird.
  7. Wählen Sie Beobachten aus, um die Protokolle anzuzeigen.
    -oder-
    Wählen Sie Herunterladen aus, um die Protokolle herunterzuladen.

Sie können auch den folgenden Befehl ausführen, um die während des Upload-/Download-Vorgangs generierte Protokolldatei zu lesen:

SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-task-id.log'));

Hinweis: Ersetzen Sie unbedingt die task-id durch die von der Prozedur zurückgegebene Aufgaben-ID.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?