在AWS RDS(Oracle)上执行数据导入

来源:互联网 发布:手机上能开淘宝店吗 编辑:程序博客网 时间:2024/05/17 08:08

操作纲要

  1. 生成导出数据。
  2. 传输导出数据至AWS RDS。
  3. 远程登录至AWS RDS并执行数据导入操作。

操作步骤 1:获取操作权限

操作步骤 1.1 [可选步骤] 创建数据导出目录:

为了方便管理,可将数据导出目录指定到特定文件夹,如:D:\dump_dir.

创建导出目录:

create or replace directory DUMP_DIR as 'D:\dump_dir';

确认创建是否成功:

select * from dba_directories where directory_name='DUMP_DIR';

需要注意的地方:

目录D:\dump_dir需要在文件系统上真实存在,因为Oracle不会替用户在文件系统中创建这个目录。

操作步骤 1.2 [可选步骤] 为导出任务单独创建一个用户:

create user data_operator_001 identified by password_of_data_operator_001 default tablespace users;

操作步骤 1.3 为执行数据导出操作的用户添加相应权限:

赋予基本操作权限

grant create session, create table, exp_full_database to data_operator_001;alter user data_operator_001 quota 100m on users;grant read, write on directory dump_dir to data_operator_001;grant execute on dbms_datapump to data_operator_001; 

需要注意的地方:

  1. 赋予用户exp_full_database权限是为了让其能够导出其他用户的数据库信息。
  2. 修改用户在默认表空间users的额度是为了能让DBMS_DATAPUMP.open能够创建Jobs,否则会出现job不存在错误。
  3. 赋予用户dbms_datapump 的执行权限是为了下一步能通过DBMS_DATAPUMP包API导出数据。

检查权限:

操作步骤 2:生成导出数据

这一步骤主要使用DBMS_DATAPUMP包API完成.

数据导出脚本:

DECLARE  dp_handle NUMBER;BEGIN  --sepcified operation,job mode  dp_handle := DBMS_DATAPUMP.open(operation   => 'EXPORT',                                  job_mode    => 'SCHEMA',                                  remote_link => NULL,                                  job_name    => 'Dump_Database_data_operator_001',                                  version     => 'LATEST');  --specified dumpfile and dump directory  DBMS_DATAPUMP.ADD_FILE(handle    => dp_handle,                         filename  => 'data_operator_001.dmp',                         directory => 'DUMP_DIR',                         filetype  => dbms_datapump.ku$_file_type_dump_file);  --specified log file and dump directory  DBMS_DATAPUMP.ADD_FILE(handle    => dp_handle,                         filename  => 'exp.log',                         directory => 'DUMP_DIR',                         filetype  => dbms_datapump.ku$_file_type_log_file);  --specified fliter for schema  DBMS_DATAPUMP.METADATA_FILTER(dp_handle, 'SCHEMA_EXPR', 'IN (''need_to_export_schema'')');  DBMS_DATAPUMP.start_job(dp_handle);  DBMS_DATAPUMP.detach(dp_handle);END;

操作步骤 3:传输导出数据至AWS RDS

这一步利用 DBMS_FILE_TRANSFER 工具包完成。

操作脚本:

BEGIN  DBMS_FILE_TRANSFER.PUT_FILE(source_directory_object      => 'DUMP_DIR',                              source_file_name             => 'data_operator_001.dmp',                              destination_directory_object => 'DATA_PUMP_DIR',                              destination_file_name        => 'data_operator_001.dmp',                              destination_database         => 'AWS_RDS');END;

需要注意的地方:

  1. source_directory_object、source_file_name 的值需要与上步对应,否则 DBMS_FILE_TRANSFER 无法找到导出的数据文件。
  2. destination_directory_object设置成DATA_PUMP_DIR,原因就是我们无法在AWS RDS上创建文件系统目录(如果发现怎么创建请告知我,谢谢!),所以就用Oracle的默认值:DATA_PUMP_DIR。
  3. destination_database 的值需要通过如下方式创建,其定义了一个远程Oracle实例。

创建远程Oracle实例链接:

create database link AWS_RDS connect to user_on_AWS_RDS identified by passwordusing '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxxx.xxxxx.ap-southeast-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SID=ORCL)))'

操作步骤 4:远程登录至AWS RDS并执行数据导入操作

这个步骤使用的工具:impdp

导入命令:

impdp user_on_AWS_RDS/password@AWS_ORACLE remap_schema=source_schema:destination_schema remap_tablespace=source_space:destination_space DUMPFILE=data_operator_001.dmp directory=DATA_PUMP_DIR  table_exists_action=replace 

需要注意的地方:

  1. 命令中的AWS_ORACLE 为TNS(Transparent Network Substrate)节点名,这个需要事先在Oracle安装目录下的NETWORK\ADMIN\tnsnames.ora文件中添加。以下附了一个连接AWS RDS的TNS节点名示例。
  2. 命令中destination_schema一般跟登录名相同。
  3. 命令中的destination_space需要事先在AWS RDS上创建。
  4. table_exists_action=replace为导入时的策略,请根据自己实际情况添加修改。

tnsnames.ora文件内容示例:

AWS_ORACLE=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxxx.xxxxx.ap-southeast-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SID=ORCL)))

References:
1. 使用 Oracle Datapump API 实现数据导出: http://blog.csdn.net/leshami/article/details/7195849
2. DBMS_DATAPUMP Usage: http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_datpmp.htm#i997806
3. Oracle Data Pump 工具系列:Data Pump 使用权限配置详解: http://blog.csdn.net/xiangsir/article/details/8627354
4. Importing Data Into Oracle on Amazon RDS: http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Oracle.Procedural.Importing.html

0 0
原创粉丝点击