Migrieren einer On-Premises-Oracle-Datenbank zu Amazon RDS für Oracle mithilfe des direkten Oracle Data Pump Imports über einen Datenbanklink - AWS Prescriptive Guidance

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.

Migrieren einer On-Premises-Oracle-Datenbank zu Amazon RDS für Oracle mithilfe des direkten Oracle Data Pump Imports über einen Datenbanklink

Erstellt von Rizwan Wangde (AWS)

Umgebung: Produktion

Quelle: On-Premises-Oracle-Datenbank

Ziel: Amazon RDS für Oracle

R-Typ: Plattformwechsel

Workload: Oracle

Technologien: Migration; Datenbanken

AWS-Services: AWS DMS; AWS Direct Connect; Amazon RDS

Zahlreiche Muster umfassen die Migration von lokalen Oracle-Datenbanken zu Amazon RDS für Oracle mithilfe von Oracle Data Pump, einem nativen Oracle-Dienstprogramm, das die bevorzugte Methode für die Migration großer Oracle-Workloads darstellt. Zu diesen Mustern gehören in der Regel das Exportieren von Anwendungsschemata oder Tabellen in Dumpdateien, das Übertragen der Dumpdateien in ein Datenbankverzeichnis auf Amazon RDS für Oracle und das anschließende Importieren der Anwendungsschemata und Daten aus den Dumpdateien.

Bei diesem Ansatz kann eine Migration je nach Größe der Daten und benötigter Zeit für die Übertragung der Dump-Dateien auf die Amazon-RDS-Instance länger dauern. Darüber hinaus befinden sich die Dump-Dateien auf dem Amazon Elastic Block Store (Amazon EBS)-Volume der Amazon-RDS-Instance, das für die Datenbank und die Dump-Dateien groß genug sein muss. Wenn die Dump-Dateien nach dem Import gelöscht werden, kann der leere Speicherplatz nicht abgerufen werden, sodass Sie weiterhin für ungenutzten Speicherplatz bezahlen.

Dieses Muster behebt diese Probleme, indem es einen direkten Import auf der Amazon-RDS-Instance durchführt, indem die Oracle Data Pump API (DBMS_DATAPUMP) über einen Datenbanklink verwendet wird. Das Muster initiiert eine gleichzeitige Export- und Importpipeline zwischen der Quell- und der Zieldatenbank. Dieses Muster erfordert keine Größenanpassung eines EBS-Volumes für die Dump-Dateien, da keine Dump-Dateien auf dem Volume erstellt oder gespeichert werden. Dieser Ansatz spart die monatlichen Kosten für ungenutzten Speicherplatz.

Voraussetzungen

  • Ein aktives Amazon Web Services (AWS)-Konto.

  • Eine Virtual Private Cloud (VPC), die mit privaten Subnetzen in mindestens zwei Availability Zones konfiguriert ist, um die Netzwerkinfrastruktur für die Amazon-RDS-Instance bereitzustellen.

  • Eine Oracle-Datenbank in einem On-Premises-Rechenzentrum.

  • Eine vorhandene Amazon RDS Oracle-Instance in einer einzigen Availability Zone. Die Verwendung einer einzigen Availability Zone verbessert die Schreibleistung während der Migration. Eine Multi-AZ-Bereitstellung kann 24–48 Stunden vor dem Cutover aktiviert werden.

  • AWS Direct Connect (empfohlen für große Datenbanken).

  • Netzwerkkonnektivität und Firewallregeln On-Premises, die so konfiguriert sind, dass eine eingehende Verbindung von der Amazon-RDS-Instance zur On-Premises-Oracle-Datenbank zugelassen wird.

Einschränkungen

  • Die Datenbankgrößenbeschränkung auf Amazon RDS für Oracle beträgt 64 TiB (ab Dezember 2022).

Produktversionen

  • Quelldatenbank: Oracle Database Version 10g Release 1 und höher.

  • Zieldatenbank: Die neueste Liste der unterstützten Versionen und Editionen in Amazon RDS finden Sie unter Amazon RDS for Oracle in der AWS-Dokumentation.

Quelltechnologie-Stack

  • Selbstverwaltete Oracle-Datenbank On-Premises oder in der Cloud

Zieltechnologie-Stack

  • Amazon RDS für Oracle

Zielarchitektur

Das folgende Diagramm zeigt die Architektur für die Migration von einer On-Premises-Oracle-Datenbank zu Amazon RDS für Oracle in einer Single-AZ-Umgebung. Die Pfeilrichtungen zeigen den Datenfluss in der Architektur. Das Diagramm zeigt nicht, welche Komponente die Verbindung initiiert.

