本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Oracle 数据泵将本地 Oracle 数据库迁移到亚马逊 RDS For Oracle
由 Mohan Annam (AWS) 和 Brian motzer () 创作 AWS
环境:PoC 或试点 | 源:数据库:关系 | 目标:Amazon f RDS or Oracle |
R 类型:更换平台 | 工作负载:Oracle | 技术:迁移;数据库 |
AWS服务:亚马逊 RDS |
Summary
此模式描述了如何使用 Oracle 数据泵将 Oracle 数据库从本地数据中心迁移到适用于 Oracle 数据库实例的亚马逊关系数据库服务 (AmazonRDS)。
该模式包括从源数据库创建数据转储文件,将该文件存储在亚马逊简单存储服务 (Amazon S3) Simple Storage S3 存储桶中,然后将数据还原到RDS亚马逊版 Oracle 数据库实例。在使用 Dat AWS abase Migration Service (AWSDMS) 进行迁移时遇到限制时,此模式非常有用。
先决条件和限制
先决条件
产品版本
架构
源技术堆栈
目标技术堆栈
RDS适用于甲骨文的亚马逊
SQL客户端(甲骨文SQL开发人员)
一个 S3 存储桶
源架构和目标架构
AWS服务
其他工具
Oracle 数据泵可帮助您将数据和元数据从一个数据库高速移动至另一个数据库。在这种模式中,Oracle Data Pump 用于将数据转储 (.dmp) 文件导出到 Oracle 服务器,然后将其导入到 Ama RDS zon for Oracle 中。有关更多信息,请参阅亚马逊RDS文档RDS中的将数据导入亚马逊上的 Oracle。
Oracle SQL 开发人员是一个集成的开发环境,可简化传统部署和基于云的部署中 Oracle 数据库的开发和管理。它与本地 Oracle 数据库和 Amazon RDS for Oracle 交互,运行导出和导入数据所需的SQL命令。
操作说明
任务 | 描述 | 所需技能 |
---|
创建存储桶。 | 要创建 S3 存储桶,请按照AWS文档中的说明进行操作。 | AWS系统管理员 |
任务 | 描述 | 所需技能 |
---|
配置IAM权限。 | 要配置权限,请按照AWS文档中的说明进行操作。 | AWS系统管理员 |
任务 | 描述 | 所需技能 |
---|
创建目标 Amazon fo RDS r Oracle 数据库实例。 | 要创建 Amazon RDS for Oracle 实例,请按照AWS文档中的说明进行操作。 | AWS系统管理员 |
将该角色与数据库实例关联。 | 要将角色与实例关联,请按照AWS文档中的说明进行操作。 | DBA |
任务 | 描述 | 所需技能 |
---|
创建 用户。 | 从 Oracle Dev RDS eloper 或 SQL *Plus 连接到目标 Amazon for O SQL racle 数据库,然后运行以下SQL命令创建要导入架构的用户。 create user SAMPLE_SCHEMA identified by <PASSWORD>;
grant create session, resource to <USER NAME>;
alter user <USER NAME> quota 100M on users;
| DBA |
任务 | 描述 | 所需技能 |
---|
创建数据转储文件。 | 要在 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 文件来查看导出详细信息。 | DBA |
任务 | 描述 | 所需技能 |
---|
将数据转储文件从源上传到 S3 存储桶。 | 使用 AWSCLI,运行以下命令。 aws s3 cp sample.dmp s3://<bucket_created_epic_1>/
| DBA |
任务 | 描述 | 所需技能 |
---|
将数据转储文件下载到 Amazon RDS | 要将转储文件sample.dmp 从 S3 存储桶复制到 Amazon f RDS or 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系统管理员 |
任务 | 描述 | 所需技能 |
---|
将架构和数据恢复到 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'));
| DBA |
任务 | 描述 | 所需技能 |
---|
列出并清理导出文件。 | 列出并删除 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系统管理员 |
相关资源