View a markdown version of this page

Ende des Supports für RDS Custom für Oracle - Amazon Relational Database Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Ende des Supports für RDS Custom für Oracle

Anmerkung

Hinweis zum Ende des Supports: Am 31. März 2027 AWS wird der Support für Amazon RDS Custom for Oracle eingestellt. Nach dem 31. März 2027 können Sie nicht mehr auf die Ressourcen von RDS Custom for Oracle oder RDS Custom for Oracle zugreifen. Weitere Informationen finden Sie unter Ende des Supports für RDS Custom für Oracle.

-Übersicht

AWS Hat nach reiflicher Überlegung die Entscheidung getroffen, den Service Amazon RDS Custom for Oracle einzustellen. Der Service wird mit Wirkung zum 31. März 2027 nicht mehr unterstützt. Dieser Leitfaden enthält detaillierte Migrationsstrategien, die Sie bei der Migration von RDS Custom for Oracle zu selbstverwalteten Oracle-Datenbanken auf Amazon Elastic Compute Cloud (Amazon EC2) unterstützen.

Wichtige Zeitpläne

  • Vom 31. März 2026 bis 31. März 2027: Wir empfehlen Ihnen, von RDS Custom for Oracle zur Ausführung von Oracle auf EC2 zu migrieren. Während dieses Zeitraums können Sie RDS Custom for Oracle mit den vorhandenen Funktionen und dem vorhandenen Support weiterhin verwenden.

  • Nach dem 31. März 2027: Sie können den Dienst RDS Custom for Oracle nicht mehr nutzen.

Zielpublikum

Diese Anleitung richtet sich an:

  • Datenbankadministratoren, die für Oracle-Datenbankmigrationen verantwortlich sind

  • Cloud-Architekten planen Migrationsstrategien

  • DevOps Ingenieure, die die Datenbankinfrastruktur verwalten

  • IT-Manager, die den Migrationsprozess überwachen

Voraussetzungen

Stellen Sie vor Beginn sicher, dass Sie über Folgendes verfügen:

  • Eine aktive Amazon RDS Custom for Oracle-Instance, auf der Oracle 19c Enterprise Edition ausgeführt wird

  • Entsprechende AWS Identity and Access Management (IAM) -Berechtigungen zum Erstellen und Verwalten von EC2-Instances

  • Verständnis Ihrer Datenbankarchitektur (Nicht-CDB oder Mehrmandanten-CDB mit PDBs)

  • Planung der Netzwerkkonnektivität zwischen Quell- und Zielinstanzen

  • Backup- und Wiederherstellungsstrategie für Ihre Migration

Optionen für die Migration

Im Rahmen des Migrationsprozesses können Sie je nach Ihren Geschäftsanforderungen und Ihrem Anwendungsfall eine von zwei Migrationsoptionen wählen:

Option 1: Aktive RMAN-Duplikation (Migration) Online/Offline

Am besten geeignet für
  • Workloads, die geplante Ausfallzeiten während der endgültigen Umstellung ermöglichen

  • Einfachere Migrationsanforderungen mit weniger beweglichen Teilen

  • Datenbanken, für die Sie eine einfache, einmalige Migration wünschen

  • Szenarien, in denen Sie vor der Umstellung keine kontinuierliche Synchronisation benötigen

Schlüsselmerkmale
  • Ausfallzeit: Minimale Ausfallzeit während der endgültigen Umstellung (die Datenbank bleibt während der Duplizierung online, kurze Ausfallzeit bei der endgültigen Umstellung)

  • Komplexität: Geringere Komplexität durch direkte Datenbankduplizierung

  • Dauer: Die Migrationszeit hängt von der Datenbankgröße und der Netzwerkbandbreite ab

  • Fallback: Erfordert die Wartung der Quelldatenbank, bis die Validierung abgeschlossen ist

  • Online-Fähigkeit: Die Quelldatenbank bleibt während des Duplizierungsprozesses online und zugänglich

Migrationsansatz: Die aktive RMAN-Duplizierung erstellt eine exakte Kopie der Quelldatenbank auf dem Ziel, indem Datenbankdateien aus der laufenden Quelldatenbank über das Netzwerk kopiert werden. Die Quelldatenbank bleibt während des Duplizierungsvorgangs online und für Anwendungen zugänglich. Bei Mehrmandantendatenbanken dupliziert RMAN automatisch die gesamte CDB einschließlich CDB$ROOTPDB$SEED, und aller austauschbaren Datenbanken in einem einzigen Vorgang. Es ist nur ein kurzes Umstellungsfenster erforderlich, um Anwendungen auf die neue EC2-Instance umzuleiten.

Option 2: Oracle Data Guard (Online-Migration)

Am besten geeignet für
  • Produktionsworkloads, die minimale Ausfallzeiten erfordern

  • Mission-critical Datenbanken, die verfügbar bleiben müssen

  • Szenarien, in denen Sie vor der Umstellung eine kontinuierliche Synchronisation benötigen

  • Migrationen, für die eine integrierte Fallback-Funktion erforderlich ist

Schlüsselmerkmale
  • Ausfallzeit: Near-zero Ausfallzeit (Sekunden bis Minuten bei Umstellung)

  • Komplexität: Höhere Komplexität mit der Data Guard-Konfiguration

  • Dauer: Zeit für die Ersteinrichtung plus kontinuierliche Synchronisation bis zum Switchover

  • Fallback: Built-in Fallback-Fähigkeit, indem die Quelle im Standby-Modus belassen wird

Migrationsansatz: Oracle Data Guard verwaltet eine synchronisierte Standby-Datenbank, indem es kontinuierlich Redo-Logs aus der Primärdatenbank versendet und anwendet. Wenn Sie bereit sind, die Migration abzuschließen, führen Sie einen Switchover durch, der den EC2-Standby mit minimaler Ausfallzeit zum Primärserver hochstuft. Bei Datenbanken mit mehreren Mandanten schützt Data Guard automatisch die gesamte CDB, einschließlich aller PDBs.

Entscheidungsmatrix

Verwenden Sie die folgende Matrix, um die geeignete Migrationsoption auszuwählen:

Aspekt

Aktive RMAN-Duplizierung

Oracle Data Guard

Verfügbarkeit der Quelldatenbank

Online während der Vervielfältigung Während des gesamten Vorgangs online

Akzeptable Ausfallzeiten

Minuten bis Stunden (endgültige Umstellung) Sekunden bis Minuten (Umstellung)

Komplexität der Migration

Niedriger Höher

Kontinuierliche Synchronisation

Nein Ja

Fallback-Fähigkeit

Manuell (Quelle beibehalten) Built-in (automatisch)

Testen vor der Umstellung

Begrenzt Vollständiger Test möglich

Anforderung an die Netzwerkbandbreite

Hoch beim Duplizieren Mäßig (kontinuierlich)

Am besten geeignet für

Die meisten Migrationen dev/test, geplante Umstellung Produktion, geschäftskritisch, fast keine Ausfallzeiten

Überlegungen zur Architektur

Beide Migrationsoptionen unterstützen zwei Oracle-Datenbankarchitekturen:

Non-CDB

Herkömmliche Oracle-Datenbanken mit einer Instanz ohne Mehrmandantenarchitektur. Diese Datenbanken:

  • Haben Sie eine einzige Datenbankinstanz

  • Verwenden Sie keine austauschbaren Datenbanken (PDBs)

  • Sind einfacher zu verwalten und zu migrieren

  • Wird in RDS Custom for Oracle in der Regel ORCL genannt

Mehrmandantenfähig (CDB mit PDBs)

Container-Datenbanken (CDB), die mehrere Pluggable Databases (PDBs) hosten, wurden in Oracle 12c eingeführt. Diese Datenbanken:

  • Haben Sie eine Container-Datenbank (CDB) mit und CDB$ROOT PDB$SEED

  • Hosten Sie eine oder mehrere austauschbare Datenbanken (PDBs)

  • Sorgen Sie für Datenbankkonsolidierung und Ressourcenisolierung

  • Wird in RDS Custom for Oracle normalerweise RDSCDB genannt

  • Verwenden Sie Oracle Managed Files (OMF) mit GUID-based Unterverzeichnissen für PDB-Datendateien

Wichtiger Hinweis für Multitenant-Migrationen: Die Zieldatenbank wird während des Migrationsprozesses in ORCL umbenannt (Quelle: RDSCDB → Ziel: ORCL). Dies vereinfacht die Zielkonfiguration und entspricht den Standardbenennungskonventionen.

Hauptunterschiede im Migrationsansatz

Aspekt

Non-CDB

Mehrmandantenfähig (CDB mit PDBs)

Umfang der Migration

Eine einzige Datenbank Vollständige CDB mit allen PDBs

Post-migration state

Datenbank öffnen READ WRITE CDB öffnet READ WRITE; PDBs im Zustand MOUNTED

PDB-Verwaltung

N/A PDBs müssen geöffnet und automatisches Öffnen konfiguriert werden

Bereinigen

Einzelne Datenbank CDB$ROOT(kaskadiert zu PDBs); behandelt allgemeine C##-Benutzer

Anwendungsverbindungen

Datenbankdienst PDB-Dienste (nicht CDB)

Parameterdatei

Standardparameter Erfordert enable_pluggable_database=True

Komplexität

Niedriger Höher aufgrund mehrerer Container

Allgemeine Voraussetzungen für beide Migrationsoptionen

Bevor Sie eine der Migrationsoptionen starten, führen Sie die folgenden erforderlichen Schritte durch:

  1. Starten und konfigurieren Sie die EC2-Instanz

    Starten Sie eine EC2-Instance unter Berücksichtigung der folgenden Überlegungen:

    • Instance-Typ: Wählen Sie einen EC2-Instance-Typ, der den Ressourcenanforderungen Ihres Workloads entspricht. Die Verwendung derselben Instance-Klasse wie Ihre benutzerdefinierte RDS-Instance ist ein guter Ausgangspunkt. Berücksichtigen Sie die Anforderungen an Arbeitsspeicher, CPU und Netzwerkbandbreite.

    • Betriebssystem: Oracle Linux oder Red Hat Enterprise Linux (entspricht Ihrer RDS Custom OS-Version oder ist mit dieser kompatibel)

    • Oracle-Software: Installieren Sie die Oracle Database-Software (dieselbe Hauptversion, Nebenversion, Release-Update und idealerweise dieselben einmaligen Patches wie RDS Custom). Stellen Sie sicher, dass die Oracle-Software in u01/app /oracle/ oder an Ihrem bevorzugten Ort installiert ist.

    • Speicher: Konfigurieren Sie Amazon EBS-Volumes mit geeigneter Größe und IOPS, um Ihre Workload-Anforderungen zu erfüllen. Erwägen Sie die Verwendung von gp3-Volumes für kostengünstige Leistung oder io2 Block Express für Hochleistungs-Workloads.

  2. Konfigurieren Sie die Speicherarchitektur

    1. Dateisystemspeicher (für die meisten Szenarien empfohlen)

      • Verwenden Sie Standard-Dateisystemverzeichnisse für Oracle-Datendateien

      • Einfacher zu verwalten und für die meisten Workloads geeignet

      • In dieser Anleitung werden Beispiele für die Speicherung von Dateisystemen verwendet

    2. Oracle Automatic Storage Management (ASM)

      • Wenn Ihr Workload ASM erfordert, installieren und konfigurieren Sie eigenständiges ASM auf der EC2-Instance

      • Passen Sie alle Pfadparameter in der Init-Datei entsprechend an, um ASM-Festplattengruppen zu verwenden (z. B. +DATA, +FRA)

      • Der Migrationsprozess ist für ASM ähnlich, mit Pfadanpassungen

  3. Richten Sie den Dateiübertragungsmechanismus ein

    Erstellen Sie einen Mechanismus für die Übertragung von Dateien zwischen RDS Custom- und EC2-Instances. Sie haben mehrere Möglichkeiten:

    1. Option A: Amazon S3 (für die meisten Szenarien empfohlen)

      • Erstellen Sie einen Amazon S3 S3-Bucket oder verwenden Sie einen vorhandenen

      • AWS CLI auf beiden Instanzen installieren und konfigurieren

      • Anweisungen finden Sie unter Erste Schritte mit dem AWS CLI.

    2. Option B: Direkt SCP/SFTP

      • Wenn SSH-Ports zwischen den Instanzen geöffnet sind, können Sie Dateien direkt übertragen

      • Geeignet für kleine Dateien wie Parameterdateien und Passwortdateien

    3. Option C: Amazon EFS

      • Wenn Sie Amazon EFS bereits auf beiden Instances installiert haben, können Sie es als gemeinsam genutztes Dateisystem verwenden

      • Geeignet für Umgebungen mit vorhandener EFS-Infrastruktur

      In dieser Anleitung wird Amazon S3 als Beispiele verwendet, Sie können die Befehle jedoch an die von Ihnen gewählte Methode anpassen.

  4. Netzwerkkonnektivität konfigurieren

    Stellen Sie die Netzwerkkonnektivität zwischen den RDS Custom- und EC2-Instances sicher:

    • Gleiche VPC: Sicherheitsgruppen müssen bidirektionalen Verkehr auf dem Oracle-Listener-Port zulassen (Standard 1521 oder Ihr benutzerdefinierter Port)

    • Verschiedene VPCs (dasselbe Konto): VPC-Peering einrichten und Routentabellen und Sicherheitsgruppen konfigurieren

    • Verschiedene Konten: Richten Sie kontenübergreifendes VPC-Peering ein oder verwenden Sie Transit Gateway AWS

    • Konnektivität überprüfen: Verwenden Sie Ping und Telnet, um die Konnektivität am Datenbankport zu testen

  5. Erstellen Sie eine Verzeichnisstruktur auf EC2

    Die Verzeichnisstruktur hängt von Ihrer Datenbankarchitektur ab:

    Beispiel Für Non-CDB:
    # Non-CDB directories mkdir -p /u01/app/oracle/oradata/ORCL/controlfile/ mkdir -p /u01/app/oracle/oradata/ORCL/datafile mkdir -p /u01/app/oracle/oradata/ORCL/onlinelog mkdir -p /u01/app/oracle/oradata/ORCL/arch mkdir -p /u01/app/oracle/admin/ORCL/adump mkdir -p /u01/app/oracle/backup # Set ownership chown -R oracle:oinstall /u01/app/oracle/oradata/ORCL chown -R oracle:oinstall /u01/app/oracle/admin/ORCL chown -R oracle:oinstall /u01/app/oracle/backup
    Beispiel Für Multitenant (CDB mit PDBs)
    # CDB directories mkdir -p /u01/app/oracle/oradata/ORCL/controlfile/ mkdir -p /u01/app/oracle/oradata/ORCL/cdb/datafile mkdir -p /u01/app/oracle/oradata/ORCL/pdbseed/datafile mkdir -p /u01/app/oracle/oradata/ORCL/onlinelog mkdir -p /u01/app/oracle/oradata/ORCL/arch mkdir -p /u01/app/oracle/admin/ORCL/adump mkdir -p /u01/app/oracle/backup # PDB directories (RDS Custom uses OMF with GUID-based paths) # Create a generic pdb directory - migration will create subdirectories as needed mkdir -p /u01/app/oracle/oradata/ORCL/pdb/datafile # Set ownership chown -R oracle:oinstall /u01/app/oracle/oradata/ORCL chown -R oracle:oinstall /u01/app/oracle/admin/ORCL chown -R oracle:oinstall /u01/app/oracle/backup
    Anmerkung

    RDS Custom for Oracle verwendet Oracle Managed Files (OMF) für PDB-Datendateien mit GUID-based Unterverzeichnissen (z. B.). /rdsdbdata/db/pdb/RDSCDB_A/{GUID}/datafile/ Der Migrationsprozess erstellt automatisch die erforderliche Unterverzeichnisstruktur auf dem Ziel. Sie müssen nur die übergeordneten Verzeichnisse erstellen.

    Speicherstrategie: Erwägen Sie die Verwendung eines separaten EBS-Volumes für/u01/app/oracle/backup , um es nach Abschluss der Migration einfach zu trennen und zu entfernen, wodurch Speicherkosten eingespart werden.

  6. Überprüfen Sie die Konfiguration der Quelldatenbank

Bevor Sie mit der Migration beginnen, überprüfen Sie Ihre Quelldatenbankkonfiguration:

  1. Melden Sie sich als rdsdb-Benutzer beim RDS-Custom-Datenbankhost an und legen Sie die Umgebung fest:

    Beispiel
    # For non-CDB export ORACLE_HOME=/rdsdbbin/oracle.19.custom.r1.EE.1 export ORACLE_SID=ORCL export PATH=$ORACLE_HOME/bin:$PATH # For multitenant CDB export ORACLE_HOME=/rdsdbbin/oracle.19.custom.r1.EE-CDB.1 export ORACLE_SID=RDSCDB export PATH=$ORACLE_HOME/bin:$PATH
  2. Connect zur Datenbank her und überprüfen Sie die Architektur:

    Beispiel
    sqlplus / as sysdba SQL> SELECT name, cdb, open_mode, log_mode FROM v$database;
    Beispiel Für Non-CDB, erwartete Ausgabe
    NAME CDB OPEN_MODE LOG_MODE --------- --- -------------------- ------------ ORCL NO READ WRITE ARCHIVELOG
    Beispiel Für Multitenant (CDB) erwartete Ausgabe:
    NAME CDB OPEN_MODE LOG_MODE --------- --- -------------------- ------------ RDSCDB YES READ WRITE ARCHIVELOG
  3. Wenn Sie eine CDB mit mehreren Mandanten haben, listen Sie alle PDBs und ihren Status auf:

    Beispiel
    SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs;

    Erwartete Ausgabe (Beispiel mit einer PDB namens ORCLDB):

    Beispiel
    CON_ID NAME OPEN_MODE RES ---------- ------------------------------ ---------- --- 2 PDB$SEED READ ONLY NO 3 ORCLDB READ WRITE NO
  4. Überprüfen Sie die Gesamtgröße der Datenbank:

    Beispiel Für Non-CDB:
    SQL> SELECT SUM(bytes)/1024/1024/1024 AS total_size_gb FROM dba_data_files;
    Beispiel Für Multitenant:
    -- Total CDB size (all containers) SQL> SELECT SUM(bytes)/1024/1024/1024 AS total_size_gb FROM cdb_data_files; -- Size per PDB SQL> SELECT p.name AS pdb_name, ROUND(SUM(d.bytes)/1024/1024/1024, 2) AS size_gb FROM v$pdbs p JOIN cdb_data_files d ON p.con_id = d.con_id GROUP BY p.name, p.con_id ORDER BY p.con_id;