""
  1. Die Amazon RDS for Oracle-Instance stellt eine Verbindung zur lokalen Oracle-Quelldatenbank her, um eine Volllastmigration über den Datenbanklink durchzuführen.

  2. AWS DMS stellt eine Verbindung mit der lokalen Oracle-Quelldatenbank her, um mithilfe von Change Data Capture (CDC) eine fortlaufende Replikation durchzuführen.

  3. CDC-Änderungen werden auf die Datenbank von Amazon RDS für Oracle angewendet.

AWS-Services

  • AWS Database Migration Service (AWS DMS) unterstützt Sie bei der Migration von Datenspeichern in die AWS Cloud oder zwischen Kombinationen von Cloud- und On-Premises-Einrichtungen. Dieses Muster verwendet CDC und die Einstellung Nur Datenänderungen replizieren.

  • AWS Direct Connect verbindet Ihr internes Netzwerk über ein standardmäßiges Ethernet-Glasfaserkabel mit einem Direct Connect-Standort. Mit dieser Verbindung können Sie virtuelle Schnittstellen direkt zu öffentlichen AWS-Services erstellen und gleichzeitig Internetdienstanbieter in Ihrem Netzwerkpfad umgehen.

  • Amazon Relational Database Service (Amazon RDS) for Oracle unterstützt Sie bei der Einrichtung, dem Betrieb und der Skalierung einer relationalen Oracle-Datenbank in der AWS Cloud.

Andere Tools

  • Mit Oracle Data Pump können Sie Daten und Metadaten mit hohen Geschwindigkeiten von einer Datenbank in eine andere verschieben.

  • Client-Tools wie Oracle Instant Client oder SQL Developer werden verwendet, um SQL-Abfragen in der Datenbank zu verbinden und auszuführen.

Obwohl AWS Direct Connect dedizierte, private Netzwerkverbindungen zwischen dem On-Premises-Netzwerk und AWS verwendet, sollten Sie die folgenden Optionen für zusätzliche Sicherheit und Datenverschlüsselung für Daten während der Übertragung berücksichtigen:

AufgabeBeschreibungErforderliche Fähigkeiten

Richten Sie die Netzwerkkonnektivität von der Zieldatenbank zur Quelldatenbank ein.

Konfigurieren Sie das On-Premises-Netzwerk und die Firewall, um eingehende Verbindungen von der Amazon RDS-Ziel-Instance zur lokalen Oracle-Quelldatenbank zuzulassen.

Netzwerkadministrator, Sicherheitsingenieur

Erstellen Sie einen Datenbankbenutzer mit den entsprechenden Berechtigungen.

Erstellen Sie einen Datenbankbenutzer in der lokalen Oracle-Quelldatenbank mit Berechtigungen zum Migrieren von Daten zwischen Quelle und Ziel mithilfe von Oracle Data Pump.

GRANT CONNECT to <migration_user>; GRANT DATAPUMP_EXP_FULL_DATABASE to <migration_user>; GRANT SELECT ANY TABLE to <migration_user>;
DBA

Bereiten Sie die On-Premises-Quelldatenbank für die AWS DMS-CDC-Migration vor.

(Optional) Bereiten Sie die lokale Oracle-Quelldatenbank nach Abschluss von Oracle Data Pump Full Load für die AWS DMS-CDC-Migration vor:

  1. Konfigurieren Sie die zusätzlichen Berechtigungen, die für die Verwaltung von FLASHBACK während der Oracle Data Pump-Migration erforderlich sind.

    GRANT FLASHBACK ANY TABLE to <migration_user>; GRANT FLASHBACK ARCHIVE ADMINISTER to <migration_user>;
  2. Informationen zum Konfigurieren der erforderlichen Benutzerkontoberechtigungen für eine selbstverwaltete Oracle-Quelle für AWS DMS finden Sie in der AWS DMS-Dokumentation.

  3. Informationen zur Vorbereitung einer selbstverwalteten Oracle-Quelldatenbank für CDC mit AWS DMS finden Sie in der AWS DMS-Dokumentation.

DBA

Installieren und konfigurieren Sie SQL Developer.

Installieren und konfigurieren Sie SQL Developer, um SQL-Abfragen in den Quell- und Zieldatenbanken zu verbinden und auszuführen.

DBA, Migrationsingenieur

Generieren Sie ein Skript, um die Tabellenbereiche zu erstellen.

Verwenden Sie die folgende Beispiel-SQL-Abfrage, um das Skript in der Quelldatenbank zu generieren.

SELECT 'CREATE TABLESPACE ' tablespace_name ' DATAFILE SIZE 1G AUTOEXTEND ON MAXSIZE UNLIMITED;' from dba_tablespaces where tablespace_name not in ('SYSTEM', 'SYSAUX','TEMP','UNDOTBS1') order by 1;

Das Skript wird auf die Zieldatenbank angewendet.

DBA

