

# 在 RDS for Oracle 和 Amazon EFS 文件系统之间传输文件
<a name="oracle-efs-integration.transferring"></a>

要在 RDS for Oracle 实例和 Amazon EFS 文件系统之间传输文件，请至少创建一个 Oracle 目录并配置 EFS 文件系统权限以控制数据库实例访问权限。

**Topics**
+ [创建 Oracle 目录](#oracle-efs-integration.transferring.od)
+ [向 EFS 文件系统传输数据和从其中传输数据：示例](#oracle-efs-integration.transferring.upload)

## 创建 Oracle 目录
<a name="oracle-efs-integration.transferring.od"></a>

要创建 Oracle 目录，请使用过程 `rdsadmin.rdsadmin_util.create_directory_efs`。 过程具有以下参数。


****  

| 参数名称 | 数据类型 | 默认值 | 必需 | 描述 | 
| --- | --- | --- | --- | --- | 
| `p_directory_name` | VARCHAR2 | – | 是 | Oracle 目录的名称。 | 
| `p_path_on_efs` | VARCHAR2 | – | 是 | EFS 文件系统上的路径。路径名的前缀使用模式 `/rdsefs-{{fsid}}/`，其中 {{fsid}} 是 EFS 文件系统 ID 的占位符。<br />例如，如果您的 EFS 文件系统名为 `fs-1234567890abcdef0`，并且您在此文件系统上创建了一个名为 `mydir` 的子目录，则可以指定以下值：<pre>/rdsefs-fs-1234567890abcdef0/mydir</pre> | 

假设您在 EFS 文件系统 `fs-1234567890abcdef0` 上创建了一个名为 `/datapump1` 的子目录。以下示例创建一个 Oracle 目录 `DATA_PUMP_DIR_EFS`，该目录指向 EFS 文件系统上的 `/datapump1` 目录。`p_path_on_efs` 参数的文件系统路径值以字符串 `/rdsefs-` 为前缀。

```
BEGIN
  rdsadmin.rdsadmin_util.create_directory_efs(
    p_directory_name => 'DATA_PUMP_DIR_EFS', 
    p_path_on_efs    => '/rdsefs-{{fs-1234567890abcdef0}}/{{datapump1}}');
END;
/
```

## 向 EFS 文件系统传输数据和从其中传输数据：示例
<a name="oracle-efs-integration.transferring.upload"></a>

以下示例使用 Oracle Data Pump 将名为 `MY_TABLE` 的表导出到文件 `datapump.dmp`。此文件位于 EFS 文件系统上。

```
DECLARE
  v_hdnl NUMBER;
BEGIN
  v_hdnl := DBMS_DATAPUMP.OPEN(operation => 'EXPORT', job_mode => 'TABLE', job_name=>null);
  DBMS_DATAPUMP.ADD_FILE(
    handle    => v_hdnl,
    filename  => 'datapump.dmp',
    directory => 'DATA_PUMP_DIR_EFS',
    filetype  => dbms_datapump.ku$_file_type_dump_file);
  DBMS_DATAPUMP.ADD_FILE(
    handle    => v_hdnl,
    filename  => 'datapump-exp.log',
    directory => 'DATA_PUMP_DIR_EFS',
    filetype  => dbms_datapump.ku$_file_type_log_file);
  DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'NAME_EXPR','IN (''MY_TABLE'')');
  DBMS_DATAPUMP.START_JOB(v_hdnl);
END;
/
```

以下示例使用 Oracle Data Pump 从文件 `datapump.dmp` 中导出名为 `MY_TABLE` 的表。此文件位于 EFS 文件系统上。

```
DECLARE
  v_hdnl NUMBER;
BEGIN
  v_hdnl := DBMS_DATAPUMP.OPEN(
    operation => 'IMPORT',
    job_mode  => 'TABLE',
    job_name  => null);
  DBMS_DATAPUMP.ADD_FILE(
    handle    => v_hdnl,
    filename  => 'datapump.dmp',
    directory => 'DATA_PUMP_DIR_EFS',
    filetype  => dbms_datapump.ku$_file_type_dump_file );
  DBMS_DATAPUMP.ADD_FILE(
    handle    => v_hdnl,
    filename  => 'datapump-imp.log',
    directory => 'DATA_PUMP_DIR_EFS',
    filetype  => dbms_datapump.ku$_file_type_log_file);
  DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'NAME_EXPR','IN (''MY_TABLE'')');
  DBMS_DATAPUMP.START_JOB(v_hdnl);
END;
/
```

有关更多信息，请参阅 [将数据导入到 Amazon RDS 上的 Oracle](Oracle.Procedural.Importing.md)。