Importieren mit Oracle Data Pump - Amazon Relational Database Service

Importieren mit Oracle Data Pump

Oracle Data Pump ist ein langfristiger Ersatz für die Oracle Export/Import-Dienstprogramme. Oracle Data Pump ist die bevorzugte Methode zum Verschieben großer Datenmengen von einer Oracle-Installation in eine Amazon RDS-DB-Instance. Sie können Oracle Data Pump für mehrere Szenarien verwenden:

  • Importieren von Daten aus einer Oracle-Datenbank (entweder eine lokale oder eine Amazon EC2-Instance) in eine Amazon RDS for Oracle-DB-Instance.

  • Importieren von Daten aus einer RDS for Oracle-DB-Instance in eine Oracle-Datenbank (entweder eine lokale oder eine Amazon EC2-Instance).

  • Importieren von Daten zwischen RDS for Oracle-DB-Instances (beispielsweise zum Migrieren von Daten von EC2-Classic nach VPC).

Sie können Oracle Data Pump-Dienstprogramme unter Oracle Database Software Downloads auf der Oracle Technology Network-Website herunterladen.

Überlegungen zur Kompatibilität bei der Migration zwischen Versionen der Oracle-Datenbank finden Sie in der Oracle-Dokumentation.

Wenn Sie Daten mit Oracle Data Pump importieren, müssen Sie die Dumpdatei mit den Daten aus der Quelldatenbank in die Zieldatenbank übertragen. Sie können die Dumpdatei mithilfe eines Amazon S3-Buckets oder über eine Datenbankverbindung zwischen zwei Datenbanken übertragen.

Wenn Sie Oracle Data Pump zum Importieren von Daten in eine Oracle-DB-Instance verwenden, empfehlen wir die folgenden Best Practices:

  • Führen Sie Importe im Modus schema oder table durch, damit bestimmte Schemata und Objekte importiert werden.

  • Beschränken Sie die Schemata, die Sie importieren, auf solche, die von Ihrer Anwendung benötigt werden.

  • Importieren Sie nicht im full Modus.

    Da Amazon RDS for Oracle den administrativen Benutzern SYS oder SYSDBA keinen Zugriff gewährt, kann das Importieren im Modus full oder das Importieren von Schemata für Oracle-verwaltete Komponenten zu einer Beschädigung des Oracle-Datenwörterbuchs führen und die Stabilität Ihrer Datenbank gefährden.

  • Beim Laden großer Datenmengen gehen Sie folgendermaßen vor:

    1. Übertragen Sie die Dump-Datei an die Ziel-DB-Instance von Amazon RDS for Oracle.

    2. Erstellen Sie einen DB-Snapshot Ihrer Instance.

    3. Testen Sie den Importvorgang, um zu prüfen, ob er erfolgreich ist.

    Wenn Datenbankkomponenten unwirksam sind, können Sie die DB-Instance löschen und sie über den DB-Snapshot neu erstellen. Die wiederhergestellte DB-Instance enthält alle Dumpdateien, die auf der DB-Instance bereitgestellt wurden, als Sie den DB-Snapshot erstellt haben.

  • Importieren Sie keine Dump-Dateien, die mit den Exportparametern von Oracle Data Pump TRANSPORT_TABLESPACES,TRANSPORTABLE, oder TRANSPORT_FULL_CHECK erstellt wurden. Amazon RDS for Oracle -DB-Instances unterstützen das Importieren dieser Dump-Dateien nicht.

  • Importieren Sie keine Speicherabbilddateien, die Oracle Scheduler-Objekte in SYS, SYSTEM, RDSADMIN, RDSSEC und RDS_DATAGUARDenthalten und zu den folgenden Kategorien gehören:

    • Aufträge

    • Programme

    • Schedules

    • Ketten

    • Regeln

    • Auswertungskontexte

    • Regelsätze

    Amazon RDS for Oracle -DB-Instances unterstützen das Importieren dieser Dump-Dateien nicht.

Anmerkung

Um nicht unterstützte Scheduler-Objekte auszuschließen, verwenden Sie zusätzliche Anweisungen während des Data Pump-Exports. Wenn Sie verwenden DBMS_DATAPUMP, fügen Sie eine zusätzliche hinzu METADATA_FILTER vor dem DBMS_METADATA.START_JOB:

DBMS_DATAPUMP.METADATA_FILTER( v_hdnl, 'EXCLUDE_NAME_EXPR', q'[IN (SELECT NAME FROM SYS.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) ) ]', 'PROCOBJ' );

Wenn Sie verwenden expdp, erstellen Sie eine Parameterdatei, die die im folgenden Beispiel dargestellte Exclude-Direktive enthält. Dann benutze es PARFILE=parameter_file mit deinem expdp Kommando.

exclude=procobj:"IN (SELECT NAME FROM sys.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) )"

Die Beispiele in diesem Abschnitt zeigen eine Möglichkeit, Daten in eine Oracle-Datenbank zu importieren. Oracle Data Pump erlaubt jedoch viele Möglichkeiten, Daten zu importieren. Weitere Informationen über Oracle Data Pump finden Sie in der Oracle Database-Dokumentation.

Für die Beispiele in diesem Abschnitt wird das DBMS_DATAPUMP-Paket verwendet. Dieselben Aufgaben können mithilfe der Befehlszeilendienstprogramme impdp und expdp von Oracle Data Pump ausgeführt werden. Sie können diese Dienstprogramme, einschließlich Oracle Instant Client, auf einem Remote-Host als Teil einer Oracle Client-Installation installieren.

Importieren von Daten mit Oracle Data Pump und einem Amazon S3-Bucket

Der folgende Importvorgang verwendet Oracle Data Pump und einen Amazon S3-Bucket. Der Vorgang exportiert Daten in der Quelldatenbank mithilfe des Oracle-Pakets DBMS_DATAPUMP und überträgt die Dumpdatei in einen Amazon S3-Bucket. Anschließend wird die Dump-Datei aus dem Amazon S3-Bucket in das Verzeichnis DATA_PUMP_DIR auf der Amazon RDS for Oracle-Ziel-DB-Instance heruntergeladen. Im abschließenden Schritt werden die Daten mit dem Paket aus der kopierten Dump-Datei in die Amazon RDS for Oracle-DB-Instance importier DBMS_DATAPUMP.

Der Vorgang hat folgende Anforderungen:

  • Es muss ein Amazon-S3-Bucket für Dateiübertragungen verfügbar sein. Dieser Amazon-S3-Bucket muss sich in derselben AWS-Region wie die DB-Instance befinden. Weitere Anleitungen finden Sie unter Erstellen eines Buckets im Amazon Simple Storage Service Handbuch "Erste Schritte".

  • Die Größe des Objekts, das Sie zum Amazon S3-Bucket hochladen, darf höchstens 5 TB betragen. Weitere Informationen zur Arbeit mit Objekten in Amazon S3 finden Sie im Amazon Simple Storage Service User Guide.

    Anmerkung

    Wenn die Größe der Speicherabbilddatei 5 TB überschreitet, können Sie den Oracle Data Pump-Export mit Paralleloption ausführen. Diese Operation verteilt die Daten auf mehrere Speicherabbilddateien, sodass die Grenze von 5 TB für einzelne Dateien nicht überschritten wird.

  • Sie müssen den Amazon S3-Bucket auf die Amazon RDS-Integration vorbereiten, indem Sie die Anleitungen unter befolge Konfigurieren von IAM-Berechtigungen für die Integration von RDS for Oracle in Amazon S3.

  • Sie müssen sicherstellen, dass Sie über ausreichend Speicherplatz verfügen, um die Dump-Datei in der Quell-Instance und der Ziel-DB-Instance zu speichern.

Anmerkung

Dieser Vorgang importiert Dump-Dateien in das Verzeichnis DATA_PUMP_DIR, ein vorkonfiguriertes Verzeichnis auf allen Oracle-DB-Instances. Das Verzeichnis befindet sich im selben Speicher-Volume wie Ihre Datendateien. When Sie die Dump-Datei importieren, belegen die vorhandenen Oracle-Datendateien mehr Speicherplatz. Sie sollten daher sicherstellen, dass Ihre DB-Instance diesen zusätzlichen Platzbedarf erfüllen kann. Die importierte Dump-Datei wird nicht automatisch aus dem Verzeichnis DATA_PUMP_DIR gelöscht oder bereinigt. Zum Entfernen importierter Dump-Dateien verwenden Sie UTL_FILE.FREMOVE, das auf der Oracle-Website zu finden ist.

