选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

使用 Oracle 数据泵将本地 Oracle 数据库迁移到 Amazon RDS for Oracle

聚焦模式
使用 Oracle 数据泵将本地 Oracle 数据库迁移到 Amazon RDS for Oracle - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建者:Mohan Annam(AWS)和 Brian motzer(AWS)

摘要

此模式描述了如何使用 Oracle 数据泵将 Oracle 数据库从本地数据中心迁移到 Amazon Relational Database Service(Amazon RDS)for Oracle 数据库实例。 

该模式包括从源数据库创建数据转储文件,将文件存储在 Amazon Simple Storage Service(Amazon S3)存储桶中,然后将数据恢复到 Amazon RDS for Oracle 数据库实例中。当您使用 AWS Database Migration Service(AWS DMS)进行迁移遇到限制时,此模式非常有用。

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account

  • 在 AWS Identity and Access Management (IAM) 中创建角色以及 Amazon S3 分段上传所需权限

  • 从源数据库导出数据所需权限

  • AWS 命令行界面(AWS CLI)已安装配置

产品版本

  • Oracle 数据泵仅适用于 Oracle 数据库 10g 发行版 1 (10.1) 及更高版本。

架构

源技术堆栈

  • 本地 Oracle 数据库

目标技术堆栈

  • Amazon RDS for Oracle

  • SQL 客户端(Oracle SQL 开发人员)

  • 一个 S3 存储桶

源架构和目标架构

使用 Oracle 数据泵将 Amazon S3 从本地 Oracle 数据库分段上传到 Amazon RDS。

工具

Amazon Web Services

其他工具

  • Oracle 数据泵可帮助您将数据和元数据从一个数据库高速移动至另一个数据库。在这种模式中,Oracle 数据泵用于将数据转储 (.dmp) 文件导出到 Oracle 服务器,然后将其导入到 Amazon RDS for Oracle 中。有关更多信息,请参阅 Amazon RDS 文档中的将数据导入到 Amazon RDS 上的 Oracle

  • Oracle SQL Developer 是一个集成的开发环境,可简化传统部署和基于云的部署中 Oracle 数据库的开发和管理。它与本地 Oracle 数据库和 Amazon RDS for Oracle 交互,运行导出和导入数据所需 SQL 命令。

操作说明

Task描述所需技能

创建存储桶。

要创建 S3 存储桶,请按照 AWS 文档中的说明进行操作。

AWS 系统管理员

创建 S3 存储桶

Task描述所需技能

创建存储桶。

要创建 S3 存储桶,请按照 AWS 文档中的说明进行操作。

AWS 系统管理员
Task描述所需技能

配置 IAM 权限。

要配置权限,请按照 AWS 文档中的说明进行操作。

AWS 系统管理员

创建 IAM 角色并分配策略

Task描述所需技能

配置 IAM 权限。

要配置权限,请按照 AWS 文档中的说明进行操作。

AWS 系统管理员
Task描述所需技能

创建 Amazon RDS for Oracle 目标数据库实例。

要创建 Amazon RDS for Oracle 实例,请按照 AWS 文档中的说明进行操作。

AWS 系统管理员

将该角色与数据库实例关联。

要将角色与实例关联,请按照 AWS 文档中的说明进行操作。

数据库管理员

创建 Amazon RDS for Oracle 目标数据库实例并关联 Amazon S3 集成角色

Task描述所需技能

创建 Amazon RDS for Oracle 目标数据库实例。

要创建 Amazon RDS for Oracle 实例,请按照 AWS 文档中的说明进行操作。

AWS 系统管理员

将该角色与数据库实例关联。

要将角色与实例关联,请按照 AWS 文档中的说明进行操作。

数据库管理员
Task描述所需技能

创建 用户。

连接来自 Oracle SQL Developer 或 SQL*Plus 的 Amazon RDS for Oracle 目标数据库,然后运行以下 SQL 命令来创建要将架构导入的用户。

create user SAMPLE_SCHEMA identified by <PASSWORD>; grant create session, resource to <USER NAME>; alter user <USER NAME> quota 100M on users;
数据库管理员

在目标数据库上创建数据库用户

Task描述所需技能

创建 用户。

连接来自 Oracle SQL Developer 或 SQL*Plus 的 Amazon RDS for Oracle 目标数据库,然后运行以下 SQL 命令来创建要将架构导入的用户。

create user SAMPLE_SCHEMA identified by <PASSWORD>; grant create session, resource to <USER NAME>; alter user <USER NAME> quota 100M on users;
数据库管理员
Task描述所需技能

创建数据转储文件。

要在 DATA_PUMP_DIR 目录中创建名为 sample.dmp 的转储文件(用于导出 SAMPLE_SCHEMA 用户),请使用以下脚本。

DECLARE hdnl NUMBER; BEGIN hdnl := dbms_datapump.open(operation => 'EXPORT', job_mode => 'SCHEMA', job_name => NULL); dbms_datapump.add_file( handle => hdnl, filename => 'sample.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file); dbms_datapump.add_file(handle => hdnl, filename => 'export.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); dbms_datapump.metadata_filter(hdnl, 'SCHEMA_EXPR', 'IN (''SAMPLE_SCHEMA'')'); dbms_datapump.start_job(hdnl); END; /

通过查看本地 DATA_PUMP_DIR 目录中的 export.log 文件来查看导出详细信息。