Option 1: Physische Migration mithilfe von RMAN Active Duplication

Dieser Abschnitt enthält detaillierte Schritte für die Migration Ihrer Oracle-Datenbank von RDS Custom for Oracle zu EC2 mithilfe von RMAN Active Duplication. Bei dieser Methode werden Duplikate aus einer aktiven, laufenden Datenbank erstellt, sodass die Quelle während des Migrationsprozesses online und zugänglich bleibt.

Wann sollte die aktive RMAN-Duplikation verwendet werden

Wählen Sie aktive RMAN-Duplizierung, wenn:

  • Sie möchten, dass die Quelldatenbank während der Migration online und zugänglich bleibt

  • Sie können sich ein kurzes Umstellungsfenster für die endgültige Anwendungsumleitung leisten

  • Sie wünschen sich einen unkomplizierten Migrationsprozess mit weniger beweglichen Teilen

  • Ihre Datenbankgröße und Netzwerkbandbreite ermöglichen eine angemessene Zeit für die Duplizierung

  • Vor der Umstellung ist keine kontinuierliche Synchronisation erforderlich

  • Sie migrieren Produktions-, Entwicklungs- oder Testdatenbanken

Überblick über die aktive RMAN-Duplizierung

Für die aktive RMAN-Duplizierung ist weder eine Sicherung der Quelldatenbank noch ein Offlinemodus der Quelldatenbank erforderlich. Es dupliziert die aktive, laufende Quelldatenbank zum Ziel, indem Datenbankdateien über das Netzwerk kopiert werden, während die Quelle online bleibt und für Anwendungen zugänglich bleibt.

Die wichtigsten Vorteile:
  • Quelle bleibt online: Anwendungen können während der Duplizierung weiterhin auf die Quelldatenbank zugreifen

  • Keine Sicherung erforderlich: Eliminiert die Notwendigkeit eines Zwischenspeichers für Backups

  • Direkte Netzwerkübertragung: Datenbankdateien werden direkt von der Quelle zum Ziel kopiert

  • Automatische Konsistenz: RMAN stellt sicher, dass die doppelte Datenbank konsistent ist

  • Einzelvorgang: Dupliziert bei Mehrmandantenfähigkeit die gesamte CDB, einschließlich aller PDBs, in einem Vorgang

Beim Duplizieren wird eine exakte Kopie der Quelldatenbank auf dem Ziel erstellt, einschließlich aller Datendateien, Kontrolldateien und Redo-Logs. Die Quelldatenbank bedient während des gesamten Duplizierungsvorgangs weiterhin Anwendungsanfragen. Am Ende ist nur ein kurzes Umstellungsfenster erforderlich, um Anwendungen von der Quelle zum Ziel umzuleiten.

Typischer Zeitplan
  1. Phase der Vervielfältigung (Quelle bleibt online): 30 Minuten bis mehrere Stunden, je nach Datenbankgröße

  2. Validierungsphase (Quelle bleibt online): Stunden bis Tage nach Bedarf

  3. Umstellungsphase (kurze Ausfallzeit): Minuten für die Umleitung von Anwendungen zu EC2

Migrationsablauf für aktive RMAN-Duplizierung

Schritte zur benutzerdefinierten RDS-DB-Instance (Quelle):
  1. Benutzerdefinierte Amazon RDS-Automatisierung pausieren

  2. Überprüfen Sie die Datenbankarchitektur (ohne CDB oder CDB mit PDBs)

  3. Erstellen Sie eine Kennwortdatei und eine Parameterdatei aus der Quelldatenbank

  4. Kopieren Sie die Kennwortdatei und die Parameterdatei auf die EC2-Zielinstanz

  5. Stellen Sie sicher, dass die Quelldatenbank im Archiv-Log-Modus läuft

  6. Konfigurieren Sie tnsnames.ora auf dem RDS Custom DB-Server

Schritte der EC2-DB-Instance (Ziel):
  1. Bearbeiten Sie die Parameterdatei für EC2 (architekturspezifisch)

  2. Konfigurieren Sie tnsnames.ora auf EC2

  3. Konfigurieren Sie die Umgebung für die EC2-Instanz

  4. Konfigurieren Sie Oracle Listener auf EC2

  5. Starten Sie die Datenbank auf EC2 im Status NOMOUNT

Schritte zur RMAN-Duplizierung:
  1. Führen Sie eine aktive RMAN-Duplizierung durch

  2. Öffnen Sie die Datenbank (und die PDBs für Multitenant)

  3. Automatisches Öffnen von PDB konfigurieren (nur für mehrere Mandanten)

  4. Entfernen Sie spezifische Benutzer und Objekte für RDS Custom

  5. Erstellen Sie SPFILE und konfigurieren Sie den automatischen Start

  6. Setzen Sie die benutzerdefinierte Amazon RDS-Automatisierung an der Quelle fort (wenn sie aktiv bleibt)

Schritt 1: Unterbrechen Sie die benutzerdefinierte Amazon RDS-Automatisierung

Unterbrechen Sie den Automatisierungsmodus auf Ihrer RDS-Custom-Instance, bevor Sie mit den Migrationsschritten fortfahren, um sicherzustellen, dass die Automatisierung die RMAN-Aktivität nicht beeinträchtigt. Der Parameter --resume-full-automation-mode-minute (240 Minuten = 4 Stunden in diesem Beispiel) sollte auf der Grundlage Ihrer Datenbankgröße und der erwarteten Duplizierungszeit angepasst werden.

Wichtig: Das Anhalten der Automatisierung hat keinen Einfluss auf die Datenbankverfügbarkeit. Die Datenbank bleibt während des Duplizierungsvorgangs online und für Anwendungen zugänglich.

Beispiel
aws rds modify-db-instance \ --db-instance-identifier my-custom-instance \ --automation-mode all-paused \ --resume-full-automation-mode-minute 240 \ --region us-east-1 --query 'DBInstances[0].AutomationMode'

Überprüfen Sie den Automatisierungsstatus:

Beispiel
aws ds describe-db-instances \ --db-instance-identifier my-custom-instance \ --region us-east-1 \ --query 'DBInstances[0].AutomationMode'

Erwartete Ausgabe: "all-paused

Schritt 2: Passwort- und Parameterdateien erstellen

Erstellen Sie eine Passwortdatei mitorapwd. Rufen Sie das SYS-Passwort aus AWS Secrets Manager ab (gespeichert bei der Erstellung einer benutzerdefinierten RDS-Instanz).

Beispiel
# Non-CDB $ORACLE_HOME/bin/orapwd file=/rdsdbdata/config/orapwORCL password=<SYS_PASSWORD> entries=10 # Multitenant $ORACLE_HOME/bin/orapwd file=/rdsdbdata/config/orapwRDSCDB password=<SYS_PASSWORD> entries=10

Erstellen Sie eine Parameterdatei aus der Quelldatenbank:

Beispiel
sqlplus / as sysdba SQL> CREATE PFILE='/tmp/initORCL.ora' FROM SPFILE; -- Non-CDB SQL> CREATE PFILE='/tmp/initRDSCDB.ora' FROM SPFILE; -- Multitenant

Die generierte Parameterdatei wird Custom-specific RDS-Pfade und -Parameter enthalten. Zu den wichtigsten Parametern für Multitenant gehören:

  • enable_pluggable_database= TRUE (entscheidend für Mehrmandantenfähigkeit)

  • noncdb_compatible= TRUE (aus Gründen der Abwärtskompatibilität)

  • Datendateipfade für CDB$ROOTPDB$SEED, und alle PDBs

  • db_create_file_destund db_create_online_log_dest_1 für OMF

Schritt 3: Dateien auf EC2 übertragen

Wählen Sie Ihre bevorzugte Dateiübertragungsmethode. In dieser Anleitung wird Amazon S3 als Beispiele verwendet.

Amazon S3 verwenden:

Amazon S3 verwenden:

Beispiel Für Non-CDB:
# Copy files to Amazon S3 from the RDS Custom instance aws s3 cp /tmp/initORCL.ora s3://<YOUR_BUCKET>/ aws s3 cp /rdsdbdata/config/orapwORCL s3://<YOUR_BUCKET>/ # On EC2, download files aws s3 cp s3://<YOUR_BUCKET>/initORCL.ora $ORACLE_HOME/dbs/ aws s3 cp s3://<YOUR_BUCKET>/orapwORCL $ORACLE_HOME/dbs/
Beispiel Für Multitenant
# Copy files to Amazon S3 from the RDS Custom instance aws s3 cp /tmp/initRDSCDB.ora s3://<YOUR_BUCKET>/ aws s3 cp /rdsdbdata/config/orapwRDSCDB s3://<YOUR_BUCKET>/ # On EC2, download and rename files to use ORCL naming aws s3 cp s3://<YOUR_BUCKET>/initRDSCDB.ora $ORACLE_HOME/dbs/initORCL.ora aws s3 cp s3://<YOUR_BUCKET>/orapwRDSCDB $ORACLE_HOME/dbs/orapwORCL

Überprüfen Sie die Dateien auf EC2:

Beispiel
ls -l $ORACLE_HOME/dbs/initORCL.ora ls -l $ORACLE_HOME/dbs/orapwORCL

Schritt 4: Parameterdatei auf EC2 bearbeiten

Die Parameterdatei muss sorgfältig bearbeitet werden, um eine erfolgreiche Migration sicherzustellen. Dies ist einer der wichtigsten Schritte im Migrationsprozess.

Bearbeiten Sie $ORACLE_HOME/dbs/initORCL.ora die EC2-Instance und nehmen Sie die folgenden wichtigen Änderungen vor:

  1. Datenbanknamen aktualisieren: Ändern Sie für Multitenant alle Vorkommen von RDSCDB in ORCL

  2. Benutzerdefinierte RDS-Pfade in EC2-Pfade konvertieren: Ersetzen Sie /rdsdbdata/ durch//oracle/ u01/app

  3. Custom-specific Entfernen Sie RDS-Parameter
    • dg_broker_config_file1und dg_broker_config_file2 (falls vorhanden — zeigt an, dass ein Replikat existiert hat)

    • standby_file_management(falls vorhanden)

    • spfile(wir werden später ein neues SPFILE erstellen)

    • Alle log_archive_dest Parameter, die auf Standby-Ziele verweisen (nur log_archive_dest_1 für die lokale Archivierung beibehalten)

  4. Fügen Sie Konvertierungsparameter für Dateinamen hinzu (siehe unten)

  5. Passen Sie die Speicherparameter an Ihre EC2-Instance-Größe an (optional, aber empfohlen)

Grundlegendes zu Konvertierungsparametern für Dateinamen:

Die LOG_FILE_NAME_CONVERT Parameter DB_FILE_NAME_CONVERT und sind entscheidend für die RMAN-Duplizierung. Sie teilen RMAN mit, wie Quelldateipfade während des Duplizierungsvorgangs Zieldateipfade zugeordnet werden sollen. Ohne diese Parameter versucht RMAN, Dateien in denselben Pfaden wie die Quelle zu erstellen, was auf EC2 fehlschlägt.

Wesentliche Überlegungen:
  • Jeder Parameter akzeptiert Zeichenkettenpaare: Quellpfad gefolgt vom Zielpfad

  • In einem einzigen Parameter können mehrere Paare angegeben werden

  • Für Multitenant müssen Sie Pfade für CDB$ROOTPDB$SEED, und alle PDBs zuordnen

  • Die Reihenfolge der Paare ist wichtig — RMAN verarbeitet sie in der angegebenen Reihenfolge

  • Pfade unterscheiden zwischen Groß- und Kleinschreibung und müssen exakt übereinstimmen

Pfadzuordnungen:

Non-CDB:

Benutzerdefinierter Pfad für RDS

EC2-Pfad

Beschreibung

/rdsdbbin //orakel u01/app Oracle-Basis
/rdsdbdata/db/ORCL_A/datafile/ /u01/app/oracle/oradata/ORCL/datafile/ Datendateien
/rdsdbdata/db/ORCL_A/controlfile/ /u01/app/oracle/oradata/ORCL/controlfile/ Dateien kontrollieren
/rdsdbdata/db/ORCL_A/onlinelog/ /u01/app/oracle/oradata/ORCL/onlinelog/ Online-Redo-Protokolle
/rdsdbdata/db/ORCL_A/arch/ /u01/app/oracle/oradata/ORCL/arch/ Logs archivieren
/rdsdbdata/admin/ORCL/adump /u01/app/oracle/admin/ORCL/adump Audit-Dump
/rdsdbdata/log //orakel u01/app Diagnostisches Ziel
Multitenant

Benutzerdefinierter Pfad für RDS

EC2-Pfad

Beschreibung

/rdsdbbin /u01/app/oracle Oracle-Basis
/rdsdbdata/db/cdb/RDSCDB/datafile/ /u01/app/oracle/oradata/ORCL/cdb/datafile/ CDB-Root-Datendateien
/rdsdbdata/db/cdb/pdbseed/ /u01/app/oracle/oradata/ORCL/pdbseed/datafile/ PDB$SEEDDatendateien
/rdsdbdata/db/pdb/RDSCDB_A/ /u01/app/oracle/oradata/ORCL/pdb/datafile/ PDB-Datendateien (OMF mit GUID)
/rdsdbdata/db/cdb/RDSCDB_A/controlfile/ /u01/app/oracle/oradata/ORCL/controlfile/ Steuerdateien
/rdsdbdata/db/cdb/RDSCDB_A/onlinelog/ /u01/app/oracle/oradata/ORCL/onlinelog/ Online-Redo-Protokolle
/rdsdbdata/db/cdb/RDSCDB_A/arch/redolog /u01/app/oracle/oradata/ORCL/arch/ Logs archivieren
/rdsdbdata/admin/RDSCDB/adump /u01/app/oracle/admin/ORCL/adump Audit-Dump
/rdsdbdata/log /u01/app/oracle Diagnostisches Ziel

Konvertierungsparameter hinzufügen:

Beispiel Non-CDB:
*.DB_FILE_NAME_CONVERT='/rdsdbdata/db/ORCL_A/datafile/','/u01/app/oracle/oradata/ORCL/datafile/' *.LOG_FILE_NAME_CONVERT='/rdsdbdata/db/ORCL_A/onlinelog/','/u01/app/oracle/oradata/ORCL/onlinelog/'
Beispiel Mehrmandantenfähig (muss Zuordnungen für den CDB-Stamm und alle PDB$SEED PDB-Pfade enthalten):
*.DB_FILE_NAME_CONVERT='/rdsdbdata/db/cdb/RDSCDB/datafile/','/u01/app/oracle/oradata/ORCL/cdb/datafile/','/rdsdbdata/db/cdb/pdbseed/','/u01/app/oracle/oradata/ORCL/pdbseed/datafile/','/rdsdbdata/db/pdb/RDSCDB_A/','/u01/app/oracle/oradata/ORCL/pdb/datafile/' *.LOG_FILE_NAME_CONVERT='/rdsdbdata/db/cdb/RDSCDB_A/onlinelog/','/u01/app/oracle/oradata/ORCL/onlinelog/'

Wichtig: Stellen Sie bei Multitenant sicher, dass enable_pluggable_database = in der Parameterdatei vorhanden TRUE ist. RDS Custom verwendet OMF für PDB-Datendateien mit GUID-based Unterverzeichnissen — die Pfadzuweisung erledigt dies automatisch.

Vollständige Beispiel-Parameterdateien:

Beispiel Beispiel für eine Non-CDB Parameterdatei (initORCL.ora):
ORCL.__data_transfer_cache_size=0 ORCL.__db_cache_size=6039797760 ORCL.__inmemory_ext_roarea=0 ORCL.__inmemory_ext_rwarea=0 ORCL.__java_pool_size=0 ORCL.__large_pool_size=33554432 ORCL.__oracle_base='/u01/app/oracle' ORCL.__pga_aggregate_target=4966055936 ORCL.__sga_target=7449083904 ORCL.__shared_io_pool_size=134217728 ORCL.__shared_pool_size=1207959552 ORCL.__streams_pool_size=0 ORCL.__unified_pga_pool_size=0 *.archive_lag_target=300 *.audit_file_dest='/u01/app/oracle/admin/ORCL/adump' *.compatible='19.0.0' *.control_files='/u01/app/oracle/oradata/ORCL/controlfile/control-01.ctl' *.db_block_checking='MEDIUM' *.db_create_file_dest='/u01/app/oracle/oradata/ORCL' *.db_name='ORCL' *.db_recovery_file_dest_size=1073741824 *.db_unique_name='ORCL' *.dbfips_140=FALSE *.diagnostic_dest='/u01/app/oracle' *.filesystemio_options='setall' *.heat_map='OFF' *.job_queue_processes=50 *.local_listener='(address=(protocol=tcp)(host=)(port=1521))' *.log_archive_dest_1='location="/u01/app/oracle/oradata/ORCL/arch", valid_for=(ALL_LOGFILES,ALL_ROLES)' *.log_archive_format='-%s-%t-%r.arc' *.max_string_size='STANDARD' *.memory_max_target=12385852416 *.memory_target=12385852416 *.open_cursors=300 *.pga_aggregate_target=0 *.processes=1673 *.recyclebin='OFF' *.sga_target=0 *.undo_tablespace='UNDO_T1' *.use_large_pages='FALSE' *.DB_FILE_NAME_CONVERT='/rdsdbdata/db/ORCL_A/datafile/','/u01/app/oracle/oradata/ORCL/datafile/' *.LOG_FILE_NAME_CONVERT='/rdsdbdata/db/ORCL_A/onlinelog/','/u01/app/oracle/oradata/ORCL/onlinelog/'
Beispiel Beispiel für eine Multitenant-Parameterdatei (initORCL.ora):
ORCL.__data_transfer_cache_size=0 ORCL.__db_cache_size=6006243328 ORCL.__inmemory_ext_roarea=0 ORCL.__inmemory_ext_rwarea=0 ORCL.__java_pool_size=0 ORCL.__large_pool_size=33554432 ORCL.__oracle_base='/u01/app/oracle' ORCL.__pga_aggregate_target=4966055936 ORCL.__sga_target=7415529472 ORCL.__shared_io_pool_size=134217728 ORCL.__shared_pool_size=1207959552 ORCL.__streams_pool_size=0 ORCL.__unified_pga_pool_size=0 *.archive_lag_target=300 *.audit_file_dest='/u01/app/oracle/admin/ORCL/adump' *.compatible='19.0.0' *.control_files='/u01/app/oracle/oradata/ORCL/controlfile/control-01.ctl' *.db_block_checking='MEDIUM' *.db_create_file_dest='/u01/app/oracle/oradata/ORCL/pdb/datafile' *.db_create_online_log_dest_1='/u01/app/oracle/oradata/ORCL' *.db_name='ORCL' *.db_recovery_file_dest_size=1073741824 *.db_unique_name='ORCL' *.dbfips_140=FALSE *.diagnostic_dest='/u01/app/oracle' *.enable_pluggable_database=TRUE *.filesystemio_options='setall' *.heat_map='OFF' *.job_queue_processes=50 *.local_listener='(address=(protocol=tcp)(host=)(port=1521))' *.log_archive_dest_1='location="/u01/app/oracle/oradata/ORCL/arch", valid_for=(ALL_LOGFILES,ALL_ROLES)' *.log_archive_format='-%s-%t-%r.arc' *.max_string_size='STANDARD' *.memory_max_target=12361688064 *.memory_target=12361688064 *.noncdb_compatible=TRUE *.open_cursors=300 *.pga_aggregate_target=0 *.processes=1670 *.recyclebin='OFF' *.sga_target=0 *.undo_tablespace='UNDO_T1' *.use_large_pages='FALSE' *.DB_FILE_NAME_CONVERT='/rdsdbdata/db/cdb/RDSCDB/datafile/','/u01/app/oracle/oradata/ORCL/cdb/datafile/','/rdsdbdata/db/cdb/pdbseed/','/u01/app/oracle/oradata/ORCL/pdbseed/datafile/','/rdsdbdata/db/pdb/RDSCDB_A/','/u01/app/oracle/oradata/ORCL/pdb/datafile/' *.LOG_FILE_NAME_CONVERT='/rdsdbdata/db/cdb/RDSCDB_A/onlinelog/','/u01/app/oracle/oradata/ORCL/onlinelog/'
Erläuterungen zu den wichtigsten Parametern:
  • enable_pluggable_database=TRUE: Erforderlich für Multitenant-CDB. Dieser Parameter aktiviert die Funktion für austauschbare Datenbanken.

  • noncdb_compatible=TRUE: Wird von RDS Custom aus Gründen der Abwärtskompatibilität festgelegt. Kann je nach Ihren Anforderungen beibehalten oder entfernt werden.

  • db_create_file_dest: Gibt den Standardspeicherort für Oracle Managed Files (OMF) an. Bei Multitenant verweist dies auf das PDB-Datendateiverzeichnis.

  • db_create_online_log_dest_1: Gibt den Speicherort für Online-Redo-Logs an, wenn OMF verwendet wird.

  • DB_FILE_NAME_CONVERT: Kritisch für die RMAN-Duplizierung. Ordnet Quelldatendateipfade Zielpfaden zu.

  • LOG_FILE_NAME_CONVERT: Ordnet Quell-Redo-Log-Pfade Zielpfaden zu.

  • memory_targetundmemory_max_target: Passen Sie diese basierend auf Ihrem EC2-Instance-Speicher an. Die angegebenen Werte sind Beispiele.

  • processes: Maximale Anzahl von Betriebssystemprozessen, die eine Verbindung zu Oracle herstellen können. Passen Sie es an Ihre Arbeitslast an.

Richtlinien zur Speichergröße:

Bei der Anpassung der Speicherparameter für Ihre EC2-Instance:

EC2-Instance-Speicher

Empfohlenes memory_target

Empfohlenes memory_max_target

16 GB 12 GB (12884901888 Byte) 14 GB (15032385536 Byte)
32 GB 24 GB (25769803776 Byte) 28 GB (30064771072 Byte)
64 GB 48 GB (51539607552 Byte) 56 GB (60129542144 Byte)
128 GB 96 GB (103079215104 Byte) 112 GB (120259084288 Byte)

Lassen Sie etwa 20-25% des Systemspeichers für das Betriebssystem und andere Prozesse übrig.

Schritt 5: TNS und Listener konfigurieren

Fügen Sie auf beiden Instanzen TNS-Einträge hinzu zu: tnsnames.ora

Beispiel Non-CDB:
DB_SOURCE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <RDS_CUSTOM_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL))) DB_TARGET = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <EC2_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL)))
Beispiel Mehrmandantenfähig:
DB_SOURCE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <RDS_CUSTOM_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = RDSCDB))) DB_TARGET = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <EC2_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL)))
Beispiel Listener auf EC2 konfigurieren (): $ORACLE_HOME/network/admin/listener.ora
LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <EC2_IP>)(PORT = 1521))) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = ORCL) (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1) (SID_NAME = ORCL)))
Beispiel Listener starten:
lsnrctl start
Anmerkung

Bei der aktiven RMAN-Duplizierung stellen die TNS-Einträge über SID (nicht SERVICE_NAME) eine Verbindung zur Datenbankinstanz her. Bei Mehrmandantenfähigkeit wird eine Verbindung zur CDB hergestellt, und RMAN dupliziert automatisch alle PDBs.

Schritt 6: Starten Sie die Datenbank in EC2 NOMOUNT

Beispiel
export ORACLE_SID=ORCL export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH sqlplus / as sysdba SQL> STARTUP NOMOUNT PFILE='$ORACLE_HOME/dbs/initORCL.ora';
BeispielÜberprüfen Sie die Parameter:
SQL> SHOW PARAMETER db_name SQL> SHOW PARAMETER control_files SQL> SHOW PARAMETER enable_pluggable_database -- For multitenant

Schritt 7: Führen Sie eine aktive RMAN-Duplizierung durch

Die aktive RMAN-Duplizierung kopiert die Datenbank von der aktiven, laufenden Quelle auf das Ziel. Die Quelldatenbank bleibt während des gesamten Vorgangs online und für Anwendungen zugänglich.

Connect RMAN sowohl mit der Quell- als auch mit der Zielinstanz:

Beispiel
rman target sys/<password>@DB_SOURCE auxiliary sys/<password>@DB_TARGET
Beispiel Erwartete Ausgabe für Nicht-CDB:
Recovery Manager: Release 19.0.0.0.0 - Production connected to target database: ORCL (DBID=4089929259) connected to auxiliary database: ORCL (not mounted)
Beispiel Erwartete Ausgabe für Multitenant:
Recovery Manager: Release 19.0.0.0.0 - Production connected to target database: RDSCDB (DBID=4089929259) connected to auxiliary database: ORCL (not mounted)
Beispiel Führen Sie den aktiven Duplikationsbefehl aus:
RMAN> DUPLICATE DATABASE TO 'ORCL' FROM ACTIVE DATABASE NOFILENAMECHECK;
Anmerkung
  • Die Quelle bleibt online: Die Quelldatenbank bedient während der Duplizierung weiterhin Anwendungsanfragen

  • Für Nicht-CDB: Dadurch wird die gesamte Datenbank dupliziert, während sie online bleibt

  • Für mehrere Mandanten: Dadurch wird die gesamte CDB einschließlichCDB$ROOT, und aller PDBs in einem einzigen Vorgang dupliziertPDB$SEED, während die Quelle online bleibt

  • NOFILENAMECHECK: Ermöglicht es RMAN, fortzufahren, auch wenn sich die Dateinamen zwischen Quelle und Ziel unterscheiden

  • Dauer: Hängt von der Datenbankgröße und der Netzwerkbandbreite ab. Bei einer 100-GB-Datenbank sollten Sie mit 30-60 Minuten rechnen

  • Auswirkungen auf das Netzwerk: Hohe Auslastung der Netzwerkbandbreite während der Duplizierung, aber der Zugriff auf die Quelldatenbank bleibt bestehen

Der aktive RMAN-Duplizierungsprozess umfasst mehrere Phasen:
  1. Verbindung zu Quell- und Zieldatenbanken herstellen

  2. Eine SPFILE aus dem Speicher auf dem Ziel erstellen

  3. Die Steuerdatei auf dem Ziel wiederherstellen

  4. Mounten der Zieldatenbank

  5. Kopieren aller Datendateien von der Quelle zum Ziel über das Netzwerk (Quelle bleibt online)

  6. Die Zieldatenbank wird wiederhergestellt

  7. Öffnen der Zieldatenbank mit RESETLOGS

Während der Duplizierung gilt für die Quelldatenbank:
  • Bleibt im Modus READ WRITE

  • Nimmt weiterhin Verbindungen an

  • Verarbeitet Transaktionen normal

  • Generiert Redo-Logs normal

  • Ist für Anwendungen uneingeschränkt zugänglich

BeispielÜberwachen Sie den Fortschritt in einer anderen Sitzung:
SQL> SELECT sid, serial#, sofar, totalwork, ROUND(sofar/totalwork*100,2) pct_complete FROM v$session_longops WHERE totalwork > 0 AND sofar <> totalwork;

Detaillierte Überwachung und Fehlerbehebung bei der RMAN-Duplizierung:

Während der RMAN-Duplizierung können Sie ihren Fortschritt mit verschiedenen Methoden überwachen:

  1. Überwachen Sie die RMAN-Ausgabe:

    In der RMAN-Sitzung werden detaillierte Fortschrittsinformationen angezeigt, darunter:

    • Kanalzuweisung

    • Fortschritt beim Kopieren der Datendatei

    • Voraussichtlicher Fertigstellungszeitraum

    • Verarbeitete Bytes

    channel ORA_AUX_DISK_1: starting datafile copy input datafile file number=00001 name=/rdsdbdata/db/ORCL_A/datafile/system01.dbf output file name=/u01/app/oracle/oradata/ORCL/datafile/system01.dbf tag=TAG20260303T120000 channel ORA_AUX_DISK_1: datafile copy complete, elapsed time: 00:05:23 channel ORA_AUX_DISK_1: starting datafile copy input datafile file number=00003 name=/rdsdbdata/db/ORCL_A/datafile/sysaux01.dbf output file name=/u01/app/oracle/oradata/ORCL/datafile/sysaux01.dbf tag=TAG20260303T120000
    Beispiel Beispielausgabe:
    channel ORA_AUX_DISK_1: starting datafile copy input datafile file number=00001 name=/rdsdbdata/db/ORCL_A/datafile/system01.dbf output file name=/u01/app/oracle/oradata/ORCL/datafile/system01.dbf tag=TAG20260303T120000 channel ORA_AUX_DISK_1: datafile copy complete, elapsed time: 00:05:23 channel ORA_AUX_DISK_1: starting datafile copy input datafile file number=00003 name=/rdsdbdata/db/ORCL_A/datafile/sysaux01.dbf output file name=/u01/app/oracle/oradata/ORCL/datafile/sysaux01.dbf tag=TAG20260303T120000
  2. Überwachen Sie lang andauernde Operationen:

    Beispiel In einer separaten SQL*Plus-Sitzung auf der EC2-Zielinstanz:
    SQL> SELECT sid, serial#, opname, sofar, totalwork, ROUND(sofar/totalwork*100,2) pct_complete, time_remaining, elapsed_seconds FROM v$session_longops WHERE totalwork > 0 AND sofar <> totalwork ORDER BY start_time;
    Diese Abfrage zeigt:
    • opname: Name der Operation (z. B. „RMAN: vollständige Datendateiwiederherstellung“)

    • sofar: Bisher verarbeitete Blöcke

    • totalwork: Gesamtzahl der zu verarbeitenden Blöcke

    • pct_complete: Prozentsatz abgeschlossen

    • time_remaining: Geschätzte verbleibende Sekunden

    • elapsed_seconds: Bisher verstrichene Zeit

  3. RMAN-Kanäle überwachen:

    Beispiel
    SQL> SELECT sid, serial#, context, sofar, totalwork, ROUND(sofar/totalwork*100,2) pct_complete FROM v$session_longops WHERE opname LIKE 'RMAN%' AND totalwork > 0 AND sofar <> totalwork;
  4. Überprüfen Sie das Warnungsprotokoll:

    BeispielÜberwachen Sie das Alert-Log auf der EC2-Zielinstanz auf Fehler oder Warnungen:
    tail -f $ORACLE_BASE/diag/rdbms/orcl/ORCL/trace/alert_ORCL.log
    Häufige Probleme bei der RMAN-Duplizierung:
    • Netzwerk-Timeout

      RMAN-03009: failure of duplicate command on ORA_AUX_DISK_1 channel ORA-03135: connection lost contact

      Lösung: Erhöhen Sie die Netzwerk-Timeout-Werte in beiden sqlnet.ora Fällen:

      SQLNET.RECV_TIMEOUT=600 SQLNET.SEND_TIMEOUT=600
    • Nicht genügend Speicherplatz auf dem Ziel

      RMAN-03009: failure of duplicate command ORA-19504: failed to create file "/u01/app/oracle/oradata/ORCL/datafile/users01.dbf" ORA-27040: file create error, unable to create file Linux-x86_64 Error: 28: No space left on device

      Lösung: Überprüfen Sie den verfügbaren Speicherplatz und fügen Sie mehr EBS-Volume-Kapazität hinzu:

      df -h /u01/app/oracle/oradata
    • Fehler in der Parameterdatei

      RMAN-05021: this configuration cannot be used RMAN-06004: ORACLE error from auxiliary database: ORA-01261: Parameter db_create_file_dest destination string cannot be translated

      Lösung: Stellen Sie sicher, dass alle Verzeichnisse in der Parameterdatei existieren und über die entsprechenden Berechtigungen verfügen.

    • Die Passwortdatei stimmt nicht überein

      RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of duplicate command at 03/03/2026 12:00:00 RMAN-06136: ORACLE error from auxiliary database: ORA-01017: invalid username/password; logon denied

      Lösung: Stellen Sie sicher, dass die Passwortdatei auf dem Ziel mit der Quelle übereinstimmt und den richtigen Namen hat (orapwORCL).

Schritt 8: Öffnen Sie PDBs (nur für mehrere Mandanten)

Nach Abschluss der RMAN-Duplizierung ist die CDB auf EC2 im READ WRITE Modus geöffnet, aber alle PDBs befinden sich im Status. MOUNTED Dieses Verhalten ist zu erwarten — Sie müssen sie manuell öffnen.

Überprüfen Sie den aktuellen PDB-Status:

SQL> SELECT con_id, name, open_mode FROM v$pdbs;

Erwartete Ausgabe (Beispiel mit einer benannten ORCLDB PDB):

CON_ID NAME OPEN_MODE ---------- ------------------------------ ---------- 2 PDB$SEED READ ONLY 3 ORCLDB MOUNTED

Alle PDBs öffnen:

SQL> ALTER PLUGGABLE DATABASE ALL OPEN; Pluggable database altered.

Stellen Sie sicher, dass alle PDBs jetzt im READ WRITE folgenden Modus geöffnet sind:

SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs;

Erwartete Ausgabe:

CON_ID NAME OPEN_MODE RES ---------- ------------------------------ ---------- --- 2 PDB$SEED READ ONLY NO 3 ORCLDB READ WRITE NO

Konfigurieren Sie das automatische Öffnen beim Start mit der Save-State-Methode (empfohlen für Oracle 19c):

SQL> ALTER PLUGGABLE DATABASE ALL SAVE STATE; Pluggable database altered.

Dadurch wird Oracle angewiesen, sich den aktuellen Öffnungsstatus von PDBs zu merken und ihn beim Start der CDB wiederherzustellen.

Überprüfen Sie den gespeicherten Status:

SQL> SELECT con_name, instance_name, state FROM dba_pdb_saved_states;

Stellen Sie sicher, dass die PDB-Dienste beim Listener registriert sind:

lsnrctl services

Die erwartete Ausgabe sollte Dienste für die CDB und jede PDB enthalten. Wenn Dienste nicht angezeigt werden:

SQL> ALTER SYSTEM REGISTER;

Dann überprüfen Sie erneut mitlsnrctl services.

Schritt 9: Entfernen Sie benutzerdefinierte RDS-Objekte

Da es sich jetzt um eine selbstverwaltete Datenbank auf EC2 handelt, sollten Sie Custom-specific RDS-Benutzer und -Objekte entfernen. Der Bereinigungsprozess unterscheidet sich zwischen Architekturen, die keine CDB sind, und Architekturen mit mehreren Mandanten.

Wichtig

Bevor Sie RDS-specific Benutzer und Tablespaces löschen, stellen Sie sicher, dass keine Anwendungsobjekte unter diesen Schemas existieren:

SQL> SELECT owner, object_type, COUNT(*) FROM dba_objects WHERE owner IN ('RDSADMIN', 'RDS_DATAGUARD') AND object_name NOT LIKE 'RDS%' AND object_name NOT LIKE 'SYS_%' GROUP BY owner, object_type;