Der Importvorgang mittels Oracle Data Pump und eines Amazon S3-Buckets besteht aus den folgenden Schritten.

Schritt 1: Erteilen von Berechtigungen für den Benutzer auf der Amazon RDS-Ziel-Instance

Um dem Benutzer auf der RDS-Ziel-Instance Berechtigungen zu erteilen, führen Sie die folgenden Schritte aus:

  1. Verwenden Sie SQL Plus oder Oracle SQL Developer, um sich mit einer Amazon RDS-Oracle-Ziel-DB-Instance zu verbinden, in die die Daten importiert werden sollen. Stellen Sie eine Verbindung als Amazon RDS-Master-Benutzer her. Weitere Information über das Verbinden mit der DB-Instance finden Sie unter Herstellen der Verbindung zu Ihrer Oracle-DB-Instance.

  2. Erstellen Sie die erforderlichen Tabellenräume, bevor Sie Daten importieren. Weitere Informationen finden Sie unter Erstellen und Größenfestlegung von Tabellenräumen.

  3. Wenn das Benutzerkonto, in das die Daten importiert werden sollen, nicht vorhanden ist, erstellen Sie das Benutzerkonto und die Rollen und erteilen Sie die erforderlichen Berechtigungen. Wenn Sie Daten in mehrere Benutzerkonten importieren möchten, erstellen Sie alle Benutzerkonten und Rollen und erteilen Sie die erforderlichen Berechtigungen.

    Mit folgenden Befehlen werden beispielsweise ein neuer Benutzer und die Rollen erstellt und die erforderlichen Berechtigungen zum Importieren der Daten in das Benutzerkonto erteilt.

    CREATE USER schema_1 IDENTIFIED BY <password>; GRANT CREATE SESSION, RESOURCE TO schema_1; ALTER USER schema_1 QUOTA 100M ON users;

    In diesem Beispiel wird dem neuen Benutzer die Berechtigung CREATE SESSION erteilt und die Rolle RESOURCE zugewiesen. Möglicherweise sind je nach zu importierenden Datenbankobjekten zusätzliche Berechtigungen und Rollen erforderlich.

    Anmerkung

    Ersetzen Sie schema_1 durch den Namen Ihres Schemas in diesem Schritt und in den folgenden Schritten.

Schritt 2: DBMS_DATAPUMP verwenden, um eine Dump-Datei zu erstellen

Verwenden Sie SQL Plus oder Oracle SQL Developer mit einem Benutzer mit Administratorrechten, um sich mit der Oracle-Quell-Instance zu verbinden. Wenn die Quelldatenbank eine Amazon RDS for Oracle-DB-Instance ist, stellen Sie eine Verbindung mit dem Amazon RDS-Hauptbenutzer her. Verwenden Sie anschließend das Oracle Data Dump-Dienstprogramm, um eine Dumpdatei zu erstellen.

Das folgende Skript erstellt im Verzeichnis DATA_PUMP_DIR mit dem SCHEMA_1-Schema eine Dump-Datei mit dem Namen sample.dmp. Ersetzen Sie SCHEMA_1 durch den Namen des Schemas, das Sie exportieren möchten.

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'EXPORT', job_mode => 'SCHEMA', job_name => null ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl , filename => 'sample.dmp' , directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_exp.log', directory => 'DATA_PUMP_DIR' , filetype => dbms_datapump.ku$_file_type_log_file ); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''SCHEMA_1'')'); DBMS_DATAPUMP.METADATA_FILTER( v_hdnl, 'EXCLUDE_NAME_EXPR', q'[IN (SELECT NAME FROM sys.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) ) ]', 'PROCOBJ' ); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
Anmerkung