Generieren Sie ein Skript, um Benutzer, Profile, Rollen und Berechtigungen zu erstellen.

Um ein Skript zum Erstellen der Datenbankbenutzer, Profile, Rollen und Berechtigungen zu generieren, verwenden Sie die Skripts aus dem Oracle Support-Dokument So extrahieren Sie DDL für Benutzer einschließlich Berechtigungen und Rollen mit dbms_metadata.get_ddl (Dokument-ID 2739952.1) (Oracle-Konto erforderlich).

Das Skript wird auf die Zieldatenbank angewendet.

DBA
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie einen Datenbanklink zur Quelldatenbank und überprüfen Sie die Konnektivität.

Um einen Datenbanklink zur On-Premises-Quelldatenbank zu erstellen, können Sie den folgenden Beispielbefehl verwenden.

CREATE DATABASE LINK link2src CONNECT TO <migration_user_account> IDENTIFIED BY <password> USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<dns or ip address of remote db>) (PORT=<listener port>))(CONNECT_DATA=(SID=<remote SID>)))';

Führen Sie den folgenden SQL-Befehl aus, um die Konnektivität zu überprüfen.

select * from dual@link2src;

Die Konnektivität ist erfolgreich, wenn die Antwort lautetX.

DBA

Führen Sie die Skripts aus, um die Ziel-Instance vorzubereiten.

Führen Sie die zuvor generierten Skripts aus, um die Ziel-Instance von Amazon RDS für Oracle vorzubereiten:

  1. Tablespaces

  2. Profile

  3. Rollen

Dadurch wird sichergestellt, dass die Oracle Data Pump-Migration die Schemata und ihre Objekte erstellen kann.

DBA, Migrationsingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Migrieren Sie die erforderlichen Schemata.

Um die erforderlichen Schemata von der On-Premises-Quelldatenbank zur Amazon-RDS-Ziel-Instance zu migrieren, verwenden Sie den Code im Abschnitt Zusätzliche Informationen:

  • Um ein einzelnes Schema zu migrieren, führen Sie Code 1 im Abschnitt Zusätzliche Informationen aus.

  • Um mehrere Schemata zu migrieren, führen Sie Code 2 im Abschnitt Zusätzliche Informationen aus.

Um die Leistung der Migration zu optimieren, können Sie die Anzahl der parallelen Prozesse anpassen, indem Sie den folgenden Befehl ausführen.

DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4);
DBA

Erfassen Sie Schemastatistiken, um die Leistung zu verbessern.

Der Befehl Gather Schema Statistics gibt die für Datenbankobjekte gesammelten Statistiken des Oracle-Abfrageoptimierers zurück. Mithilfe dieser Informationen kann der Optimierer den besten Ausführungsplan für jede Abfrage für diese Objekte auswählen.

EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS(ownname => '<schema_name>');
DBA
AufgabeBeschreibungErforderliche Fähigkeiten

Erfassen Sie die SCN in der lokalen Oracle-Quelldatenbank.

Erfassen Sie die Systemänderungsnummer (SCN) in der lokalen Oracle-Quelldatenbank. Sie verwenden die SCN für den Volllastimport und als Ausgangspunkt für die CDC-Replikation.

Um die aktuelle SCN in der Quelldatenbank zu generieren, führen Sie die folgende SQL-Anweisung aus.

SELECT current_scn FROM V$DATABASE;
DBA

Führen Sie die Volllastmigration der Schemata durch.

Gehen Sie wie folgt vor, um die erforderlichen Schemata (FULL LOAD) von der On-Premises-Quelldatenbank zur Amazon-RDS-Ziel-Instance zu migrieren:

  • Um ein einzelnes Schema zu migrieren, führen Sie Code 3 im Abschnitt Zusätzliche Informationen aus.

  • Um mehrere Schemata zu migrieren, führen Sie Code 4 im Abschnitt Zusätzliche Informationen aus.

Ersetzen Sie im Code durch <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE> die SCN, die Sie aus der Quelldatenbank erfasst haben.

DBMS_DATAPUMP.SET_PARAMETER (handle => v_hdnl, name => 'FLASHBACK_SCN', value => <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE>);

Um die Leistung der Migration zu optimieren, können Sie die Anzahl der parallelen Prozesse anpassen.

DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4);
DBA

Deaktivieren Sie die Auslöser unter den migrierten Schemata.

Bevor Sie mit der reinen AWS DMS-CDC-Aufgabe beginnen, deaktivieren Sie TRIGGERS unter den migrierten Schemata.

DBA

Erfassen Sie Schemastatistiken, um die Leistung zu verbessern.

Der Befehl Gather Schema Statistics gibt die für Datenbankobjekte gesammelten Statistiken des Oracle-Abfrageoptimierers zurück. Mithilfe dieser Informationen kann der Optimierer den besten Ausführungsplan für jede Abfrage für diese Objekte auswählen.

EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS(ownname => '<schema_name>');
DBA

Verwenden Sie AWS DMS, um eine fortlaufende Replikation von der Quelle zum Ziel durchzuführen.

Verwenden Sie AWS DMS, um eine fortlaufende Replikation von der Oracle-Quelldatenbank zur Amazon RDS for Oracle-Ziel-Instance durchzuführen.

Weitere Informationen finden Sie unter Erstellen von Aufgaben für die laufende Replikation mit AWS DMS und im Blogbeitrag So arbeiten Sie mit nativer CDC-Unterstützung in AWS DMS.

DBA, Migrationsingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Aktivieren Sie Multi-AZ auf der Instance 48 Stunden vor dem Cutover.

Wenn es sich um eine Produktions-Instance handelt, empfehlen wir, die Multi-AZ-Bereitstellung auf der Amazon-RDS-Instance zu aktivieren, um die Vorteile von Hochverfügbarkeit (HA) und Notfallwiederherstellung (DR) zu nutzen.

DBA, Migrationsingenieur

Stoppen Sie die reine AWS DMS-CDC-Aufgabe (wenn CDC aktiviert war).

  1. Stellen Sie sicher, dass die Quelllatenz und die Ziellatenz für die Amazon- CloudWatch Metriken der AWS DMS-Aufgabe 0 Sekunden anzeigen.

  2. Stoppen Sie die reine AWS DMS-CDC-Aufgabe.

DBA

Aktivieren Sie die Auslöser.

Aktivieren Sie die TRIGOREN, die Sie deaktiviert haben, bevor die CDC-Aufgabe erstellt wurde.

DBA

AWS

Oracle-Dokumentation

Code 1: nur Volllastmigration, Einzelanwendungsschema

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN(operation => 'IMPORT', job_mode => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''<schema_name>'')'); -- To migrate one selected schema DBMS_DATAPUMP.METADATA_FILTER (hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /

Code 2: nur Volllastmigration, mehrere Anwendungsschemata

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN(operation => 'IMPORT', job_mode => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name  => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'SCHEMA_LIST', '''<SCHEMA_1>'',''<SCHEMA_2>'', ''<SCHEMA_3>'''); -- To migrate multiple schemas DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /

Code 3: Volllastmigration vor reine CDC-Aufgabe, Einzelanwendungsschema

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN(operation => 'IMPORT', job_mode => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''<schema_name>'')'); -- To migrate one selected schema DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARAMETER (handle => v_hdnl, name => 'FLASHBACK_SCN', value => <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE>); -- SCN required for AWS DMS CDC only task. DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /

Code 4: Volllastmigration vor reine CDC-Aufgabe, mehrere Anwendungsschemata

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN (operation => 'IMPORT', job_mode  => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name => null); DBMS_DATAPUMP.ADD_FILE (handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'SCHEMA_LIST', '''<SCHEMA_1>'',''<SCHEMA_2>'', ''<SCHEMA_3>'''); -- To migrate multiple schemas DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARAMETER (handle => v_hdnl, name => 'FLASHBACK_SCN', value => <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE>); -- SCN required for AWS DMS CDC only task. DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /

Szenario, in dem ein gemischter Migrationsansatz besser funktionieren kann

In seltenen Szenarien, in denen die Quelldatenbank Tabellen mit Millionen von Zeilen und sehr großen LOBSEGMENT-Spalten enthält, verlangsamt dieses Muster die Migration. Oracle migriert LOBSEGMENTs nacheinander über die Netzwerkverbindung. Es extrahiert eine einzelne Zeile (zusammen mit den LOB-Spaltendaten) aus der Quelltabelle und fügt die Zeile in die Zieltabelle ein, wobei der Vorgang wiederholt wird, bis alle Zeilen migriert sind. Oracle Data Pump über die Datenbankverbindung unterstützt keine Massenlade- oder Direktpfadlademechanismen für LOBSEGMENTs.

In diesem Fall empfehlen wir Folgendes:

  • Überspringen Sie die identifizierten Tabellen während der Oracle Data Pump-Migration, indem Sie den folgenden Metadatenfilter hinzufügen.

    dbms_datapump.metadata_filter(handle =>h1, name=>'NAME_EXPR', value => 'NOT IN (''TABLE_1'',''TABLE_2'')');
  • Verwenden Sie eine AWS DMS-Aufgabe (Migration mit vollständigem Ladevorgang, bei Bedarf mit CDC-Replikation), um die identifizierten Tabellen zu migrieren. AWS DMS extrahiert mehrere Zeilen aus der Oracle-Quelldatenbank und fügt sie in einem Stapel in die Amazon RDS-Ziel-Instance ein, was die Leistung verbessert.