Wenn Anwendungsobjekte gefunden werden, migrieren Sie sie in die entsprechenden Anwendungsschemas, bevor Sie fortfahren.

Beispiel Non-CDB:
SQL> DROP USER RDSADMIN CASCADE; SQL> DROP USER RDS_DATAGUARD CASCADE; SQL> DROP DIRECTORY OPATCH_INST_DIR; SQL> DROP DIRECTORY OPATCH_LOG_DIR; SQL> DROP DIRECTORY OPATCH_SCRIPT_DIR; SQL> DROP TABLESPACE RDSADMIN INCLUDING CONTENTS AND DATAFILES; -- Verify removal SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%';

Erwartete Ausgabe: no rows selected

Mehrmandantenfähig:

In einer Umgebung mit mehreren Mandanten erstellt RDS Custom gemeinsame Benutzer, CDB$ROOT die in allen PDBs sichtbar sind. Sie müssen aufräumen von. CDB$ROOT

-- Connect to CDB$ROOT SQL> SHOW CON_NAME; -- Check for RDS-specific common users (including C## prefixed users) SQL> SELECT username, common, con_id FROM cdb_users WHERE username LIKE '%RDS%' OR username LIKE 'C##RDS%' ORDER BY username; -- Drop non-common users SQL> DROP USER RDSADMIN CASCADE; SQL> DROP USER RDS_DATAGUARD CASCADE; -- If any C## common users exist -- SQL> DROP USER C##RDSADMIN CASCADE ; -- Drop directories and tablespace SQL> DROP DIRECTORY OPATCH_INST_DIR; SQL> DROP DIRECTORY OPATCH_LOG_DIR; SQL> DROP DIRECTORY OPATCH_SCRIPT_DIR; SQL> DROP TABLESPACE RDSADMIN INCLUDING CONTENTS AND DATAFILES; -- Verify removal from CDB$ROOT SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%'; -- Verify removal from each PDB SQL> ALTER SESSION SET CONTAINER = <PDB_NAME>; SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%';

Erwartete Ausgabe für alle Abfragen: no rows selected

Schritt 10: Konfigurieren Sie den automatischen Start

ErstellenSPFILE:

SQL> CREATE SPFILE FROM PFILE='$ORACLE_HOME/dbs/initORCL.ora'; SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP;

Stellen Sie bei Multitenant sicher, dass die PDBs geöffnet sind:

SQL> ALTER PLUGGABLE DATABASE ALL OPEN;

Bearbeiten: /etc/oratab

ORCL:/u01/app/oracle/product/19.0.0/dbhome_1:Y

Schritt 11: Endgültige Validierung

Beispiel Non-CDB:
SQL> SELECT name, open_mode, log_mode FROM v$database; SQL> SELECT SUM(bytes)/1024/1024/1024 AS size_gb FROM dba_data_files; SQL> SELECT COUNT(*) FROM dba_objects WHERE status = 'INVALID';
Beispiel Mehrmandantenfähig:
SQL> SELECT name, open_mode, log_mode, cdb FROM v$database; SQL> SELECT con_id, name, open_mode FROM v$pdbs; SQL> SELECT SUM(bytes)/1024/1024/1024 AS total_size_gb FROM cdb_data_files; SQL> SELECT con_id, COUNT(*) FROM cdb_objects WHERE status = 'INVALID' GROUP BY con_id;
Test application connectivity: # Non-CDB sqlplus <app_user>/<password>@<EC2_IP>:1521/ORCL # Multitenant (connect to PDB) sqlplus <app_user>/<password>@<EC2_IP>:1521/<PDB_NAME>

Schritt 12: Setzen Sie die benutzerdefinierte RDS-Automatisierung fort

aws rds modify-db-instance \ --db-instance-identifier my-custom-instance \ --automation-mode full \ --region us-east-1

Option 2: Physische Migration mit Oracle Data Guard

Dieser Abschnitt enthält detaillierte Schritte für die Migration Ihrer Oracle-Datenbank von RDS Custom for Oracle zu EC2 mithilfe von Oracle Data Guard. Diese Methode eignet sich für Migrationen, die nur minimale Ausfallzeiten erfordern.

Wann sollte Oracle Data Guard verwendet werden

Wählen Sie Oracle Data Guard, wenn:
  • Sie benötigen minimale Ausfallzeiten (Sekunden bis Minuten für den Switchover)

  • Sie migrieren produktive oder unternehmenskritische Datenbanken

  • Vor der Umstellung benötigen Sie eine kontinuierliche Synchronisation

  • Sie benötigen eine integrierte Fallback-Funktion

  • Sie müssen die Zieldatenbank testen, bevor Sie mit der Migration beginnen

Überblick über Oracle Data Guard

Oracle Data Guard verwaltet eine synchronisierte Standby-Datenbank, indem es kontinuierlich Redo-Logs aus der Primärdatenbank versendet und anwendet. Wenn Sie bereit sind, die Migration abzuschließen, führen Sie einen Switchover durch, der den EC2-Standby mit minimaler Ausfallzeit (Sekunden bis Minuten) zum Primärserver hochstuft. Bei Datenbanken mit mehreren Mandanten schützt Data Guard automatisch die gesamte CDB, einschließlich aller PDBs. Von einem beliebigen PDB generiertes Redo wird in den Standby-Modus übertragen und auf den entsprechenden PDB im Standby-Modus angewendet.

Migrations-Workflow für Oracle Data Guard

Schritte der benutzerdefinierten RDS-DB-Instance (primär):
  1. Benutzerdefinierte Amazon RDS-Automatisierung pausieren

  2. Überprüfen Sie die Datenbankarchitektur (ohne CDB oder CDB mit PDBs)

  3. Vergewissern Sie sich, dass die Primärdatenbank im Archivprotokollmodus läuft und aktiviert ist FORCE_LOGGING

  4. Erstellen Sie eine Passwortdatei

  5. Führen Sie eine RMAN-Online-Sicherung der Primärdatenbank durch (oder verwenden Sie aktive Duplizierung)

  6. Erstellen Sie eine Parameterdatei aus der Quelldatenbank

  7. Kopieren Sie die Backup-Sätze, die Parameterdatei und die Kennwortdatei auf die EC2-Zielinstanz

Schritte der EC2-DB-Instance (Standby):
  1. Kopieren Sie alle Dateien von der Quelle zur EC2-Instance

  2. Kopieren Sie die Passwortdatei auf die EC2-Instance

  3. Bearbeiten Sie die Parameterdatei für EC2 (architekturspezifisch)

  4. Erstellen Sie die Serverparameterdatei aus der Parameterdatei

  5. Stellen Sie die Standby-Kontrolldatei und die Datenbank wieder her

Schritte zur Konfiguration von Data Guard:
  1. Konfigurieren Sie Oracle-Listener auf beiden Instanzen

  2. Konfigurieren Sie tnsnames.ora auf beiden Instanzen

  3. Starten Sie den Oracle Data Guard Broker auf beiden Instanzen (optional, aber empfohlen)

  4. Aktivieren Sie die Oracle Data Guard-Konfiguration

  5. Konfigurieren Sie fal_server und fal_client auf der EC2-Standby-Instanz

  6. Konfigurieren Sie die Standby-Redo-Log-Dateien auf beiden Instanzen

  7. Stellen Sie die Standby-Instanz wieder her

  8. Führen Sie den manuellen Switchover durch

  9. Öffnen Sie die Datenbank (und die PDBs für Multitenant)

  10. Automatisches Öffnen von PDB konfigurieren (nur für mehrere Mandanten)

  11. Entfernen Sie spezifische Benutzer und Objekte für RDS Custom

  12. Erstellen Sie SPFILE und konfigurieren Sie den automatischen Start

Schritt 1: Unterbrechen Sie die benutzerdefinierte Amazon RDS-Automatisierung

Unterbrechen Sie den Automatisierungsmodus auf Ihrer RDS Custom-Instance. Der --resume-full-automation-mode-minute Parameter sollte auf der Grundlage Ihrer Datenbankgröße und der erwarteten Data Guard-Setup-Zeit angepasst werden.

aws rds modify-db-instance \ --db-instance-identifier my-custom-instance \ --automation-mode all-paused \ --resume-full-automation-mode-minute 480 \ --region us-east-1

Überprüfen Sie den Automatisierungsstatus:

aws rds describe-db-instances \ --db-instance-identifier my-custom-instance \ --region us-east-1 \ --query 'DBInstances[0].AutomationMode'

Erwartete Ausgabe: "all-paused

Schritt 2: Bestätigen Sie den Archivprotokollmodus und FORCE_LOGGING

Oracle Data Guard erfordert, dass sich die Primärdatenbank im Archiv-Log-Modus befindet und die erzwungene Protokollierung aktiviert ist:

sqlplus / as sysdba SQL> SELECT log_mode, force_logging FROM v$database;

Erwartete Ausgabe:

LOG_MODE FORCE_LOGGING ------------ ------------- ARCHIVELOG YES

Wenn die erzwungene Protokollierung nicht aktiviert ist, führen Sie Folgendes aus:

SQL> ALTER DATABASE FORCE LOGGING;

Schritt 3: Passwort- und Parameterdateien erstellen

Erstellen Sie eine Passwortdatei mitorapwd. Rufen Sie das SYS-Passwort von AWS Secrets Manager ab.

# Non-CDB $ORACLE_HOME/bin/orapwd file=/rdsdbdata/config/orapwORCL password=<SYS_PASSWORD> entries=10 # Multitenant $ORACLE_HOME/bin/orapwd file=/rdsdbdata/config/orapwRDSCDB password=<SYS_PASSWORD> entries=10

Erstellen Sie eine Parameterdatei aus der Quelldatenbank:

sqlplus / as sysdba SQL> CREATE PFILE='/tmp/initORCL.ora' FROM SPFILE; -- Non-CDB SQL> CREATE PFILE='/tmp/initRDSCDB.ora' FROM SPFILE; -- Multitenant

Schritt 4: Führen Sie ein RMAN-Backup durch oder verwenden Sie aktive Duplizierung

Sie haben zwei Möglichkeiten, die Standby-Datenbank zu erstellen:

Option A: RMAN-Online-Backup (für die meisten Szenarien empfohlen)

Erstellen Sie ein Backup-Verzeichnis und sichern Sie die Datenbank:

mkdir -p /rdsdbdata/backup rman target / RMAN> run { backup as compressed backupset filesperset 2 format '/rdsdbdata/backup/db_%U' database; sql 'alter system archive log current'; backup as compressed backupset filesperset 50 format '/rdsdbdata/backup/arch_%U' archivelog all; } RMAN> backup current controlfile for standby format '/rdsdbdata/backup/standby.ctl';
Anmerkung

Bei Multitenant sichert das Datenbankschlüsselwort automatisch die gesamte CDB einschließlich aller PDBs.

Option B: Aktive Duplizierung (alternative Methode)

Überspringen Sie den Backup-Schritt und verwenden Sie die aktive RMAN-Duplizierung, um den Standby-Modus direkt über das Netzwerk aufzubauen. Dadurch werden Backup-Speicher und Dateiübertragungen überflüssig. Führen Sie nach der Konfiguration von TNS und Listenern (siehe unten) Folgendes aus:

RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER;

Diese Anleitung konzentriert sich auf Option A (Backup-basiert), aber Option B ist eine gültige Alternative.

Schritt 5: Dateien nach EC2 übertragen

Wählen Sie Ihre bevorzugte Dateiübertragungsmethode. In dieser Anleitung wird Amazon S3 als Beispiele verwendet.

Amazon S3 verwenden:

Beispiel Für Non-CDB:
# Copy files to Amazon S3 from the RDS Custom instance aws s3 cp /rdsdbdata/backup s3://<YOUR_BUCKET>/ --recursive aws s3 cp /tmp/initORCL.ora s3://<YOUR_BUCKET>/ aws s3 cp /rdsdbdata/config/orapwORCL s3://<YOUR_BUCKET>/ # On EC2, download files aws s3 cp s3://<YOUR_BUCKET>/backup /u01/app/oracle/backup/ --recursive aws s3 cp s3://<YOUR_BUCKET>/initORCL.ora $ORACLE_HOME/dbs/ aws s3 cp s3://<YOUR_BUCKET>/orapwORCL $ORACLE_HOME/dbs/
Beispiel Für Multitenant:
# Copy files to Amazon S3 from the RDS Custom instance aws s3 cp /rdsdbdata/backup s3://<YOUR_BUCKET>/ --recursive aws s3 cp /tmp/initRDSCDB.ora s3://<YOUR_BUCKET>/ aws s3 cp /rdsdbdata/config/orapwRDSCDB s3://<YOUR_BUCKET>/ # On EC2, download and rename files to use ORCL naming aws s3 cp s3://<YOUR_BUCKET>/backup /u01/app/oracle/backup/ --recursive aws s3 cp s3://<YOUR_BUCKET>/initRDSCDB.ora $ORACLE_HOME/dbs/initORCL.ora aws s3 cp s3://<YOUR_BUCKET>/orapwRDSCDB $ORACLE_HOME/dbs/orapwORCL

Schritt 6: Parameterdatei auf EC2 bearbeiten

Bearbeiten Sie $ORACLE_HOME/dbs/initORCL.ora die EC2-Instance und nehmen Sie die folgenden wichtigen Änderungen vor:

  1. Datenbanknamen aktualisieren: Ändern Sie für Multitenant alle Vorkommen von in RDSCDB ORCL

  2. Ändern Sie db_unique_name: Von (oder) zu ORCL_A RDSCDB_A ORCL_B

  3. Benutzerdefinierte RDS-Pfade in EC2-Pfade konvertieren: Ersetzen durch /rdsdbdata/ /u01/app/oracle/

  4. Custom-specific RDS-Parameter entfernen
    • dg_broker_config_file1und dg_broker_config_file2 (falls vorhanden)

    • standby_file_management(falls vorhanden)

    • spfile(wir werden SPFILE später ein neues erstellen)

    • Alle log_archive_dest Parameter, die auf Standby-Ziele verweisen

  5. Passen Sie die Speicherparameter an Ihre EC2-Instance-Größe an (optional, aber empfohlen)

Pfadzuordnungen:

Non-CDB:
  • /rdsdbdata/db/ORCL_A/datafile//u01/app/oracle/oradata/ORCL/datafile/

  • /rdsdbdata/db/ORCL_A/controlfile//u01/app/oracle/oradata/ORCL/controlfile/

  • /rdsdbdata/db/ORCL_A/onlinelog//u01/app/oracle/oradata/ORCL/onlinelog/

  • /rdsdbdata/admin/ORCL/adump/u01/app/oracle/admin/ORCL/adump

Mehrmandantenfähig:
  • /rdsdbdata/db/cdb/RDSCDB/datafile//u01/app/oracle/oradata/ORCL/cdb/datafile/

  • /rdsdbdata/db/cdb/pdbseed//u01/app/oracle/oradata/ORCL/pdbseed/datafile/

  • /rdsdbdata/db/pdb/RDSCDB_A//u01/app/oracle/oradata/ORCL/pdb/datafile/

  • /rdsdbdata/db/cdb/RDSCDB_A/controlfile//u01/app/oracle/oradata/ORCL/controlfile/

  • /rdsdbdata/admin/RDSCDB/adump/u01/app/oracle/admin/ORCL/adump

Wichtig: Stellen Sie bei Multitenant sicher, dass enable_pluggable_database = in der Parameterdatei vorhanden TRUE ist.

Schritt 7: Standby-Datenbank erstellen SPFILE und wiederherstellen

Starten Sie die Instanz und erstellen Sie SPFILE:

sqlplus / as sysdba SQL> STARTUP NOMOUNT PFILE='$ORACLE_HOME/dbs/initORCL.ora'; SQL> CREATE SPFILE='/u01/app/oracle/admin/ORCL/pfile/spfileORCL.ora' FROM PFILE='$ORACLE_HOME/dbs/initORCL.ora'; SQL> SHUTDOWN IMMEDIATE;

Symbolischen Link erstellen:

ln -sfn /u01/app/oracle/admin/ORCL/pfile/spfileORCL.ora $ORACLE_HOME/dbs/spfileORCL.ora

Starten Sie die Instanz und stellen Sie sie wieder her:

SQL> STARTUP NOMOUNT; rman target /

Wenn sich Backup-Dateien in einem anderen Pfad als der Quellpfad befinden, katalogisieren Sie sie zuerst:

RMAN> catalog start with '/u01/app/oracle/backup/';

Stellen Sie die Standby-Kontrolldatei wieder her und hängen Sie sie bereit:

RMAN> restore standby controlfile from '/u01/app/oracle/backup/standby.ctl'; RMAN> alter database mount;

Wenn sich die Pfade der Datendateien unterscheiden (z. B. bei Verwendung von ASM), verwenden SieSET NEWNAME:

RMAN> run { set newname for database to '+DATA/%b'; restore database; switch datafile all; }

Andernfalls stellen Sie einfach Folgendes wieder her:

RMAN> restore database;

Stellen Sie die Datenbank auf die letzte verfügbare Sequenz wieder her:

RMAN> list backup of archivelog all; RMAN> recover database until sequence <LAST_SEQ + 1>;
Anmerkung

Bei Mehrmandantenfähigkeit stellt RMAN automatisch alle PDBs wieder her und stellt sie wieder her. Sie müssen nicht jede PDB einzeln wiederherstellen.

Schritt 8: TNS und Listener konfigurieren

Fügen Sie auf beiden Instanzen TNS-Einträge hinzu zu: tnsnames.ora

Beispiel Non-CDB:
ORCL_A = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <RDS_CUSTOM_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL))) ORCL_B = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <EC2_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL)))
Beispiel Mehrmandantenfähig:
RDSCDB_A = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <RDS_CUSTOM_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = RDSCDB))) ORCL_B = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <EC2_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL)))