Data Pump-Aufträge werden asynchron gestartet. Weitere Informationen über die Überwachung einer Data Pump-Aufgabe finden Sie unter Überwachung des Aufgabenstatus in der Oracle-Dokumentation. Sie können den Inhalt des Exportprotokolls mithilfe des Verfahrens rdsadmin.rds_file_util.read_text_file anzeigen. Weitere Informationen finden Sie unter Lesen von Dateien in einem DB-Instance-Verzeichnis.

Schritt 3: Hochladen der Dumpdatei in Ihren Amazon S3-Bucket

Laden Sie die Dump-Datei in den Amazon S3-Bucket hoch

Verwenden Sie die Amazon RDS-Prozedur rdsadmin.rdsadmin_s3_tasks.upload_to_s3, um die Dump-Datei in den Amazon S3-Bucket zu kopieren. Das folgende Beispiel lädt alle Dateien aus dem Verzeichnis DATA_PUMP_DIR in einen Amazon S3-Bucket namens mys3bucket hoch.

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'mys3bucket', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

Die Anweisung SELECT gibt die ID der Aufgabe in einem VARCHAR2-Datentyp zurück.

Weitere Informationen finden Sie unter Hochladen von Dateien aus Ihrer DB-Instance von RDS for Oracle in einen Amazon-S3-Bucket.

Schritt 4: Kopieren der exportierten Dumpdatei aus dem Amazon S3-Bucket zur Ziel-DB-Instance

Verwenden Sie SQL Plus oder Oracle SQL Developer, um eine Verbindung mit der Amazon RDS Ziel-Oracle DB-Instance herzustellen. Verwenden Sie anschließend die Amazon RDS-Prozedur rdsadmin.rdsadmin_s3_tasks.download_from_s3, um die Dump-Datei aus dem Amazon S3-Bucket in die Ziel-DB-Instance zu kopieren. Das folgende Beispiel lädt alle Dateien von einem Amazon S3-Bucket mit dem Namen mys3bucket in das Verzeichnis DATA_PUMP_DIR herunter.

SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'mys3bucket', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

Die Anweisung SELECT gibt die ID der Aufgabe in einem VARCHAR2-Datentyp zurück.

Weitere Informationen finden Sie unter Hochladen von Dateien aus einem Amazon S3-Bucket zu einer Oracle-DB-Instance.

Schritt 5: Verwenden von DBMS_DATAPUMP zum Importieren der Datendatei auf der Ziel-DB-Instance

Verwenden Sie Oracle Data Pump, um das Schema in die DB-Instance zu kopieren. Möglicherweise sind zusätzliche Optionen wie METADATA_REMAP erforderlich.

Stellen Sie zum Importieren unter Verwendung des Amazon RDS-Master-Benutzerkontos eine Verbindung zur DB-Instance her.

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'SCHEMA', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_copied.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_imp.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''SCHEMA_1'')'); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
Anmerkung

Data Pump-Aufträge werden asynchron gestartet. Weitere Informationen über die Überwachung einer Data Pump-Aufgabe finden Sie unter Überwachung des Aufgabenstatus in der Oracle-Dokumentation. Sie können den Inhalt des Importprotokolls mithilfe des Verfahrens rdsadmin.rds_file_util.read_text_file anzeigen. Weitere Informationen finden Sie unter Lesen von Dateien in einem DB-Instance-Verzeichnis.

Sie können den Datenimport überprüfen, indem Sie die Tabelle des Benutzers zur DB-Instance aufrufen. Beispiel: Die folgende Abfrage gibt die Anzahl der Tabellen für zurüc SCHEMA_1.

SELECT COUNT(*) FROM DBA_TABLES WHERE OWNER='SCHEMA_1';

Schritt 6: Bereinigen

Nachdem die Daten importiert wurden, können Sie die Dateien, die Sie nicht länger benötigen, löschen. Mit dem folgenden Befehl können Sie Dateien in DATA_PUMP_DIR auflisten.

SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir('DATA_PUMP_DIR')) ORDER BY MTIME;

Um die Dateien in DATA_PUMP_DIR zu löschen, die nicht länger benötigt werden, verwenden Sie den folgenden Befehl:

EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','<file name>');

