

# 使用 INSERT 命令将数据从 Db2 导入到 Amazon RDS for Db2
<a name="db2-native-db2-tools-insert"></a>

您可以从自行管理的 Db2 服务器使用 `INSERT` 命令将您的数据插入到 Amazon RDS for Db2 数据库中。使用这种迁移方法，您可以为远程 RDS for Db2 数据库实例使用昵称。自行管理的 Db2 数据库（源）必须能够连接到 RDS for Db2 数据库（目标）。

**重要**  
`INSERT` 命令方法对于迁移小型表很有用。如果自行管理的 Db2 数据库和 RDS for Db2 数据库之间的网络带宽有限，我们建议您使用不同的迁移方法。有关更多信息，请参阅 [使用原生 Db2 工具将数据从 Db2 迁移到 Amazon RDS for Db2](db2-native-db2-tools.md)。

**将数据从自行管理的 Db2 数据库复制到 RDS for Db2 数据库**

1. 在自行管理的 Db2 实例上对 RDS for Db2 数据库实例进行编目。

   1. 对节点进行编目。在以下示例中，将 *dns\$1ip\$1address* 和 *port* 替换为自行管理的 Db2 数据库的 DNS 名称或 IP 地址和端口号。

      ```
      db2 catalog tcpip node remnode REMOTE dns_ip_address SERVER port
      ```

   1. 对数据库编目。在以下示例中，将 *rds\$1database\$1name* 替换为 RDS for Db2 数据库实例上的数据库名称。

      ```
      db2 catalog database rds_database_name as remdb at node remnode \
          authentication server_encrypt
      ```

1. 在自行管理的 Db2 实例上启用联合身份验证。在以下示例中，将 *source\$1database\$1name* 替换为自行管理的 Db2 实例上的数据库名称。

   ```
   db2 update dbm cfg using FEDERATED YES source_database_name
   ```

1. 在 RDS for Db2 数据库实例创建表。

   1. 对节点进行编目。在以下示例中，将 *dns\$1ip\$1address* 和 *port* 替换为自行管理的 Db2 数据库的 DNS 名称或 IP 地址和端口号。

      ```
      db2 catalog tcpip node srcnode REMOTE dns_ip_address server port
      ```

   1. 对数据库编目。在以下示例中，将 *source\$1database\$1name* 和 *source\$1database\$1alias* 替换为自行管理的 Db2 数据库的名称和要用于此数据库的别名。

      ```
      db2 catalog database source_database_name as source_database_alias at node srcnode \
          authentication server_encrypt
      ```

1. 连接到源数据库。在以下示例中，将 *source\$1database\$1alias*、*user\$1id* 和 *user\$1password* 替换为您在上一步中创建的别名以及自行管理的 Db2 数据库的用户 ID 和密码。

   ```
   db2look -d source_database_alias -i user_id -w user_password -e -l -a -f -wlm \
       -cor -createdb -printdbcfg -o db2look.sql
   ```

1. 设置联合身份验证，并在自行管理的 Db2 实例上为 RDS for Db2 数据库表创建昵称。

   1. 连接到本地数据库 在以下示例中，将 *source\$1database\$1name* 替换为自行管理的 Db2 实例上的数据库名称。

      ```
      db2 connect to source_database_name
      ```

   1.  创建用于访问 Db2 数据来源的包装器。

      ```
      db2 create wrapper drda
      ```

   1. 在联合数据库上定义数据来源。在以下示例中，将 *admin* 和 *admin\$1password* 替换为自行管理的 Db2 实例的凭证。将 *rds\$1database\$1name* 替换为 RDS for Db2 数据库实例上的数据库名称。

      ```
      db2 "create server rdsdb2 type DB2/LUW version '11.5.9.0' \
          wrapper drda authorization "admin" password "admin_password" \
          options( dbname 'rds_database_name', node 'remnode')"
      ```

   1. 映射两个数据库上的用户。在以下示例中，将 *master\$1username* 和 *master\$1password* 替换为 RDS for Db2 数据库实例的凭证。

      ```
      db2 "create user mapping for user server rdsdb2 \
          options (REMOTE_AUTHID 'master_username', REMOTE_PASSWORD 'master_password')"
      ```

   1. 验证与 RDS for Db2 服务器的连接。

      ```
      db2 set passthru rdsdb2
      ```

   1. 在远程 RDS for Db2 数据库中为该表创建昵称。在以下示例中，将 *NICKNAME* 和 *TABLE\$1NAME* 替换为表的昵称和表的名称。

      ```
      db2 create nickname REMOTE.NICKNAME for RDSDB2.TABLE_NAME.NICKNAME
      ```

1. 将数据插入远程 RDS for Db2 数据库的表中。在自行管理的 Db2 实例的本地表上的 `select` 语句中使用该昵称。在以下示例中，将 *NICKNAME* 和 *TABLE\$1NAME* 替换为表的昵称和表的名称。

   ```
   db2 "INSERT into REMOTE.NICKNAME select * from RDS2DB2.TABLE_NAME.NICKNAME"
   ```