数据库管理员

从 Oracle 源数据库创建导出文件

Task描述所需技能

创建数据转储文件。

要在 DATA_PUMP_DIR 目录中创建名为 sample.dmp 的转储文件(用于导出 SAMPLE_SCHEMA 用户),请使用以下脚本。

DECLARE hdnl NUMBER; BEGIN hdnl := dbms_datapump.open(operation => 'EXPORT', job_mode => 'SCHEMA', job_name => NULL); dbms_datapump.add_file( handle => hdnl, filename => 'sample.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file); dbms_datapump.add_file(handle => hdnl, filename => 'export.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); dbms_datapump.metadata_filter(hdnl, 'SCHEMA_EXPR', 'IN (''SAMPLE_SCHEMA'')'); dbms_datapump.start_job(hdnl); END; /

通过查看本地 DATA_PUMP_DIR 目录中的 export.log 文件来查看导出详细信息。

数据库管理员
Task描述所需技能

将数据转储文件从源上传到 S3 存储桶。

使用 AWS CLI 运行以下命令。

aws s3 cp sample.dmp s3://<bucket_created_epic_1>/
数据库管理员

将转储文件上传到 S3 存储桶中

Task描述所需技能

将数据转储文件从源上传到 S3 存储桶。

使用 AWS CLI 运行以下命令。

aws s3 cp sample.dmp s3://<bucket_created_epic_1>/
数据库管理员
Task描述所需技能

将数据转储文件下载到 Amazon RDS

要将转储文件 sample.dmp 从 S3 存储桶复制到 Amazon RDS for Oracle 数据库,请运行以下 SQL 命令。在此示例中,sample.dmp 文件从 S3 存储桶 my-s3-integration1 下载到 Oracle 目录 DATA_PUMP_DIR。确保分配给 RDS 实例的磁盘空间足以容纳数据库和导出文件。

-- If you want to download all the files in the S3 bucket remove the p_s3_prefix line. SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'my-s3-integration', p_s3_prefix => 'sample.dmp', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

前述命令输出一个任务 ID。要通过查看任务 ID 中的数据来查看下载状态,请运行以下命令。

SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-<task_id>.log'));

要查看 DATA_PUMP_DIR 目录中的文件,请运行以下命令。

SELECT filename,type,filesize/1024/1024 size_megs,to_char(mtime,'DD-MON-YY HH24:MI:SS') timestamp FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => upper('DATA_PUMP_DIR'))) order by 4;
AWS 系统管理员

将导出文件从 S3 存储桶下载到 RDS 实例

Task描述所需技能

将数据转储文件下载到 Amazon RDS

要将转储文件 sample.dmp 从 S3 存储桶复制到 Amazon RDS for Oracle 数据库,请运行以下 SQL 命令。在此示例中,sample.dmp 文件从 S3 存储桶 my-s3-integration1 下载到 Oracle 目录 DATA_PUMP_DIR。确保分配给 RDS 实例的磁盘空间足以容纳数据库和导出文件。

-- If you want to download all the files in the S3 bucket remove the p_s3_prefix line. SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'my-s3-integration', p_s3_prefix => 'sample.dmp', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

前述命令输出一个任务 ID。要通过查看任务 ID 中的数据来查看下载状态,请运行以下命令。

SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-<task_id>.log'));

要查看 DATA_PUMP_DIR 目录中的文件,请运行以下命令。

SELECT filename,type,filesize/1024/1024 size_megs,to_char(mtime,'DD-MON-YY HH24:MI:SS') timestamp FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => upper('DATA_PUMP_DIR'))) order by 4;
AWS 系统管理员
Task描述所需技能

将架构和数据恢复到 Amazon RDS。

要将转储文件导入 sample_schema 数据库架构,请从 SQL Developer 或 SQL*Plus 中运行以下 SQL 命令。

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

要查看导入后的日志文件,请运行以下命令。

SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('DATA_PUMP_DIR','import.log'));
数据库管理员

将转储文件导入到目标数据库中

Task描述所需技能

将架构和数据恢复到 Amazon RDS。

要将转储文件导入 sample_schema 数据库架构,请从 SQL Developer 或 SQL*Plus 中运行以下 SQL 命令。

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

要查看导入后的日志文件,请运行以下命令。

SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('DATA_PUMP_DIR','import.log'));
数据库管理员
Task描述所需技能

列出并清理导出文件。

列出并删除 DATA_PUMP_DIR 目录中的导出文件,运行以下命令。

-- List the files SELECT filename,type,filesize/1024/1024 size_megs,to_char(mtime,'DD-MON-YY HH24:MI:SS') timestamp FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => upper('DATA_PUMP_DIR'))) order by 4;
-- Remove the files EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','sample.dmp'); EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','import.log');
AWS 系统管理员

从 DATA_PUMP_DIR 目录中移除转储文件

Task描述所需技能

列出并清理导出文件。

列出并删除 DATA_PUMP_DIR 目录中的导出文件,运行以下命令。

-- List the files SELECT filename,type,filesize/1024/1024 size_megs,to_char(mtime,'DD-MON-YY HH24:MI:SS') timestamp FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => upper('DATA_PUMP_DIR'))) order by 4;
-- Remove the files EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','sample.dmp'); EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','import.log');
AWS 系统管理员

相关资源

本页内容

隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。