

# 使用 db2look 将数据库元数据从 Db2 复制到 Amazon RDS for Db2
<a name="db2-native-db2-tools-db2look"></a>

`db2look` 是一款原生 Db2 工具，用于提取数据定义语言（DDL）文件、对象、授权、配置、WLM 和数据库布局。您可以使用 `db2look` 将数据库元数据从自行管理的 Db2 数据库复制到 Amazon RDS for Db2 数据库。有关更多信息，请参阅 IBM Db2 文档中的 [Mimicking databases using db2look](https://www.ibm.com/docs/en/db2/11.5?topic=tools-db2look)。

**复制数据库元数据**

1. 在自行管理的 Db2 系统上运行 `db2look` 工具以提取 DDL 文件。在以下示例中，将 *database\$1name* 替换为 Db2 数据库的名称。

   ```
   db2look -d database_name -e -l -a -f -wlm -cor -createdb -printdbcfg -o db2look.sql
   ```

1. 如果您的客户端计算机可以访问源（自行管理的 Db2）数据库和 RDS for Db2 数据库实例，则可以通过直接连接到远程实例在客户端计算机上创建 `db2look.sql` 文件。然后对远程自行管理的 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 数据库，请将 `db2look.sql` 文件复制到客户端计算机上。然后对 RDS for Db2 数据库实例进行编目。

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

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

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

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

   1. 对管理 RDS for Db2 的管理员数据库进行编目。您不能使用此数据库存储任何数据。

      ```
      db2 catalog database rdsadmin as rdsadmin at node remnode authentication server_encrypt
      ```

1. 创建缓冲池和表空间。管理员没有创建缓冲池或表空间的权限。但是，您可以使用 Amazon RDS 存储过程来创建它们。

   1. 在 `db2look.sql` 文件中查找缓冲池和表空间的名称和定义。

   1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到 Amazon RDS。在以下示例中，用您自己的信息替换 *master\$1username* 和 *master\$1password*。

      ```
      db2 connect to rdsadmin user master_username using master_password
      ```

   1. 通过调用 `rdsadmin.create_bufferpool` 创建缓冲池。有关更多信息，请参阅 [rdsadmin.create\$1bufferpool](db2-sp-managing-buffer-pools.md#db2-sp-create-buffer-pool)。

      ```
      db2 "call rdsadmin.create_bufferpool(
          'database_name', 
          'buffer_pool_name', 
          buffer_pool_size, 
          'immediate', 
          'automatic', 
          page_size, 
          number_block_pages, 
          block_size)"
      ```

   1. 通过调用 `rdsadmin.create_tablespace` 创建表空间。有关更多信息，请参阅 [rdsadmin.create\$1tablespace](db2-sp-managing-tablespaces.md#db2-sp-create-tablespace)。

      ```
      db2 "call rdsadmin.create_tablespace(
          'database_name', 
          'tablespace_name',
          'buffer_pool_name', 
          tablespace_initial_size, 
          tablespace_increase_size, 
          'tablespace_type')"
      ```

   1. 对要添加的每个其它缓冲池或表空间重复步骤 c 或 d。

   1. 终止连接。

      ```
      db2 terminate
      ```

1. 创建表和对象。

   1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到 RDS for Db2 数据库。在以下示例中，用您自己的信息替换 *rds\$1database\$1name*、*master\$1username* 和 *master\$1password*。

      ```
      db2 connect to rds_database_name user master_username using master_password
      ```

   1. 运行 `db2look.sql` 文件。

      ```
      db2 -tvf db2look.sql
      ```

   1. 终止连接。

      ```
      db2 terminate
      ```