Konfigurieren Sie Listener auf beiden Instanzen. Fügen Sie auf RDS Custom Folgendes hinzu: listener.ora

Beispiel Für Non-CDB:
SID_LIST_L_ORCL_DG=(SID_LIST = (SID_DESC = (SID_NAME = ORCL)(GLOBAL_DBNAME = ORCL) (ORACLE_HOME = /rdsdbbin/oracle.19.custom.r1.EE.1))) L_ORCL_DG=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(PORT = 1521)(HOST = <RDS_CUSTOM_IP>)))
Beispiel Für Multitenant:
SID_LIST_L_RDSCDB_DG=(SID_LIST = (SID_DESC = (SID_NAME = RDSCDB)(GLOBAL_DBNAME = RDSCDB) (ORACLE_HOME = /rdsdbbin/oracle.19.custom.r1.EE-CDB.1))) L_RDSCDB_DG=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(PORT = 1521)(HOST = <RDS_CUSTOM_IP>)))

Starten Sie den Listener:

$ORACLE_HOME/bin/lsnrctl start L_ORCL_DG # or L_RDSCDB_DG for multitenant

Erstellen Sie auf EC2: $ORACLE_HOME/network/admin/listener.ora

SID_LIST_L_ORCL_DG=(SID_LIST = (SID_DESC = (SID_NAME = ORCL)(GLOBAL_DBNAME = ORCL) (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1))) L_ORCL_DG=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(PORT = 1521)(HOST = <EC2_IP>)))

Starten Sie den Listener:

$ORACLE_HOME/bin/lsnrctl start L_ORCL_DG
Anmerkung

Sie können den vorhandenen Listener auf RDS Custom verwenden, falls Sie dies bevorzugen, aber die Erstellung eines separaten Data Guard-Listeners bietet eine bessere Isolierung.

Wichtig

Wenn unsere tnsping listener Konnektivität fehlschlägt, überprüfen Sie die iptables Regeln auf EC2. Viele EC2-Linux-Instances haben iptables Standardregeln, die Port 1521 blockieren. Fügen Sie eine Regel hinzu: sudo iptables -I INPUT 5 -p tcp --dport 1521 -j ACCEPT

Schritt 9: Aktivieren Sie den Data Guard Broker und die Konfiguration

Aktivieren Sie auf beiden Instanzen den Data Guard Broker:

sqlplus / as sysdba SQL> ALTER SYSTEM SET dg_broker_start=true;

Stellen Sie auf dem RDS Custom Primary eine Verbindung zum Data Guard-Broker her und erstellen Sie die Konfiguration:

dgmgrl /
Beispiel Für Non-CDB:
DGMGRL> CREATE CONFIGURATION my_dg_config AS PRIMARY DATABASE IS ORCL_A CONNECT IDENTIFIER IS ORCL_A; DGMGRL> ADD DATABASE ORCL_B AS CONNECT IDENTIFIER IS ORCL_B MAINTAINED AS PHYSICAL;

Beispiel Für Multitenant:
DGMGRL> CREATE CONFIGURATION my_dg_config AS PRIMARY DATABASE IS RDSCDB_A CONNECT IDENTIFIER IS RDSCDB_A; DGMGRL> ADD DATABASE ORCL_B AS CONNECT IDENTIFIER IS ORCL_B MAINTAINED AS PHYSICAL;

Legen Sie statische Verbindungskennungen fest und aktivieren Sie:

Beispiel Für Non-CDB:
DGMGRL> edit database orcl_a set property StaticConnectIdentifier='(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(PORT=1521)(HOST=<RDS_CUSTOM_IP>))(CONNECT_DATA=(SID=ORCL)(SERVER=DEDICATED)))'; DGMGRL> edit database orcl_b set property StaticConnectIdentifier='(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(PORT=1521)(HOST=<EC2_IP>))(CONNECT_DATA=(SID=ORCL)(SERVER=DEDICATED)))'; DGMGRL> ENABLE CONFIGURATION;

Beispiel Für Multitenant:
DGMGRL> edit database rdscdb_a set property StaticConnectIdentifier='(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(PORT=1521)(HOST=<RDS_CUSTOM_IP>))(CONNECT_DATA=(SID=RDSCDB)(SERVER=DEDICATED)))'; DGMGRL> edit database orcl_b set property StaticConnectIdentifier='(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(PORT=1521)(HOST=<EC2_IP>))(CONNECT_DATA=(SID=ORCL)(SERVER=DEDICATED)))'; DGMGRL> ENABLE CONFIGURATION;
Anmerkung

Der Data Guard Broker ist optional, wird aber für eine einfachere Verwaltung empfohlen. Für einfache Migrationen können Sie Data Guard manuell ohne den Broker konfigurieren.

Anmerkung

Wenn Sie Data Guard für eine CDB aktivieren, schützt es automatisch alle PDBs. Von einem beliebigen PDB generiertes Redo wird an den Standby-Modus gesendet und auf den entsprechenden PDB im Standby-Modus angewendet.

Schritt 10: Konfigurieren Sie die Standby-Redo-Logs und starten Sie die Wiederherstellung

Fügen Sie auf der EC2-Standby-Instance Standby-Redo-Log-Dateien hinzu (n+1, wobei n die Anzahl der Online-Redo-Log-Gruppen ist):

ALTER DATABASE ADD STANDBY LOGFILE ('slog1.rdo') SIZE 128M; ALTER DATABASE ADD STANDBY LOGFILE ('slog2.rdo') SIZE 128M; ALTER DATABASE ADD STANDBY LOGFILE ('slog3.rdo') SIZE 128M; ALTER DATABASE ADD STANDBY LOGFILE ('slog4.rdo') SIZE 128M; ALTER DATABASE ADD STANDBY LOGFILE ('slog5.rdo') SIZE 128M;
Anmerkung

Bei Mehrmandantendiensten werden Standby-Redo-Logs auf CDB-Ebene erstellt und von allen PDBs gemeinsam genutzt.

Konfigurieren Sie die FAL-Parameter im Standby-Modus:

Beispiel Für Non-CDB:
SQL> alter system set fal_server = 'ORCL_A'; SQL> alter system set fal_client = 'ORCL_B';

Beispiel Für Multitenant:
SQL> alter system set fal_server = 'RDSCDB_A'; SQL> alter system set fal_client = 'ORCL_B';

Starten Sie die verwaltete Wiederherstellung:

SQL> recover managed standby database disconnect from session;

Überwachen Sie die Anwendungsverzögerung:

SQL> SELECT name, value FROM v$dataguard_stats WHERE name = 'apply lag';

Detaillierte Überwachung und Verwaltung der Data Guard-Synchronisierung:

Die Überwachung von Data Guard ist entscheidend für eine erfolgreiche Migration. Hier sind umfassende Überwachungstechniken:

  1. Überwachen Sie die Data Guard-Statistiken:

    -- Comprehensive Data Guard statistics SQL> SELECT name, value, unit, time_computed, datum_time FROM v$dataguard_stats ORDER BY name;

    Wichtige zu überwachende Kennzahlen:

    • Transportverzögerung: Zeitunterschied zwischen dem Zeitpunkt, an dem die Wiederherstellung auf der Primärseite generiert wurde, und dem Zeitpunkt, zu dem die Wiederherstellung auf der Standby-Version empfangen wurde

    • Verzögerung anwenden: Zeitunterschied zwischen dem Zeitpunkt, an dem die Wiederherstellung generiert wurde, und dem Zeitpunkt, zu dem die Wiederherstellung im Standby-Modus ausgeführt wurde

    • Rate anwenden: Rate, mit der die Wiederherstellung angewendet wird () MB/sec

    • Wiederholung empfangen: Gesamtzahl der im Standby-Modus empfangenen Wiederholungen

    • Redo angewendet: Gesamter Redo-Vorgang, der vom Standby-Modus durchgeführt wurde

  2. Versand des Archivprotokolls überwachen:

    Auf der Primärseite (RDS Custom):

    -- Check archive log generation rate SQL> SELECT TO_CHAR(first_time, 'YYYY-MM-DD HH24') AS hour, COUNT(*) AS log_count, ROUND(SUM(blocks * block_size)/1024/1024/1024, 2) AS size_gb FROM v$archived_log WHERE first_time > SYSDATE - 1 GROUP BY TO_CHAR(first_time, 'YYYY-MM-DD HH24') ORDER BY hour; -- Check archive log destination status SQL> SELECT dest_id, status, error, destination FROM v$archive_dest WHERE status != 'INACTIVE';

    Im Standby-Modus (EC2):

    -- Check archive log apply status SQL> SELECT sequence#, first_time, next_time, applied FROM v$archived_log WHERE applied = 'NO' ORDER BY sequence#; -- Check archive log gap SQL> SELECT thread#, low_sequence#, high_sequence# FROM v$archive_gap;
  3. Überwachen Sie den verwalteten Wiederherstellungsprozess:

    -- Check if managed recovery is running SQL> SELECT process, status, thread#, sequence#, block#, blocks FROM v$managed_standby WHERE process LIKE 'MRP%' OR process LIKE 'RFS%'; -- Check recovery progress SQL> SELECT process, status, sequence#, TO_CHAR(timestamp, 'YYYY-MM-DD HH24:MI:SS') AS timestamp FROM v$managed_standby ORDER BY process;
  4. Überwachen Sie die Redo Apply-Rate für mehrere Mandanten:

    Überwachen Sie bei Datenbanken mit mehreren Mandanten die Anwendungsrate pro PDB:

    -- Check redo apply rate per container SQL> SELECT con_id, name, ROUND(SUM(value)/1024/1024, 2) AS redo_applied_mb FROM v$con_sysstat cs, v$containers c WHERE cs.con_id = c.con_id AND cs.name = 'redo size' GROUP BY con_id, name ORDER BY con_id;
  5. Standby-Redo-Logs überwachen:

    -- Check standby redo log status SQL> SELECT group#, thread#, sequence#, bytes/1024/1024 AS size_mb, status FROM v$standby_log ORDER BY group#; -- Check if standby redo logs are being used SQL> SELECT group#, thread#, sequence#, status, archived FROM v$standby_log WHERE status = 'ACTIVE';
  6. Voraussichtlicher Abschluss der Synchronisation:

    Berechnen Sie die verbleibende Zeit auf der Grundlage der Anwendungsrate:

    -- Calculate estimated time to catch up SQL> SELECT ROUND((SELECT value FROM v$dataguard_stats WHERE name = 'apply lag')/60, 2) AS lag_minutes, ROUND((SELECT value FROM v$dataguard_stats WHERE name = 'apply rate')/1024, 2) AS apply_rate_mbps, ROUND( (SELECT value FROM v$dataguard_stats WHERE name = 'apply lag') / NULLIF((SELECT value FROM v$dataguard_stats WHERE name = 'apply rate'), 0) / 60, 2 ) AS estimated_catchup_minutes FROM dual;

Häufige Probleme mit der Data Guard-Synchronisierung:

Problem 1: Hohe Anwendungsverzögerung

Symptome:

SQL> SELECT name, value FROM v$dataguard_stats WHERE name = 'apply lag'; NAME VALUE -------------------------------- ----- apply lag +00 01:30:00

Ursachen und Lösungen:

  • Nicht ausreichend CPU/IO im Standby-Modus: Führen Sie ein Upgrade des EC2-Instance-Typs durch oder erhöhen Sie die EBS-IOPS

  • Beschränkung der Netzwerkbandbreite: Verwenden Sie Instance-Typen mit erweitertem Netzwerk oder höherer Bandbreite

  • Mehrere PDBs mit hoher Transaktionsrate: Erwägen Sie, die Redo-Apply-Parallelität zu erhöhen (erfordert eine Active Data Guard-Lizenz)

-- Increase apply parallelism (requires Active Data Guard) SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE PARALLEL 4 DISCONNECT FROM SESSION;
Problem 2: Lücke im Archivprotokoll

Symptome:

SQL> SELECT * FROM v$archive_gap; THREAD# LOW_SEQUENCE# HIGH_SEQUENCE# ------- ------------- -------------- 1 1234 1240

Lösung:

-- FAL (Fetch Archive Log) will automatically fetch missing logs -- Verify FAL parameters are set correctly SQL> SHOW PARAMETER fal_server SQL> SHOW PARAMETER fal_client -- Manually register missing archive logs if needed -- On primary, check if logs still exist SQL> SELECT name FROM v$archived_log WHERE sequence# BETWEEN 1234 AND 1240; -- If logs are missing on primary, you may need to rebuild the standby
Problem 3: Fehler beim Redo-Transport

Symptome:

SQL> SELECT dest_id, status, error FROM v$archive_dest WHERE dest_id = 2; DEST_ID STATUS ERROR ------- --------- ---------------------------------------- 2 ERROR ORA-16191: Primary log shipping client not logged on standby

Lösung:

-- Check network connectivity -- Verify TNS configuration -- Check listener status on standby -- Restart log transport SQL> ALTER SYSTEM SET log_archive_dest_state_2 = 'DEFER'; SQL> ALTER SYSTEM SET log_archive_dest_state_2 = 'ENABLE';
Problem 4: Bei der verwalteten Wiederherstellung wird Redo nicht angewendet

Symptome:

SQL> SELECT process, status FROM v$managed_standby WHERE process = 'MRP0'; PROCESS STATUS --------- ------------ MRP0 WAIT_FOR_LOG

Lösung:

# Check if archive logs are arriving ls -ltr /u01/app/oracle/oradata/ORCL/arch/ # Check alert log for errors tail -100 $ORACLE_BASE/diag/rdbms/orcl_b/ORCL/trace/alert_ORCL.log # Restart managed recovery sqlplus / as sysdba SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

Bei Multitenant können Sie auch den Status jeder PDB im Standby-Modus überprüfen:

SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs;

Erwartete Ausgabe (PDBs im MOUNTED Bereitschaftsmodus):

CON_ID NAME OPEN_MODE RES ---------- ------------------------------ ---------- --- 2 PDB$SEED MOUNTED 3 ORCLDB MOUNTED
Anmerkung

Im physischen Standby-Modus bleiben die PDBs während der verwalteten MOUNTED Wiederherstellung im Status.

Schritt 11: Führen Sie den Switchover durch

Wenn Sie sich davon überzeugt haben, dass der Standby-Modus vollständig synchronisiert und bereit ist, führen Sie den Switchover durch. Bei Mehrmandantenfähigkeit wird beim Switchover die gesamte CDB (alle PDBs) vom RDS-Custom-Primärmodus auf den EC2-Standby-Modus umgestellt.

Stellen Sie auf der primären RDS-Custom-Instance eine Verbindung zum Data Guard-Broker her und überprüfen Sie, ob beide Datenbanken für den Switchover bereit sind:

Beispiel Für Non-CDB:
DGMGRL> VALIDATE DATABASE ORCL_A; DGMGRL> VALIDATE DATABASE ORCL_B;

Beispiel Für Multitenant:
DGMGRL> VALIDATE DATABASE RDSCDB_A; DGMGRL> VALIDATE DATABASE ORCL_B;

Beides sollte angezeigt werden Ready for Switchover: Yes

Wechseln Sie vom RDS-Custom-Primärmodus zum EC2-Standby-Modus:

DGMGRL> SWITCHOVER TO ORCL_B;

Stellen Sie sicher, dass der Switchover erfolgreich ist:

DGMGRL> SHOW CONFIGURATION VERBOSE;

Die EC2-Instance (ORCL_B) ist jetzt die primäre Datenbank, und die RDS Custom Instance ist die physische Standby-Instance.

Schritt 12: PDBs öffnen (nur für mehrere Mandanten)

Nach dem Switchover ist die CDB auf EC2 im READ WRITE-Modus geöffnet, aber alle PDBs befinden sich im Status MOUNTED. Sie müssen sie manuell öffnen.

Connect zum neuen Primärserver auf EC2 her:

sqlplus / as sysdba SQL> SELECT name, open_mode, database_role, cdb FROM v$database;

Erwartete Ausgabe:

NAME OPEN_MODE DATABASE_ROLE CDB --------- -------------------- ---------------- --- ORCL READ WRITE PRIMARY YES

Überprüfen Sie den aktuellen PDB-Status:

SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs;

Erwartete Ausgabe (PDBs im MOUNTED Status — Beispiel mit einer benannten PDB): ORCLDB

CON_ID NAME OPEN_MODE RES ---------- ------------------------------ ---------- --- 2 PDB$SEED READ ONLY NO 3 ORCLDB MOUNTED

Alle PDBs öffnen:

SQL> ALTER PLUGGABLE DATABASE ALL OPEN;

Die austauschbare Datenbank wurde geändert.

Stellen Sie sicher, dass alle PDBs jetzt im folgenden Modus geöffnet sind: READ WRITE

SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs;

Erwartete Ausgabe:

CON_ID NAME OPEN_MODE RES ---------- ------------------------------ ---------- --- 2 PDB$SEED READ ONLY NO 3 ORCLDB READ WRITE NO

Schritt 13: Automatisches Öffnen von PDB beim Start konfigurieren (nur Multitenant)

Konfigurieren Sie PDBs mithilfe der Save-State-Methode so, dass sie beim Start der CDB automatisch geöffnet werden (empfohlen für Oracle 19c):

SQL> ALTER PLUGGABLE DATABASE ALL SAVE STATE; Pluggable database altered.

Überprüfen Sie den gespeicherten Status:

SQL> SELECT con_name, instance_name, state FROM dba_pdb_saved_states;

Stellen Sie sicher, dass die PDB-Dienste beim Listener registriert sind:

lsnrctl services

Die erwartete Ausgabe sollte Dienste für die CDB und jede PDB enthalten. Wenn Dienste nicht angezeigt werden:

SQL> ALTER SYSTEM REGISTER;

Dann überprüfen Sie erneut mitlsnrctl services.

Schritt 14: Entfernen Sie benutzerdefinierte RDS-Objekte