So wird mit dem folgenden Befehl beispielsweise die Datei gelösch "sample_copied.dmp".

EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','sample_copied.dmp');

Der folgende Importvorgang verwendet Oracle Data Pump und das Oracle-Paket DBMS_FILE_TRANSFER. Bei diesem Vorgang wird eine Verbindung mit einer Oracle-Quell-Instance hergestellt, die eine lokale oder eine Amazon EC2-Instance oder eine Amazon RDS for Oracle-DB-Instance sein kann. Der Vorgang exportiert dann mittels des Pakets DBMS_DATAPUMP Daten. Anschließend wird mithilfe der Methode DBMS_FILE_TRANSFER.PUT_FILE die Dump-Datei aus der Oracle-Instance in das Verzeichnis DATA_PUMP_DIR auf der Amazon RDS for Oracle-Ziel-DB-Instance kopiert, die über eine Datenbankverbindung verbunden ist. Im abschließenden Schritt werden die Daten mit dem Paket DBMS_DATAPUMP aus der kopierten Dump-Datei in die Amazon RDS for Oracle-DB-Instance importiert.

Der Vorgang hat folgende Anforderungen:

  • Sie müssen über Ausführungsberechtigungen für die Pakete DBMS_FILE_TRANSFER und DBMS_DATAPUMP verfügen.

  • Sie müssen über Schreibrechte für das Verzeichnis DATA_PUMP_DIR auf der Quell-DB-Instance verfügen.

  • Sie müssen sicherstellen, dass Sie über ausreichend Speicherplatz verfügen, um die Dump-Datei in der Quell-Instance und der Ziel-DB-Instance zu speichern.

Anmerkung

Dieser Vorgang importiert Dump-Dateien in das Verzeichnis DATA_PUMP_DIR, ein vorkonfiguriertes Verzeichnis auf allen Oracle-DB-Instances. Das Verzeichnis befindet sich im selben Speicher-Volume wie Ihre Datendateien. When Sie die Dump-Datei importieren, belegen die vorhandenen Oracle-Datendateien mehr Speicherplatz. Sie sollten daher sicherstellen, dass Ihre DB-Instance diesen zusätzlichen Platzbedarf erfüllen kann. Die importierte Dump-Datei wird nicht automatisch aus dem Verzeichnis DATA_PUMP_DIR gelöscht oder bereinigt. Zum Entfernen importierter Dump-Dateien verwenden Sie UTL_FILE.FREMOVE, das auf der Oracle-Website zu finden ist.

Der Importvorgang mittels Oracle Data Pump und des DBMS_FILE_TRANSFER-Pakets besteht aus den folgenden Schritten.

Schritt 1: Erteilen von Berechtigungen für den Benutzer auf der Amazon RDS-Ziel-Instance

Um dem Benutzer auf der RDS-Ziel-Instance Berechtigungen zu erteilen, führen Sie die folgenden Schritte aus:

  1. Verwenden Sie SQL Plus oder Oracle SQL Developer, um sich mit einer Amazon RDS-Oracle-Ziel-DB-Instance zu verbinden, in die die Daten importiert werden sollen. Stellen Sie eine Verbindung als Amazon RDS-Master-Benutzer her. Weitere Information über das Verbinden mit der DB-Instance finden Sie unter Herstellen der Verbindung zu Ihrer Oracle-DB-Instance.

  2. Erstellen Sie die erforderlichen Tabellenräume, bevor Sie Daten importieren. Weitere Informationen finden Sie unter Erstellen und Größenfestlegung von Tabellenräumen.

  3. Wenn das Benutzerkonto, in das die Daten importiert werden sollen, nicht vorhanden ist, erstellen Sie das Benutzerkonto und die Rollen und erteilen Sie die erforderlichen Berechtigungen. Wenn Sie Daten in mehrere Benutzerkonten importieren möchten, erstellen Sie alle Benutzerkonten und Rollen und erteilen Sie die erforderlichen Berechtigungen.

    Mit folgenden Befehlen werden beispielsweise ein neuer Benutzer und die Rollen erstellt und die erforderlichen Berechtigungen zum Importieren der Daten in das Benutzerkonto erteilt.

    CREATE USER schema_1 IDENTIFIED BY <password>; GRANT CREATE SESSION, RESOURCE TO schema_1; ALTER USER schema_1 QUOTA 100M ON users;

    In diesem Beispiel wird dem neuen Benutzer die Berechtigung CREATE SESSION erteilt und die Rolle RESOURCE zugewiesen. Möglicherweise sind je nach zu importierenden Datenbankobjekten zusätzliche Berechtigungen und Rollen erforderlich.

    Anmerkung

    Ersetzen Sie schema_1 durch den Namen Ihres Schemas in diesem Schritt und in den folgenden Schritten.