Da es sich jetzt um eine selbstverwaltete Datenbank auf EC2 handelt, sollten Sie RDS Custom-spezifische Benutzer und Objekte entfernen. Der Bereinigungsprozess unterscheidet sich geringfügig zwischen Nicht-CDB- und Mehrmandantenarchitekturen.

Wichtig

Bevor Sie RDS-specific Benutzer und Tablespaces löschen, stellen Sie sicher, dass keine Anwendungsobjekte unter diesen Schemas existieren:

SQL> SELECT owner, object_type, COUNT(*) FROM dba_objects WHERE owner IN ('RDSADMIN', 'RDS_DATAGUARD') AND object_name NOT LIKE 'RDS%' AND object_name NOT LIKE 'SYS_%' GROUP BY owner, object_type;

Wenn Anwendungsobjekte gefunden werden, migrieren Sie sie in die entsprechenden Anwendungsschemas, bevor Sie fortfahren.

Non-CDB Säuberung:

sqlplus / as sysdba -- Drop RDS-specific users SQL> DROP USER RDSADMIN CASCADE; SQL> DROP USER RDS_DATAGUARD CASCADE; -- Drop RDS-specific directories SQL> DROP DIRECTORY OPATCH_INST_DIR; SQL> DROP DIRECTORY OPATCH_LOG_DIR; SQL> DROP DIRECTORY OPATCH_SCRIPT_DIR; -- Drop the RDSADMIN tablespace SQL> DROP TABLESPACE RDSADMIN INCLUDING CONTENTS AND DATAFILES; -- Verify removal SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%';

Erwartete Leistung: no rows selected

Bereinigung für mehrere Mandanten:

In einer Umgebung mit mehreren Mandanten erstellt RDS Custom gemeinsame Benutzer, CDB$ROOT die in allen PDBs sichtbar sind. Sie müssen aufräumen von. CDB$ROOT

sqlplus / as sysdba -- Verify you are in CDB$ROOT SQL> SHOW CON_NAME; -- Check for RDS-specific common users (including C## prefixed users) SQL> SELECT username, common, con_id FROM cdb_users WHERE username LIKE 'RDS%' OR username LIKE 'C##RDS%' ORDER BY username; -- Drop non-common users SQL> DROP USER RDSADMIN CASCADE; SQL> DROP USER RDS_DATAGUARD CASCADE; -- If any C## common users exist -- Example (adjust based on your findings): -- SQL> DROP USER C##RDS_DATAGUARD CASCADE; -- Drop RDS-specific directories SQL> DROP DIRECTORY OPATCH_INST_DIR; SQL> DROP DIRECTORY OPATCH_LOG_DIR; SQL> DROP DIRECTORY OPATCH_SCRIPT_DIR; -- Drop the RDSADMIN tablespace SQL> DROP TABLESPACE RDSADMIN INCLUDING CONTENTS AND DATAFILES; -- Verify removal from CDB$ROOT SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%'; -- Verify removal from each PDB (example with one PDB named ORCLDB) SQL> ALTER SESSION SET CONTAINER = ORCLDB; SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%';

Erwartete Ausgabe für alle Abfragen: Es wurden keine Zeilen ausgewählt

Schritt 15: Konfigurieren Sie den automatischen Start

Stellen Sie sicher, SPFILE dass das verwendet wird:

sqlplus / as sysdba SQL> SHOW PARAMETER spfile;

Wenn der spfile Pfad korrekt ist, ist keine Aktion erforderlich. Wenn nicht, erstelle einen:

SQL> CREATE SPFILE FROM MEMORY;

Starten Sie die Datenbank neu:

SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP;

Öffnen Sie für Multitenant alle PDBs (sie sollten sich automatisch öffnen, wenn Sie den Status zuvor gespeichert haben):

SQL> SELECT con_id, name, open_mode FROM v$pdbs;

Wenn PDBs nicht geöffnet sind, öffnen Sie sie manuell:

SQL> ALTER PLUGGABLE DATABASE ALL OPEN;

Bearbeiten/etc/oratab:

vi /etc/oratab

Ändern Sie die Zeile für ORCL von N zuY:

ORCL:/u01/app/oracle/product/19.0.0/dbhome_1:Y

Schritt 16: Endgültige Validierung

Führen Sie eine umfassende Validierung der migrierten Datenbank durch.

Beispiel Für Non-CDB:
sqlplus / as sysdba -- Verify database role and status SQL> SELECT name, open_mode, log_mode, database_role FROM v$database; -- Check database size SQL> SELECT SUM(bytes)/1024/1024/1024 AS size_gb FROM dba_data_files; -- Verify all objects are valid SQL> SELECT owner, object_type, COUNT(*) FROM dba_objects WHERE status = 'INVALID' GROUP BY owner, object_type; -- Verify data files SQL> SELECT name, status FROM v$datafile; -- Test application connectivity SQL> SELECT username, machine, program FROM v$session WHERE username IS NOT NULL;
Beispiel Für Multitenant:
sqlplus / as sysdba -- Verify CDB status SQL> SELECT name, open_mode, log_mode, cdb, database_role FROM v$database; -- Verify all PDBs are open SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs; -- Check total CDB size SQL> SELECT SUM(bytes)/1024/1024/1024 AS total_size_gb FROM cdb_data_files; -- Check size per PDB SQL> SELECT p.name AS pdb_name, ROUND(SUM(d.bytes)/1024/1024/1024, 2) AS size_gb FROM v$pdbs p JOIN cdb_data_files d ON p.con_id = d.con_id GROUP BY p.name,p.con_id ORDER BY p.con_id; -- Verify all objects are valid across all PDBs SQL> SELECT con_id, owner, object_type, COUNT(*) FROM cdb_objects WHERE status = 'INVALID' GROUP BY con_id, owner, object_type; -- Verify PDB services are registered SQL> SELECT name FROM v$services ORDER BY name; Test application connectivity: # Non-CDB sqlplus <app_user>/<password>@<EC2_IP>:1521/ORCL # Multitenant (connect to PDB) sqlplus <app_user>/<password>@<EC2_IP>:1521/<PDB_NAME>

Testen Sie die Anwendungskonnektivität:

# Non-CDB sqlplus <app_user>/<password>@<EC2_IP>:1521/ORCL # Multitenant (connect to PDB) sqlplus <app_user>/<password>@<EC2_IP>:1521/<PDB_NAME>

Schritt 17: Backup-Dateien bereinigen

Entfernen Sie nach erfolgreicher Überprüfung die Sicherungsdateien und trennen Sie das Backup-Volume, wenn Sie ein separates EBS-Volume verwenden:

rm -rf /u01/app/oracle/backup/*

Wenn Sie ein separates EBS-Volume für Backups verwenden:

# Unmount the volume sudo umount /u01/app/oracle/backup # Detach and delete the EBS volume from AWS Console or CLI aws ec2 detach-volume --volume-id <volume-id> aws ec2 delete-volume --volume-id <volume-id>

Schritt 18: Setzen Sie die benutzerdefinierte RDS-Automatisierung fort

Wenn Sie planen, die RDS Custom-Instance während eines Validierungszeitraums als Fallback weiterlaufen zu lassen, setzen Sie die Automatisierung fort:

aws rds modify-db-instance \ --db-instance-identifier my-custom-instance \ --automation-mode full \ --region us-east-1

Behebung häufiger Probleme

In diesem Abschnitt werden häufig auftretende Probleme behandelt, die bei der Migration sowohl bei der RMAN-Duplizierung als auch bei Oracle Data Guard-Ansätzen auftreten können. Dabei werden sowohl Nicht-CDB- als auch Mehrmandantenarchitekturen behandelt.

ORA-09925: Die Audit-Trail-Datei konnte nicht erstellt werden

Ursache: Das im audit_file_dest Parameter angegebene Auditverzeichnis ist auf der EC2-Zielinstanz nicht vorhanden.

Lösung:

Stellen Sie sicher, dass das Audit-Verzeichnis vorhanden ist und über die erforderlichen Berechtigungen verfügt:

mkdir -p /u01/app/oracle/admin/ORCL/adump chown -R oracle:oinstall /u01/app/oracle/admin/ORCL chmod -R 755 /u01/app/oracle/admin/ORCL

ORA-01261: Die db_create_file_dest Zielzeichenfolge des Parameters kann nicht übersetzt werden

Ursache: Das im db_create_file_dest Parameter angegebene Verzeichnis ist auf der EC2-Zielinstanz nicht vorhanden.

Lösung:

Für Nicht-CDB:

mkdir -p /u01/app/oracle/oradata/ORCL chown -R oracle:oinstall /u01/app/oracle/oradata/ORCL chmod -R 755 /u01/app/oracle/oradata/ORCL

Für Mehrmandantenfähigkeit:

mkdir -p /u01/app/oracle/oradata/ORCL/pdb/datafile chown -R oracle:oinstall /u01/app/oracle/oradata/ORCL chmod -R 755 /u01/app/oracle/oradata/ORCL

ORA-01804: Fehler beim Initialisieren der Zeitzoneninformationen

Dieser Fehler kann auftreten, wenn der RDSADMIN Benutzer gelöscht wird, wenn die RDS-Quelle eine höhere Zeitzonenversion hat als die, die in Ihrem EC2 $ORACLE_HOME installiert ist.

Lösung:

  1. Überprüfen Sie die Zeitzonen-Versionen:

    SELECT * FROM v$timezone_file; SELECT PROPERTY_NAME, PROPERTY_VALUE FROM database_properties WHERE PROPERTY_NAME LIKE '%DST%';
  2. Um das Problem zu umgehen, stellen Sie die Umgebungsvariable für die Zeitzonendatei so ein, dass sie dem entspricht, was in $ORACLE_HOME verfügbar ist:

    ls $ORACLE_HOME/oracore/zoneinfo/timezlrg_*.dat export ORA_TZFILE=$ORACLE_HOME/oracore/zoneinfo/timezone_40.dat

    Passen Sie die Nummer so an, dass sie der in Ihrer Installation verfügbaren Version entspricht.

  3. Versuchen Sie es erneut mit dem Drop:

    sqlplus / as sysdba SQL> DROP USER RDSADMIN CASCADE;

Cross-RU Migrationsprobleme (verschiedene Release-Updates)

Ursache: Die EC2-Zielinstanz hat ein anderes Oracle Release Update (RU) oder einmalige Patches als die benutzerdefinierte RDS-Quellinstanz, was während oder nach der Migration zu Kompatibilitätsfehlern führt.

Häufige Fehler:
  • ORA-00600 Bei der Wiederherstellung treten interne Fehler auf (Data Guard)

  • ORA-39700 Die Datenbank muss mit UPGRADE der Option geöffnet werden

  • Wörterbuchinkonsistenzen nach der Migration

  • Ungültige Objekte in oder DBA_REGISTRY DBA_OBJECTS

Lösung:

Bewährtes Verfahren — Ordnen Sie RU-Versionen und einmalige Patches exakt zu:

  1. Überprüfen Sie die genaue RU-Version sowohl für die Quelle als auch für das Ziel:

    -- On both source and target SQL> SELECT * FROM v$version; SQL> SELECT patch_id, patch_uid, version, action, status, description FROM dba_registry_sqlpatch ORDER BY action_time DESC;
  2. Überprüfen Sie das $ORACLE_HOME-Patch-Level:

    # On both instances $ORACLE_HOME/OPatch/opatch lsinventory
  3. Wenn die Versionen nicht übereinstimmen, passen Sie sie vor der Migration an, indem Sie nach Bedarf Patches anwenden oder rückgängig machen.

  4. Wenn Sie mit nicht übereinstimmenden RUs fortfahren müssen, führen Sie Datapatch nach der Migration aus:

    cd $ORACLE_HOME/OPatch ./datapatch -verbose
  5. Suchen Sie nach ungültigen Objekten und kompilieren Sie erneut:

    SQL> @?/rdbms/admin/utlrp.sql SQL> SELECT owner, object_type, COUNT(*) FROM dba_objects WHERE status = 'INVALID' GROUP BY owner, object_type;

Probleme mit der Netzwerkkonnektivität

Ursache: Sicherheitsgruppen, Netzwerk-ACLs oder iptables Blockierung des Oracle-Listener-Ports.

Lösung:

  1. Stellen Sie sicher, dass Sicherheitsgruppen den Port bidirektional zulassen

  2. Überprüfen Sie iptables auf EC2:

    sudo iptables -L INPUT -n -v
  3. Regel hinzufügen, falls erforderlich:

    # Insert rule before the REJECT rule (typically position 5) sudo iptables -I INPUT 5 -p tcp --dport 1521 -j ACCEPT # For enhanced security, allow only from specific source IPs sudo iptables -I INPUT 5 -p tcp -s <RDS_Custom_IP> --dport 1521 -j ACCEPT # Save rules permanently sudo service iptables save
  4. Konnektivität testen:

    telnet <EC2_instance_IP> 1521 tnsping DB_SOURCE tnsping DB_TARGET

PDBs werden nach der Migration nicht geöffnet (nur für mehrere Mandanten)

Ursache: Dies ist das erwartete Verhalten. Nach der RMAN-Duplizierung oder dem Data Guard-Switchover ist die CDB geöffnet, aber die PDBs befinden sich im Status. MOUNTED

Lösung:

Öffnen Sie sie manuell:

SQL> ALTER PLUGGABLE DATABASE ALL OPEN;

Wenn eine bestimmte PDB nicht geöffnet werden kann, überprüfen Sie das Warnungsprotokoll auf Fehler:

tail -100 $ORACLE_BASE/diag/rdbms/orcl/ORCL/trace/alert_ORCL.log

Zu den häufigsten Ursachen gehören fehlende Datendateien oder Probleme mit der Pfadzuordnung.

PDB-Datendateien wurden nicht gefunden oder der Pfad stimmt nicht überein (nur für mehrere Mandanten)

Ursache: Bei der Migration wurden nicht alle Quellpfade korrekt zugeordnet, insbesondere bei OMF-based PDB-Datendateien.

Lösung:

  1. Überprüfen Sie, welche Datendateien fehlen:

    SQL> SELECT name, status FROM v$datafile WHERE status != 'ONLINE';
  2. Wenn die Dateien im falschen Verzeichnis abgelegt wurden, benennen Sie sie in der Steuerdatei um:

    SQL> ALTER DATABASE RENAME FILE '/wrong/path/datafile.dbf' TO '/correct/path/datafile.dbf';
  3. Um dies zu verhindern, überprüfen Sie immer die Pfade der Quelldatendateien mit, SELECT con_id, name FROM v$datafile ORDER BY con_id; bevor Sie die Parameterdatei konfigurieren.

PDB-Dienste registrieren sich nicht beim Listener (nur für mehrere Mandanten)

Ursache: Der Listener kennt die PDB-Dienste nach dem Öffnen von PDBs nicht.

Lösung:

  1. Registrierung des Dienstes erzwingen:

    SQL> ALTER SYSTEM REGISTER;
  2. Wenn Dienste immer noch nicht angezeigt werden, überprüfen Sie den local_listener Parameter:

    SQL> SHOW PARAMETER local_listener;

    Stellen Sie sicher, dass er auf die richtige Listener-Adresse verweist. Falls erforderlich, aktualisieren Sie es:

    SQL> ALTER SYSTEM SET local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=<EC2_instance_IP>)(PORT=1521))'; SQL> ALTER SYSTEM REGISTER;
  3. Verifizieren Sie mit:

    lsnrctl services

PDBs werden nach dem CDB-Neustart nicht automatisch geöffnet (nur Multitenant)

Ursache: Der PDB-Speicherstatus wurde nicht konfiguriert.

Lösung:

Stellen Sie sicher, dass der PDB-Speicherstatus konfiguriert wurde:

SQL> SELECT con_name, instance_name, state FROM dba_pdb_saved_states;

Wenn keine Zeilen zurückgegeben werden, speichern Sie den Status:

SQL> ALTER PLUGGABLE DATABASE ALL OPEN; SQL> ALTER PLUGGABLE DATABASE ALL SAVE STATE;

Data Guard Redo Transport funktioniert nicht

Ursache: Probleme mit der Netzwerkverbindung, falsche TNS-Konfiguration oder nicht festgelegte FAL-Parameter.

Lösung:

  1. Stellen Sie sicher, dass sich der Standby-Modus im MOUNT-Modus befindet:

    SQL> SELECT status FROM v$instance;
  2. Prüfen Sie, ob fal_server und fal_client im Standby-Modus korrekt eingestellt sind:

    SQL> SHOW PARAMETER fal_server SQL> SHOW PARAMETER fal_client
  3. Überprüfen Sie die Netzwerkkonnektivität:

    tnsping ORCL_A # or RDSCDB_A for multitenant
  4. Überprüfen Sie den Parameter log_archive_dest_2 an den primären Bereitschaftspunkten (falls manuell ohne Broker konfiguriert).

Data Guard wendet bei mehreren PDBs zunehmende Verzögerungen an (nur für mehrere Mandanten)

Ursache: Bei CDBs mit mehreren PDBs kann das Redo Apply-Verfahren aufgrund des Umfangs der Änderungen in allen Containern langsamer sein.

Lösung:

  1. Überprüfen Sie die Anwendungsrate:

    SQL> SELECT name, value, unit FROM v$dataguard_stats WHERE name IN ('apply rate', 'apply lag');
  2. Erwägen Sie, die Parallelität für Redo Apply zu erhöhen (erfordert eine Active Data Guard-Lizenz):

    SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE PARALLEL 4 DISCONNECT FROM SESSION;
  3. Stellen Sie sicher, dass auf der Standby-Instanz keine Ressourcenbeschränkungen (CPU, I/O) bestehen.

Die Sicherung des RMAN-Archivprotokolls schlägt fehl mit ORA-19625

Ursache: RDS Custom Automation hat ältere Archivprotokolle von der Festplatte gelöscht, aber die RMAN-Steuerdatei enthält immer noch Aufzeichnungen davon.

Lösung:

  1. Überprüfen und bereinigen Sie veraltete Archivprotokolleinträge:

    RMAN> CROSSCHECK ARCHIVELOG ALL; RMAN> DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
  2. Re-run nur die Archiv-Log-Backup:

    RMAN> RUN { SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT'; BACKUP AS COMPRESSED BACKUPSET FILESPERSET 50 FORMAT '/rdsdbdata/backup/arch_%U' ARCHIVELOG ALL; }

Häufig schlägt das Löschen von Benutzern bei Multitenant fehl (nur Multitenant)

Ursache: Allgemeine Benutzer (mit dem Präfix C##) müssen mit der Klausel gelöscht werden. CONTAINER=ALL

Lösung:

-- For common users SQL> DROP USER C##RDS_DATAGUARD CASCADE CONTAINER=ALL; -- For non-common users in CDB$ROOT SQL> DROP USER RDSADMIN CASCADE;

Stellen Sie sicher, dass Sie verbunden sind mit: CDB$ROOT

SQL> SHOW CON_NAME;

Post-migration Aufgaben

Führen Sie nach erfolgreicher Migration diese zusätzlichen Aufgaben aus, um sicherzustellen, dass Ihre selbstverwaltete Oracle-Datenbank auf EC2 produktionsbereit ist.

Aktualisieren Sie die Verbindungszeichenfolgen für die Anwendung

Für Non-CDB:
  • Verweisen Sie Ihre Anwendungen auf den neuen EC2-Instance-Endpunkt

  • Aktualisieren Sie die Verbindungszeichenfolgen, sodass sie die IP oder den Hostnamen der EC2-Instanz verwenden

  • Testen Sie die gesamte Anwendungsfunktionalität gründlich

Für Multitenant:
  • Verweisen Sie Ihre Anwendungen auf die PDB-Dienstnamen der neuen EC2-Instance (z. B. ORCLDB oder Ihre spezifischen PDB-Namen)

  • Stellen Sie sicher, dass Anwendungen eine Verbindung zur richtigen PDB herstellen, nicht mit der CDB

  • Aktualisieren Sie die Verbindungszeichenfolgen, um PDB-Dienstnamen zu verwenden

  • Testen Sie die gesamte Anwendungsfunktionalität für jede PDB

Beispiele für Verbindungszeichenfolgen:

# Non-CDB jdbc:oracle:thin:@<EC2_IP>:1521/ORCL # Multitenant (connect to PDB) jdbc:oracle:thin:@<EC2_IP>:1521/ORCLDB

Backup-Strategie konfigurieren

Richten Sie eine umfassende Backup-Strategie für Ihre selbstverwaltete Datenbank ein:

RMAN-Backups:
  • Konfigurieren Sie automatisierte RMAN-Backup-Skripten für vollständige, inkrementelle und archivierte Log-Backups

  • Richten Sie Richtlinien zur Aufbewahrung von Backups auf der Grundlage Ihrer Recovery Point Objectives (RPO) ein

  • Speichern Sie Backups auf Amazon S3, um Haltbarkeit und Wirtschaftlichkeit zu gewährleisten

  • Testen Sie regelmäßig die Verfahren zur Wiederherstellung von Backups

AWS Backup:
  • AWS BackupFür EBS-Volume-Snapshots verwenden

  • Konfigurieren Sie Backup-Zeitpläne und Aufbewahrungsrichtlinien

  • Aktivieren Sie regionsübergreifende Sicherungskopien für die Notfallwiederherstellung

Für Multitenant:
  • RMAN-Backups der CDB enthalten automatisch alle PDBs

  • Sie können bei Bedarf auch einzelne PDBs sichern

  • Ziehen Sie PDB-specific Backup-Zeitpläne in Betracht, die auf den Geschäftsanforderungen basieren

Beispiel für ein RMAN-Backup-Skript:

#!/bin/bash export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 export ORACLE_SID=ORCL export PATH=$ORACLE_HOME/bin:$PATH rman target / << EOF run { backup as compressed backupset database plus archivelog; delete noprompt obsolete; } exit; EOF

Überwachung einrichten

Implementieren Sie eine umfassende Überwachung für Ihre EC2-hosted Oracle-Datenbank:

Amazon CloudWatch
  • Richten Sie CloudWatch Metriken für den Zustand der EC2-Instance, die Festplattennutzung und benutzerdefinierte Oracle-Metriken ein

  • Erstellen Sie CloudWatch Alarme für kritische Schwellenwerte

  • Verwenden Sie CloudWatch Logs für die Überwachung von Datenbank-Warnungsprotokollen

Oracle Enterprise Manager (OEM):
  • Falls verfügbar, konfigurieren Sie OEM für die Datenbanküberwachung

  • Richten Sie Leistungsüberwachung und Diagnose ein

  • Konfigurieren Sie automatische Benachrichtigungen für kritische Ereignisse

Third-party Tools:
  • Ziehen Sie Tools wie Datadog, New Relic oder Prometheus für die Datenbanküberwachung in Betracht

  • Integrieren Sie es in Ihre bestehende Monitoring-Infrastruktur

Wichtige zu überwachende Kennzahlen:
  • Tablespace-Nutzung

  • Log-Speicherplatz archivieren

  • Ungültige Objekte

  • Die Anzahl der Sitzungen

  • Warteereignisse

  • CPU- und Speicherauslastung

  • I/O Leistung

Für Multitenant:
  • Überwachen Sie beides CDB-level und Metriken PDB-level

  • Richten Sie Benachrichtigungen für die Nutzung und Kontingente von PDB-Ressourcen ein

  • Verfolgen Sie PDB-specific Leistungskennzahlen

Konfigurieren Sie Sicherheitsgruppen und Netzwerk-ACLs

Überprüfen und verschärfen Sie die Sicherheit für die EC2-Instance:

Sicherheitsgruppen:
  • Beschränken Sie den Zugriff auf Datenbankports nur auf autorisierte Anwendungsserver und Bastion-Hosts

  • Entfernen Sie alle übermäßig freizügigen Regeln, die während der Migration erstellt wurden

  • Dokumentieren Sie die Regeln für Sicherheitsgruppen und ihre Zwecke

Netzwerk-ACLs:
  • Konfiguration von VPC-Netzwerk-ACLs für zusätzliche Sicherheitsebenen

  • Implementieren Sie eine umfassende Sicherheitsstrategie

SSH-Zugriff:
  • Beschränken Sie den SSH-Zugriff auf bestimmte IP-Bereiche oder verwenden Sie AWS Systems Manager Session Manager

  • Deaktivieren Sie die Kennwortauthentifizierung und verwenden Sie nur die schlüsselbasierte Authentifizierung

  • Implementieren Sie die Multi-Faktor-Authentifizierung (MFA) für privilegierten Zugriff

Verschlüsselung:
  • Aktivieren Sie die Verschlüsselung im Ruhezustand für EBS-Volumes

  • Aktivieren Sie die Verschlüsselung während der Übertragung für Datenbankverbindungen mit Oracle Native Network Encryption oder TLS

  • Wechseln Sie die Verschlüsselungsschlüssel regelmäßig

Implementieren Sie Hochverfügbarkeit

Wenn Ihr Workload eine hohe Verfügbarkeit erfordert, sollten Sie die Implementierung von Folgendem in Betracht ziehen:

Oracle Data Guard:
  • Konfigurieren Sie eine neue Standby-Datenbank auf einer anderen EC2-Instance für Disaster Recovery

  • Bei Mehrmandantenfähigkeit schützt Data Guard die gesamte CDB, einschließlich aller PDBs

  • Der Standby-Modus kann sich in einer anderen Availability Zone oder Region befinden

  • Implementieren Sie automatisierte Failover-Mechanismen mithilfe von Skripten oder Tools von Drittanbietern

AWS Multi-AZ Bereitstellung:
  • Bereitstellen von Standby-Instanzen in verschiedenen Availability Zones

  • Verwenden Sie Amazon Route 53 für DNS-Failover

  • Implementieren Sie Verbindungspooling auf Anwendungsebene mit Failover-Unterstützung

Backup und Wiederherstellung:
  • Sorgen Sie mit getesteten Wiederherstellungsverfahren für regelmäßige Backups

  • Dokumentieren Sie Recovery Time Objectives (RTO) und Recovery Point Objectives (RPO)

  • Führen Sie regelmäßige Notfallwiederherstellungsübungen durch

Führen Sie gründliche Anwendungstests durch

Vor der Außerbetriebnahme der RDS Custom-Instanz:

Funktionstests:
  • Stellen Sie sicher, dass alle Anwendungsfunktionen ordnungsgemäß funktionieren

  • Testen Sie alle datenbankabhängigen Funktionen

  • Überprüfen Sie die Datenintegrität und -konsistenz

Leistungstests:
  • Vergleichen Sie Leistungskennzahlen mit der RDS-Baseline für Custom

  • Identifizieren und beheben Sie etwaige Leistungseinbußen

  • Optimieren Sie Abfragen und Indizes nach Bedarf

Belastungstests:
  • Testen Sie die Datenbank bei erwarteten Spitzenlasten

  • Stellen Sie sicher, dass die Ressourcennutzung innerhalb akzeptabler Grenzen bleibt

  • Identifizieren und beheben Sie etwaige Engpässe

Failover-Tests (falls HA konfiguriert ist):
  • Testen Sie Failover-Szenarien

  • Überprüfen Sie die Logik für die Wiederherstellung der Verbindung von Anwendungen

  • Messen Sie den tatsächlichen RTO und RPO

Testen von Backup und Wiederherstellungen:
  • Stellen Sie sicher, dass die Sicherungs- und Wiederherstellungsverfahren ordnungsgemäß funktionieren

  • Testen Sie die Wiederherstellung zu einem bestimmten Zeitpunkt

  • Überprüfen Sie die Integrität des Backups

Für Multitenant:
  • Testen Sie jede PDB unabhängig

  • Überprüfen Sie die PDB-Isolierung und die Ressourcenzuweisung

  • PDB-specific Testvorgänge ( unplug/plugKlonen usw.)

Setzen Sie die benutzerdefinierte RDS-Instanz außer Betrieb

Nach einem erfolgreichen Validierungszeitraum (in der Regel 1—2 Wochen):

  1. Endgültiges Backup: Erstellen Sie zu Archivierungszwecken ein letztes Backup der RDS Custom-Instance

    # Create final snapshot aws rds create-db-snapshot \ --db-instance-identifier my-custom-instance \ --db-snapshot-identifier my-custom-instance-final-snapshot \ --region us-east-1
  2. Dokumentieren Sie die Migration: Aktualisieren Sie Runbooks und Dokumentation mit der neuen EC2-Konfiguration

  3. Löschen Sie die benutzerdefinierte RDS-Instanz: Verwenden Sie die AWS Konsole oder CLI, um die Instanz zu löschen

    # Delete RDS Custom instance without final snapshot (if already created above) aws rds delete-db-instance \ --db-instance-identifier my-custom-instance \ --skip-final-snapshot \ --region us-east-1 # Or create a final snapshot before deletion aws rds delete-db-instance \ --db-instance-identifier my-custom-instance \ --final-db-snapshot-identifier my-custom-instance-final-snapshot \ --region us-east-1
  4. Ressourcen bereinigen: Entfernen Sie die zugehörigen Snapshots, Parametergruppen und Optionsgruppen, wenn sie nicht mehr benötigt werden

  5. Dokumentation aktualisieren: Stellen Sie sicher, dass die gesamte Betriebsdokumentation die neue EC2-based Architektur widerspiegelt

Vergleich: RMAN Active Duplication im Vergleich zu Oracle Data Guard

In der folgenden Tabelle sind die wichtigsten Unterschiede zwischen den beiden Migrationsoptionen zusammengefasst:

Aspekt

Aktive RMAN-Duplizierung

Oracle Data Guard

Verfügbarkeit der Quelldatenbank

Online während der gesamten Vervielfältigung Während des gesamten Vorgangs online

Ausfallzeit

Minuten (nur endgültige Umstellung) Sekunden bis Minuten (Umstellung)

Komplexität

Niedriger Höher

Dauer der Migration

Einzelner Duplizierungsvorgang Ersteinrichtung + kontinuierliche Synchronisierung

Kontinuierliche Synchronisation

Nein Ja

Fallback-Fähigkeit

Manuell (Quelle am Laufen lassen) Built-in (automatisch)

Testen vor der Umstellung

Eingeschränkt (Test nach der Vervielfältigung) Vollständiger Test möglich (Standby kann getestet werden)

Netzwerk-Bandbreite

Hoch beim Duplizieren Mäßig (kontinuierlich)

Auswirkung auf die Quelldatenbank

Minimale (Lesevorgänge) Minimal (Versand wiederholen)

Am besten geeignet für

Die meisten Migrationen, einfache Umstellung Mission-critical, nahezu keine Ausfallzeiten erforderlich

Non-CDB Unterstützung

Ja Ja

Unterstützung für mehrere Mandanten

Ja (gesamte CDB) Ja (gesamte CDB)

Post-migration PDB-Status

CDB geöffnet, PDBs MONTIERT CDB geöffnet, PDBs MONTIERT

Erfordert RMAN

Ja Ja (für ein erstes Backup im Backup-basierten Ansatz)

Erfordert Data Guard

Nein Ja

Qualifikationsniveau erforderlich

Intermediär Advanced

Umstellungsprozess

Leiten Sie Anwendungen zu EC2 um Switchover-Befehl + Anwendungen umleiten

Non-CDB Vergleich: Migration mit Multitenant-Migration

In der folgenden Tabelle sind die wichtigsten Unterschiede zwischen der Migration von Nicht-CDB-Datenbanken und Multitenant-Datenbanken zusammengefasst:

Aspekt

Non-CDB Migration

Mehrmandanten-Migration (CDB mit PDBs)

Datenbanktyp

Single-instance Nicht-CDB (z. B.) ORCL CDB (Quelle:RDSCDB, Ziel:ORCL) mit CDB$ROOT + PDB$SEED + einer oder mehreren PDBs

Umfang der Migration

Eine einzige Datenbank Vollständige CDB (alle PDBs werden automatisch eingeschlossen)

Umfang der RMAN-Duplizierung

Dupliziert eine einzelne Datenbank Dupliziert die gesamte CDB (alle Container)

Geltungsbereich von Data Guard

Schützt eine einzelne Datenbank Schützt die gesamte CDB (alle PDBs werden automatisch eingeschlossen)

Parameterdatei

Standard-Init-Parameter Muss = enthalten enable_pluggable_database TRUE

Post-migration Datenbankstatus

Die Datenbank wird im READ-WRITE-Modus geöffnet CDB wird im READ WRITE Modus geöffnet; PDBs bleiben im Status MOUNTED

PDB wird geöffnet

N/A Muss alle PDBs manuell öffnen mit ALTER PLUGGABLE DATABASE ALL OPEN

PDB wird beim Start automatisch geöffnet

N/A Der PDB-Speicherstatus oder der Startauslöser müssen konfiguriert werden

Validierung

Einzeldatenbankprüfungen CDB und jede PDB müssen einzeln validiert werden

RDS-specific Aufräumen

users/objects Aus einer einzigen Datenbank löschen Löscht gewöhnliche Benutzer aus CDB$ROOT (Kaskaden zu PDBs); behandelt C##-Benutzer

TNS/Listener Konfiguration

Ein einziger Dienst für die Datenbank CDB-Dienst + einzelne PDB-Dienste, die dynamisch registriert wurden

Verbindungszeichenfolgen für Anwendungen

Connect zu einer einzelnen Datenbank herstellen Connect zu einzelnen PDB-Diensten her (nicht CDB)

Backup-Strategie

Einzelne Datenbank Backup Backup der gesamten CDB (einschließlich aller PDBs) oder einzelner PDBs

Ressourcenmanagement

Database-level Ressourcenmanagement CDB-level und PDB-level Ressourcenmanagement mit Resource Manager

Komplexität

Geringere Komplexität Höhere Komplexität aufgrund mehrerer Container und OMF-Pfade

Bewährte Methoden und Empfehlungen

Dieser Abschnitt enthält umfassende bewährte Methoden für eine erfolgreiche Migration von RDS Custom for Oracle zu EC2.

Pre-migration Planung

  1. Führen Sie eine gründliche Bewertung durch:

    Bevor Sie mit der Migration beginnen, führen Sie eine umfassende Bewertung Ihrer Umgebung durch:

    • Datenbankinventar: Dokumentieren Sie alle Datenbanken, ihre Größen, Architekturen (ohne CDB oder Multitenant) und Abhängigkeiten

    • Anwendungsabhängigkeiten: Identifizieren Sie alle Anwendungen, die eine Verbindung zur Datenbank herstellen, und deren Verbindungsmethoden

    • Leistungsbasis: Erfassen Sie Leistungskennzahlen (CPU, Arbeitsspeicher I/O, Netzwerk) zum Vergleich nach der Migration

    • Backup- und Wiederherstellungsanforderungen: Dokument RPO (Recovery Point Objective) und RTO (Recovery Time Objective)

    • Compliance-Anforderungen: Identifizieren Sie alle regulatorischen oder Compliance-Anforderungen, die sich auf die Migration auswirken könnten

  2. Wählen Sie den richtigen EC2-Instance-Typ:

    Wählen Sie einen EC2-Instance-Typ auf der Grundlage Ihrer Workload-Merkmale aus:

    Workload-Typ

    Empfohlene Instance-Familie

    Wichtigste Merkmale

    OLTP für allgemeine Zwecke M6i, M6a, M7i Ausgewogenes Verhältnis von Rechenleistung, Arbeitsspeicher und Netzwerk
    Memory-intensive R6i, R6a, R7i, x2IDN Hohes Verhältnis von Speicher zu CPU
    Compute-intensive C6i, C6a, C7i Hohe CPU-Leistung
    I/O-intensive i4i, iM4GN Hoher lokaler NVMe SSD-Speicher
    Gemischte Workloads M5, M5a, M5n Cost-effective ausgewogene Leistung

    Richtlinien zur Instanzgröße:

    • Beginnen Sie mit derselben Instance-Klasse wie Ihre benutzerdefinierte RDS-Instance

    • Überwachen Sie die Ressourcennutzung während einer Testmigration

    • Erwägen Sie die Verwendung von AWS Compute Optimizer für Empfehlungen

    • Planen Sie einen Spielraum von 20 bis 30% für Wachstum und Spitzenlasten ein

  3. Entwerfen Sie Ihre Speicherarchitektur:

    EBS-Volumetypen:

    Volume-Typ

    Anwendungsfall

    Leistung

    Kosten

    gp3 Universell einsetzbar, die meisten Workloads Bis zu 16.000 IOPS, 1.000 MB/s Niedrig
    io2 Block Express Mission-critical, leistungsstark Bis zu 256.000 IOPS, 4.000 MB/s Hoch
    Io1 High-performance Datenbanken Bis zu 64.000 IOPS, 1.000 MB/s Medium-High
    gp2 Ältere Versionen für allgemeine Zwecke Bis zu 16.000 IOPS Niedrig

    Empfehlungen für das Speicherlayout:

    # Recommended layout for production databases /u01/app/oracle # Oracle software (50-100 GB, gp3) /u01/app/oracle/oradata # Data files (sized for database, gp3 or io2) /u01/app/oracle/arch # Archive logs (separate volume, gp3) /u01/app/oracle/backup # Backups (separate volume, gp3, can be detached post-migration)

    Vorteile separater Volumen:

    • Unabhängige IOPS-Zuweisung

    • Einfacheres Kapazitätsmanagement

    • Vereinfachte Backup- und Snapshot-Strategien

    • Bessere Leistungsisolierung

  4. Erstellen Sie einen Rollback-Plan:

    Haben Sie immer eine Rollback-Strategie:

    • Halten Sie die benutzerdefinierte RDS-Instanz während des Validierungszeitraums am Laufen (1—2 Wochen empfohlen)

    • Sorgen Sie für regelmäßige Backups von Quell- und Zieldaten

    • Dokumentieren Sie Rollback-Verfahren, einschließlich Änderungen der Verbindungszeichenfolge

    • Testen Sie den Rollback-Prozess in einer Umgebung außerhalb der Produktionsumgebung

    • Definieren Sie Rollback-Kriterien (Leistungseinbußen, Dateninkonsistenz, Anwendungsfehler)

Bewährte Methoden für die Durchführung der Migration

  1. Zeitlicher Ablauf Ihrer Migration:

    Wählen Sie das optimale Zeitfenster:

    • Low-traffic Perioden: Wochenende, Feiertage oder außerhalb der Hauptverkehrszeiten

    • Wartungsfenster: Halten Sie sich nach Möglichkeit an die geplanten Wartungsarbeiten

    • Vermeiden Sie das end/quarter Monatsende: In diesen Zeiträumen ist in der Regel ein hohes Transaktionsvolumen zu verzeichnen

    • Berücksichtigen Sie Zeitzonen: Wählen Sie für globale Anwendungen eine Zeit, die die Auswirkungen auf die einzelnen Regionen so gering wie möglich hält

  2. Kommunikationsplan:

    Stellen Sie eine klare Kommunikation her:

    • Benachrichtigung der Interessengruppen: Informieren Sie alle Beteiligten mindestens 2 Wochen im Voraus

    • Anwendungsteams: Stimmen Sie sich mit den Anwendungsteams ab, um Aktualisierungen der Verbindungszeichenfolge vorzunehmen

    • Statusaktualisierungen: Stellen Sie während der Migration regelmäßige Updates bereit

    • Eskalationspfad: Definieren Sie klare Eskalationsverfahren für Probleme

    • Post-migration Kommunikation: Bestätigen Sie den erfolgreichen Abschluss und alle Folgemaßnahmen

  3. Prüfpunkte für die Validierung:

    Implementieren Sie die Validierung in jeder Phase:

    Pre-migration Validierung:

    -- Capture object counts SQL> SELECT object_type, COUNT(*) FROM dba_objects GROUP BY object_type ORDER BY object_type; -- Capture tablespace usage SQL> SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024/1024, 2) AS size_gb FROM dba_data_files GROUP BY tablespace_name; -- Capture user counts SQL> SELECT COUNT(*) FROM dba_users; -- For multitenant, capture PDB information SQL> SELECT con_id, name, open_mode FROM v$pdbs;

    Post-migration Validierung:

    -- Verify object counts match SQL> SELECT object_type, COUNT(*) FROM dba_objects GROUP BY object_type ORDER BY object_type; -- Verify no invalid objects SQL> SELECT owner, object_type, object_name FROM dba_objects WHERE status = 'INVALID'; -- Verify tablespace usage SQL> SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024/1024, 2) AS size_gb FROM dba_data_files GROUP BY tablespace_name; -- Verify database size matches SQL> SELECT SUM(bytes)/1024/1024/1024 AS total_size_gb FROM dba_data_files; -- For multitenant, verify all PDBs are open SQL> SELECT con_id, name, open_mode FROM v$pdbs;
  4. Validierung der Leistung:

    Vergleichen Sie die Leistungskennzahlen vor und nach der Migration:

    -- Capture AWR snapshots before migration (on RDS Custom) SQL> EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT; -- After migration (on EC2), compare metrics SQL> SELECT snap_id, begin_interval_time, end_interval_time FROM dba_hist_snapshot ORDER BY snap_id DESC FETCH FIRST 10 ROWS ONLY; -- Generate AWR report for comparison SQL> @?/rdbms/admin/awrrpt.sql

    Wichtige Kennzahlen zum Vergleich:

    • Durchschnittliche aktive Sitzungen

    • DB-Zeit pro Transaktion

    • Physische Lesevorgänge pro Sekunde

    • Logische Lesevorgänge pro Sekunde

    • Redo-Größe pro Sekunde

    • Benutzeranrufe pro Sekunde

    • Analysezeit pro Ausführung

Post-migration Optimierung

  1. Optimieren Sie nach der Migration die Datenbankleistung:

    1. Optimierung der Datenbankleistung:

      Statistiken sammeln:

      -- Gather dictionary statistics SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS; -- Gather fixed object statistics SQL> EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS; -- Gather schema statistics SQL> EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCHEMA_NAME', cascade=>TRUE); -- For multitenant, gather statistics for each PDB SQL> ALTER SESSION SET CONTAINER = PDB_NAME; SQL> EXEC DBMS_STATS.GATHER_DATABASE_STATS(cascade=>TRUE);

      Speicherparameter optimieren:

      -- Enable Automatic Memory Management (if not already enabled) SQL> ALTER SYSTEM SET MEMORY_TARGET = 24G SCOPE=SPFILE; SQL> ALTER SYSTEM SET MEMORY_MAX_TARGET = 28G SCOPE=SPFILE; SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP; -- Or use Automatic Shared Memory Management SQL> ALTER SYSTEM SET SGA_TARGET = 16G SCOPE=SPFILE; SQL> ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 8G SCOPE=SPFILE;

      Ergebnis-Cache konfigurieren:

      -- Enable result cache for frequently accessed queries SQL> ALTER SYSTEM SET RESULT_CACHE_MAX_SIZE = 1G; SQL> ALTER SYSTEM SET RESULT_CACHE_MODE = MANUAL;
    2. Speicheroptimierung:

      Komprimierung aktivieren:

      -- For tables with infrequent updates ALTER TABLE large_table MOVE COMPRESS FOR OLTP; -- For archive/historical data ALTER TABLE archive_table MOVE COMPRESS FOR ARCHIVE HIGH; -- Rebuild indexes after compression ALTER INDEX index_name REBUILD ONLINE;

      Partitionierung implementieren:

      -- For large tables, consider partitioning -- Example: Range partitioning by date CREATE TABLE sales_partitioned ( sale_id NUMBER, sale_date DATE, amount NUMBER ) PARTITION BY RANGE (sale_date) ( PARTITION sales_2024 VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD')), PARTITION sales_2025 VALUES LESS THAN (TO_DATE('2026-01-01', 'YYYY-MM-DD')), PARTITION sales_2026 VALUES LESS THAN (MAXVALUE) );
    3. Implementieren Sie Überwachung und Warnmeldungen:

      CloudWatch benutzerdefinierte Metriken:

      Erstellen Sie ein Skript zum Veröffentlichen von Oracle-Metriken in CloudWatch:

      #!/bin/bash # publish_oracle_metrics.sh INSTANCE_ID=$(ec2-metadata --instance-id | cut -d " " -f 2) REGION=$(ec2-metadata --availability-zone | cut -d " " -f 2 | sed 's/[a-z]$//') # Get tablespace usage TABLESPACE_USAGE=$(sqlplus -s / as sysdba << EOF SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF SELECT ROUND(MAX(percent_used), 2) FROM ( SELECT tablespace_name, ROUND((used_space/tablespace_size)*100, 2) AS percent_used FROM dba_tablespace_usage_metrics ); EXIT; EOF ) # Publish to CloudWatch aws cloudwatch put-metric-data \ --region $REGION \ --namespace "Oracle/Database" \ --metric-name "TablespaceUsage" \ --value $TABLESPACE_USAGE \ --unit Percent \ --dimensions InstanceId=$INSTANCE_ID,Database=ORCL # Add more metrics as needed (sessions, wait events, etc.)

      CloudWatch Alarme einrichten:

      # Create alarm for high tablespace usage aws cloudwatch put-metric-alarm \ --alarm-name oracle-high-tablespace-usage \ --alarm-description "Alert when tablespace usage exceeds 85%" \ --metric-name TablespaceUsage \ --namespace Oracle/Database \ --statistic Maximum \ --period 300 \ --evaluation-periods 2 \ --threshold 85 \ --comparison-operator GreaterThanThreshold \ --alarm-actions arn:aws:sns:region:account-id:topic-name
    4. Verhärtung der Sicherheit:

      Datenbanksicherheit:

      -- Enforce password complexity ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 90 PASSWORD_GRACE_TIME 7 PASSWORD_REUSE_TIME 365 PASSWORD_REUSE_MAX 5 FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LOCK_TIME 1; -- Enable audit ALTER SYSTEM SET AUDIT_TRAIL = DB, EXTENDED SCOPE=SPFILE; SHUTDOWN IMMEDIATE; STARTUP; -- Audit critical operations AUDIT ALL ON SYS.AUD$ BY ACCESS; AUDIT CREATE USER BY ACCESS; AUDIT DROP USER BY ACCESS; AUDIT ALTER USER BY ACCESS; AUDIT CREATE SESSION BY ACCESS WHENEVER NOT SUCCESSFUL;

      Netzwerksicherheit:

      # Restrict SSH access sudo vi /etc/ssh/sshd_config # Set: PermitRootLogin no # Set: PasswordAuthentication no # Configure firewall sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" port port="1521" protocol="tcp" accept' sudo firewall-cmd --reload # Enable Oracle Native Network Encryption # Edit sqlnet.ora SQLNET.ENCRYPTION_SERVER = REQUIRED SQLNET.ENCRYPTION_TYPES_SERVER = (AES256, AES192, AES128) SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256, SHA384, SHA512)
  1. Backup- und Wiederherstellungsstrategie:

    Implementieren Sie eine umfassende Backup-Strategie:

    #!/bin/bash # rman_backup.sh - Daily incremental backup script export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 export ORACLE_SID=ORCL export PATH=$ORACLE_HOME/bin:$PATH # Backup to local disk rman target / << EOF RUN { ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT '/u01/app/oracle/backup/inc_%U'; BACKUP INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG; DELETE NOPROMPT OBSOLETE; CROSSCHECK BACKUP; DELETE NOPROMPT EXPIRED BACKUP; } EXIT; EOF # Copy backups to S3 aws s3 sync /u01/app/oracle/backup/ s3://my-oracle-backups/$(date +%Y%m%d)/ \ --storage-class STANDARD_IA \ --exclude "*" \ --include "inc_*" \ --include "arch_*" # Clean up local backups older than 7 days find /u01/app/oracle/backup/ -name "inc_*" -mtime +7 -delete find /u01/app/oracle/backup/ -name "arch_*" -mtime +7 -delete

    Planen Sie Backups mit Cron:

    # Edit crontab crontab -e # Add backup schedule # Full backup on Sunday at 2 AM 0 2 * * 0 /home/oracle/scripts/rman_full_backup.sh >> /home/oracle/logs/backup_full.log 2>&1 # Incremental backup Monday-Saturday at 2 AM 0 2 * * 1-6 /home/oracle/scripts/rman_incremental_backup.sh >> /home/oracle/logs/backup_inc.log 2>&1 # Archive log backup every 4 hours 0 */4 * * * /home/oracle/scripts/rman_archivelog_backup.sh >> /home/oracle/logs/backup_arch.log 2>&1

Kostenoptimierung

1. Right-sizing:

Überwachen und optimieren Sie die Kosten nach der Migration:

  • Verwenden Sie den AWS Cost Explorer, um die EC2- und EBS-Kosten zu analysieren

  • AWS Compute Optimizer für Empfehlungen zu Instanztypen aktivieren

  • Überprüfen Sie die CloudWatch Kennzahlen, um nicht ausgelastete Ressourcen zu identifizieren

  • Ziehen Sie Reserved Instances oder Savings Plans für vorhersehbare Workloads in Betracht

2. Speicheroptimierung:

  • Implementieren Sie Lebenszyklusrichtlinien für S3-Backups (wechseln Sie nach 30 Tagen zu Glacier)

  • Löschen Sie regelmäßig ungenutzte EBS-Snapshots

  • Verwenden Sie gp3 anstelle von gp2 für Kosteneinsparungen bei gleicher Leistung

  • Trennen und löschen Sie die Backup-Volumes nach Abschluss der Migration

3. Automatisierung:

  • Automatisierung start/stop von Datenbanken außerhalb der Geschäftszeiten

  • Verwenden Sie AWS Systems Manager für das Patch-Management

  • Implementieren Sie die auto-scaling für Read Replicas, wenn Sie Data Guard verwenden

Schlussfolgerung

Diese präskriptiven Leitlinien enthielten detaillierte Migrationsstrategien für die Migration Ihrer Oracle-Datenbanken von Amazon RDS Custom for Oracle zu selbstverwalteten Oracle-Datenbanken auf Amazon EC2. Da der Dienst RDS Custom for Oracle mit Wirkung zum 31. März 2027 nicht mehr unterstützt wird, ist es wichtig, dass Sie Ihre Migration rechtzeitig planen und durchführen.

Die wichtigsten Erkenntnisse

Optionen für die Migration:

  • Aktive RMAN-Duplikation: Für die meisten Migrationen am besten geeignet, hält die Quelldatenbank während der Duplizierung online und erfordert nur ein kurzes Umstellungsfenster für die Anwendungsumleitung

  • Oracle Data Guard: Am besten für unternehmenskritische Workloads geeignet, die nahezu keine Ausfallzeiten erfordern. Es bietet kontinuierliche Synchronisation und integrierte Switchover-Funktionen

Architekturunterstützung:

  • Beide Migrationsoptionen unterstützen Nicht-CDB-Architekturen (herkömmliche Einzelinstanz) und Mehrmandantenarchitekturen (CDB mit PDBs)

  • Bei Mehrmandantenfähigkeit verarbeiten beide Methoden automatisch die gesamte CDB einschließlich aller PDBs in einem einzigen Vorgang

  • PDBs müssen nach der Migration manuell geöffnet und automatisch geöffnet werden

Kritische Erfolgsfaktoren:

  • Richtige Netzwerkkonfiguration und Konnektivität zwischen Quelle und Ziel

  • Exakte Versionskompatibilität (Hauptversion, Nebenversion, Release-Update und einmalige Patches)

  • Ausreichende Netzwerkbandbreite für Datenübertragung (RMAN) oder Redo-Shipping (Data Guard)

  • Wir wissen, dass die Quelle durch aktive RMAN-Duplizierung online bleibt — es ist nur eine kurze Umstellung erforderlich

  • Gründliche Tests und Validierung vor der Außerbetriebnahme der Quelle

  • Umfassende Aufgaben nach der Migration, einschließlich Sicherung, Überwachung und Sicherheitskonfiguration

Die nächsten Schritte:

  1. Beurteilen Sie Ihre Datenbankarchitektur (ohne CDB oder mandantenfähig)

  2. Wählen Sie die passende Migrationsoption auf der Grundlage Ihrer Anforderungen an Ausfallzeit, Toleranz und Komplexität

  3. Schließen Sie alle erforderlichen Schritte ab, einschließlich der Einrichtung der EC2-Instanz und der Netzwerkkonfiguration

  4. Folgen Sie den detaillierten Migrationsschritten für die von Ihnen gewählte Option

  5. Führen Sie gründliche Validierungen und Tests durch

  6. Erledigen Sie die Aufgaben nach der Migration, um die Produktionsbereitschaft sicherzustellen

  7. Nehmen Sie die RDS Custom-Instance nach erfolgreicher Validierung außer Betrieb

Weitere Ressourcen

Support

Wenn Sie Unterstützung bei Ihrer Migration benötigen:

  • Wenden Sie sich über die AWS Management Console an den AWS Support

  • Wenden Sie sich bei datenbankspezifischen Fragen an den Oracle-Support

Informationen zum Dokument

Letzte Aktualisierung: März 2026

Mitwirkende:
  • Sharath Chandra Kampili, Lösungsarchitektin für Datenbankspezialisten, Amazon Web Services

  • Ibrahim Emara, Datenbankspezialist, Lösungsarchitekt, Amazon Web Services

  • Vetrivel Subramani, Datenbankspezialist, Lösungsarchitekt, Amazon Web Services