Schritt 2: Erteilen von Berechtigungen für Benutzer in der Quell-Datenbank

Verwenden Sie SQL*Plus oder Oracle SQL Developer, um eine Verbindung mit einer Oracle-Instance herzustellen, die die zu importierenden Daten enthält. Falls nötig, erstellen Sie ein Benutzerkonto und gewähren die notwendigen Berechtigungen.

Anmerkung

Wenn die Quell-Datenbank eine Amazon RDS-Instance ist, können Sie diesen Schritt übergehen. Sie verwenden Ihr Amazon RDS-Master-Benutzerkonto zum Exportieren.

Die folgenden Befehle erstellen einen neuen Benutzer und gewähren die notwendigen Berechtigungen.

CREATE USER export_user IDENTIFIED BY <password>; GRANT CREATE SESSION, CREATE TABLE, CREATE DATABASE LINK TO export_user; ALTER USER export_user QUOTA 100M ON users; GRANT READ, WRITE ON DIRECTORY data_pump_dir TO export_user; GRANT SELECT_CATALOG_ROLE TO export_user; GRANT EXECUTE ON DBMS_DATAPUMP TO export_user; GRANT EXECUTE ON DBMS_FILE_TRANSFER TO export_user;

Schritt 3: DBMS_DATAPUMP verwenden, um eine Dump-Datei zu erstellen

Verwenden Sie SQL Plus oder Oracle SQL Developer mit einem Benutzer mit Administratorrechten oder mit dem in Schritt 2 erstellten Benutzer, um sich mit der Oracle-Quell-Instance zu verbinden. Wenn die Quelldatenbank eine Amazon RDS for Oracle-DB-Instance ist, stellen Sie eine Verbindung mit dem Amazon RDS-Hauptbenutzer her. Verwenden Sie anschließend das Oracle Data Dump-Dienstprogramm, um eine Dumpdatei zu erstellen.

Das folgende Skript erstellt im Verzeichnis DATA_PUMP_DIR eine Dump-Datei mit dem Namen sample.dmp.

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'EXPORT' , job_mode => 'SCHEMA' , job_name => null ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample.dmp' , directory => 'DATA_PUMP_DIR' , filetype => dbms_datapump.ku$_file_type_dump_file ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl , filename => 'sample_exp.log' , directory => 'DATA_PUMP_DIR' , filetype => dbms_datapump.ku$_file_type_log_file ); DBMS_DATAPUMP.METADATA_FILTER( v_hdnl , 'SCHEMA_EXPR' , 'IN (''SCHEMA_1'')' ); DBMS_DATAPUMP.METADATA_FILTER( v_hdnl, 'EXCLUDE_NAME_EXPR', q'[IN (SELECT NAME FROM sys.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) ) ]', 'PROCOBJ' ); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
Anmerkung

Data Pump-Aufträge werden asynchron gestartet. Weitere Informationen über die Überwachung einer Data Pump-Aufgabe finden Sie unter Überwachung des Aufgabenstatus in der Oracle-Dokumentation. Sie können den Inhalt des Exportprotokolls mithilfe des Verfahrens rdsadmin.rds_file_util.read_text_file anzeigen. Weitere Informationen finden Sie unter Lesen von Dateien in einem DB-Instance-Verzeichnis.

Schritt 4: Einen Datenbank-Link zur Ziel-DB-Instance erstellen

Erstellen Sie einen Datenbank-Link zwischen Ihrer Quell-Instance und Ihrer Ziel-DB-Instance. Ihre lokale Oracle-Instance muss über eine Netzwerkverbindung mit der DB-Instance verfügen, damit eine Datenbankverbindung erstellt und Ihre Dumpdatei übermittelt werden kann.

Führen Sie diesen Schritt mit demselben Benutzerkonto wie im vorherigen Schritt aus.

Wenn Sie einen Datenbank-Link zwischen zwei DB-Instances innerhalb derselben VPC oder in gleichrangigen VPCs erstellen, sollten die beiden DB-Instances über eine gültige Route verfügen. Die Sicherheitsgruppe jeder DB-Instance muss den Eintritt und den Austritt von einer zur anderen DB-Instance erlauben. Die eingehenden und die ausgehenden Regeln der Sicherheitsgruppe können sich auf Sicherheitsgruppen aus derselben VPC oder aus einer gleichrangigen VPC beziehen. Weitere Informationen finden Sie unter Anpassen von Datenbank-Links für die Verwendung mit DB-Instances in einer VPC.

Mit dem folgenden Befehl wird eine Datenbankverbindung mit dem Namen to_rds erstellt, die eine Verbindung mit dem Amazon RDS-Master-Benutzer auf der Ziel-DB-Instance herstellt.

CREATE DATABASE LINK to_rds CONNECT TO <master_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>)))';

Schritt 5: Verwenden Sie DBMS_FILE_TRANSFER, um die exportierte Dumpdatei in die Ziel-DB-Instance zu kopieren.

Verwenden Sie DBMS_FILE_TRANSFER, um die Dump-Datei aus der Datenbank der Quell-Instance zur Ziel-DB-Instance zu kopieren. Mit dem folgenden Skript wird eine Dumpdatei mit dem Namen sample.dmp aus der Quell-Instance zu einer Ziel-Datenbankverbindung mit dem Namen to_rds (im vorherigen Schritt erstellt) kopiert.

BEGIN DBMS_FILE_TRANSFER.PUT_FILE( source_directory_object => 'DATA_PUMP_DIR', source_file_name => 'sample.dmp', destination_directory_object => 'DATA_PUMP_DIR', destination_file_name => 'sample_copied.dmp', destination_database => 'to_rds' ); END; /

Schritt 6: Verwenden von DBMS_DATAPUMP zum Importieren der Datendatei zur Ziel-DB-Instance

Verwenden Sie Oracle Data Pump, um das Schema in die DB-Instance zu kopieren. Möglicherweise sind zusätzliche Optionen wie METADATA_REMAP erforderlich.

Stellen Sie zum Importieren unter Verwendung des Amazon RDS-Master-Benutzerkontos eine Verbindung zur DB-Instance her.

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'SCHEMA', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_copied.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_imp.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''SCHEMA_1'')'); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
Anmerkung

Data Pump-Aufträge werden asynchron gestartet. Weitere Informationen über die Überwachung einer Data Pump-Aufgabe finden Sie unter Überwachung des Aufgabenstatus in der Oracle-Dokumentation. Sie können den Inhalt des Importprotokolls mithilfe des Verfahrens rdsadmin.rds_file_util.read_text_file anzeigen. Weitere Informationen finden Sie unter Lesen von Dateien in einem DB-Instance-Verzeichnis.

Sie können den Datenimport überprüfen, indem Sie die Tabelle des Benutzers zur DB-Instance aufrufen. Beispiel: Die folgende Abfrage gibt die Anzahl der Tabellen für zurüc schema_1.

SELECT COUNT(*) FROM DBA_TABLES WHERE OWNER='SCHEMA_1';

Schritt 7: Bereinigen

Nachdem die Daten importiert wurden, können Sie die Dateien, die Sie nicht länger benötigen, löschen. Sie können die Dateien in DATA_PUMP_DIR mit dem folgenden Befehl auflisten.

SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir('DATA_PUMP_DIR')) ORDER BY MTIME;

Um Dateien in DATA_PUMP_DIR zu löschen, die nicht länger benötigt werden, verwenden Sie den folgenden Befehl:

EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','<file name>');

So wird mit dem folgenden Befehl beispielsweise die Datei gelösch "sample_copied.dmp".

EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','sample_copied.dmp');