

# 管理您的 Amazon RDS for Db2 数据库实例
<a name="db2-administering-db-instance"></a>

本主题介绍您使用 Amazon RDS for Db2 数据库实例执行的常见管理任务。对于所有 Amazon RDS 数据库实例，有些任务是相同的。其它任务特定于 RDS for Db2。

以下任务是所有 RDS 数据库的共同任务。还有一些特定于 RDS for Db2 的任务，例如使用标准 SQL 客户端连接到 RDS for Db2 数据库。


| 任务区域 | 相关文档 | 
| --- | --- | 
|  **实例类、存储和 PIOPS** 如果您正在创建生产实例，请了解实例类、存储类型和预置 IOPS 在 Amazon RDS 中的工作原理。  |  [数据库实例类](Concepts.DBInstanceClass.md) [Amazon RDS 存储类型](CHAP_Storage.md#Concepts.Storage)  | 
|  **多可用区部署** 生产数据库实例应使用多可用区部署。多可用区部署为数据库实例提供了更高的可用性、数据持久性和容错能力。  |  [配置和管理 Amazon RDS 的多可用区部署](Concepts.MultiAZ.md)  | 
|  **Amazon VPC** 如果您的 AWS 账户具有默认虚拟私有云（VPC），则会自动在默认 VPC 中创建数据库实例。如果您的账户没有默认 VPC，并且您希望数据库实例位于 VPC 中，则必须在创建数据库实例之前创建 VPC 和子网组。  |  [在 VPC 中使用数据库实例](USER_VPC.WorkingWithRDSInstanceinaVPC.md)  | 
|  **安全组**： 默认情况下，数据库实例使用阻止访问的防火墙。确保使用正确的 IP 地址和网络配置创建安全组来访问数据库实例。  |  [使用安全组控制访问权限](Overview.RDSSecurityGroups.md)  | 
|  **参数组** 由于 RDS for Db2 数据库实例需要您添加 `rds.ibm_customer_id` 和 `rds.ibm_site_id` 参数，因此请在创建数据库实例前创建参数组。如果您的数据库实例需要其它特定的数据库参数，也请在创建数据库实例之前将它们添加到此参数组中。  |  [将 IBM ID 添加到 RDS for Db2 数据库实例的参数组中](db2-licensing.md#db2-licensing-options-byol-adding-ids) [Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)  | 
|  **选项组** 如果数据库实例需要特定的数据库选项，则在创建数据库实例前创建选项组。  |  [Amazon RDS for Db2 数据库实例选项](Db2.Options.md)  | 
|  **连接到您的数据库实例** 在创建安全组并将其与数据库实例关联后，您可以使用任何标准 SQL 客户端应用程序（如 IBM Db2 CLP）连接到数据库实例。  |  [连接到 Db2 数据库实例](USER_ConnectToDb2DBInstance.md)  | 
|  **备份和还原** 您可以配置数据库实例以采用自动存储备份或采用手动存储快照，然后从备份或快照还原实例。  | [备份、还原和导出数据](CHAP_CommonTasks.BackupRestore.md) | 
|  **监控** 您可以使用 IBM Db2 Data Management Console 监控 RDS for Db2 数据库实例。 您可以使用 CloudWatch Amazon RDS 指标、事件和增强监控来监控 RDS for Db2 数据库实例。  |  [使用 IBM Db2 Data Management Console 连接到 Amazon RDS for Db2 数据库实例](db2-connecting-with-ibm-data-management-console.md) [在 Amazon RDS 控制台中查看指标](USER_Monitoring.md) [查看 Amazon RDS 事件](USER_ListEvents.md) [使用增强监控来监控操作系统指标](USER_Monitoring.OS.md)  | 
|  **日志文件** 您可以访问 RDS for Db2 数据库实例的日志文件。  |  [监控 Amazon RDS 日志文件](USER_LogAccess.md)  | 

**Topics**
+ [执行 Amazon RDS for Db2 数据库实例的常见系统任务](db2-performing-common-system-tasks-db-instances.md)
+ [执行 Amazon RDS for Db2 数据库实例的常见数据库任务](db2-performing-common-database-tasks-db-instances.md)

# 执行 Amazon RDS for Db2 数据库实例的常见系统任务
<a name="db2-performing-common-system-tasks-db-instances"></a>

您可以在运行 Db2 的 Amazon RDS 数据库实例上执行某些与系统相关的常见数据库管理员任务。为了提供托管服务体验，Amazon RDS 不允许通过 shell 访问数据库实例，而仅限访问某些需要高级权限的系统过程和表。

有关对于 RDS for Db2 授予和撤销权限以及连接到远程数据库的信息，请参阅以下主题。

**主题**
+ [授予和撤销对 RDS for Db2 的权限](db2-granting-revoking-privileges.md)
+ [连接到远程 RDS for Db2 数据库实例](db2-attaching-to-remote.md)

## 创建自定义数据库端点
<a name="db2-creating-custom-database-endpoint"></a>

迁移到 Amazon RDS for Db2 时，您可以使用自定义数据库端点 URL 来最大限度地减少对应用程序的更改。例如，如果您使用 `db2.example.com` 作为当前 DNS 记录，则可以将其添加到 Amazon Route 53。在 Route 53 中，您可以使用私有托管区将当前 DNS 数据库端点映射到 RDS for Db2 数据库端点。要为 Amazon RDS 数据库端点添加自定义 `A` 或 `CNAME` 记录，请参阅《Amazon Route 53 开发人员指南》**中的 [Registering and managing domains using Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/registrar.html)。

**注意**  
如果您无法将域转到 Route 53，则可以使用 DNS 提供商为 RDS for Db2 数据库端点 URL 创建 `CNAME` 记录。请查阅您的 DNS 提供商文档。

# 授予和撤销对 RDS for Db2 的权限
<a name="db2-granting-revoking-privileges"></a>

用户通过附加到数据库的组中的成员资格获得对数据库的访问权限。

使用以下过程授予和撤销用于控制数据库访问权限的权限。

这些过程使用在本地计算机上运行的 IBM Db2 CLP 连接到 RDS for Db2 数据库实例。请务必对 TCPIP 节点和数据库进行编目，以连接到在本地计算机上运行的 RDS for Db2 数据库实例。有关更多信息，请参阅 [使用 IBM Db2 CLP 连接到 Amazon RDS for Db2 数据库实例](db2-connecting-with-clp-client.md)。

**Topics**
+ [授予用户访问您的数据库的权限](#db2-granting-user-access)
+ [更改用户的密码](#db2-changing-user-password)
+ [向用户添加组](#db2-adding-group-to-user)
+ [从用户中删除组](#db2-removing-groups-from-user)
+ [删除用户](#db2-removing-user)
+ [列出用户](#db2-listing-users-database)
+ [创建角色](#db2-creating-role)
+ [授予角色](#db2-granting-role)
+ [撤销角色](#db2-revoking-role)
+ [删除角色](#db2-dropping-role)
+ [授予数据库授权](#db2-granting-dbadmin-auth)
+ [撤销数据库授权](#db2-revoking-dbadmin-auth)

## 授予用户访问您的数据库的权限
<a name="db2-granting-user-access"></a>

**授予用户访问您的数据库的权限**

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

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

   此命令生成类似于以下示例的输出：

   ```
   Database Connection Information
       
   Database server        = DB2/LINUXX8664 11.5.8.0
   SQL authorization ID   = ADMIN
   Local database alias   = RDSADMIN
   ```

1. 通过调用 `rdsadmin.add_user` 将用户添加到您的授权列表。有关更多信息，请参阅 [rdsadmin.add\$1user](db2-sp-granting-revoking-privileges.md#db2-sp-add-user)。

   ```
   db2 "call rdsadmin.add_user(
       'username',
       'password',
       'group_name,group_name')"
   ```

1. （可选）通过调用 `rdsadmin.add_groups` 向用户添加其它组。有关更多信息，请参阅 [rdsadmin.add\$1groups](db2-sp-granting-revoking-privileges.md#db2-sp-add-groups)。

   ```
   db2 "call rdsadmin.add_groups(
       'username',
       'group_name,group_name')"
   ```

1. 确认用户可用的权限。在以下示例中，用您自己的信息替换 *rds\$1database\$1alias*、*master\$1user* 和 *master\$1password*。另外，将 *username* 替换为用户的用户名。

   ```
   db2 terminate
   db2 connect to rds_database_alias user master_user using master_password
   db2 "SELECT SUBSTR(AUTHORITY,1,20) AUTHORITY, D_USER, D_GROUP, D_PUBLIC
          FROM TABLE (SYSPROC.AUTH_LIST_AUTHORITIES_FOR_AUTHID ('username', 'U') ) AS T
          ORDER BY AUTHORITY"
   ```

   此命令生成类似于以下示例的输出：

   ```
   AUTHORITY            D_USER D_GROUP D_PUBLIC
   -------------------- ------ ------- --------
   ACCESSCTRL           N      N       N
   BINDADD              N      N       N
   CONNECT              N      N       N
   CREATETAB            N      N       N
   CREATE_EXTERNAL_ROUT N      N       N
   CREATE_NOT_FENCED_RO N      N       N
   CREATE_SECURE_OBJECT N      N       N
   DATAACCESS           N      N       N
   DBADM                N      N       N
   EXPLAIN              N      N       N
   IMPLICIT_SCHEMA      N      N       N
   LOAD                 N      N       N
   QUIESCE_CONNECT      N      N       N
   SECADM               N      N       N
   SQLADM               N      N       N
   SYSADM               *      N       *
   SYSCTRL              *      N       *
   SYSMAINT             *      N       *
   SYSMON               *      N       *
   WLMADM               N      N       N
   ```

1. 将 RDS for Db2 角色 `ROLE_NULLID_PACKAGES`、`ROLE_TABLESPACES` 和 `ROLE_PROCEDURES` 授予您向其添加用户的组。有关更多信息，请参阅 [Amazon RDS for Db2 默认角色](db2-default-roles.md)。
**注意**  
我们在 `RESTRICTIVE` 模式下创建 RDS for Db2 数据库实例。因此，RDS for Db2 角色 `ROLE_NULLID_PACKAGES`、`ROLE_TABLESPACES` 和 `ROLE_PROCEDURES` 授予对 IBM Db2 CLP 和 Dynamic SQL 的 `NULLID` 软件包的执行权限。这些角色还授予用户对表空间的权限。

   1. 连接到 Db2 数据库。在以下示例中，用您自己的信息替换 *database\$1name*、*master\$1user* 和 *master\$1password*。

      ```
      db2 connect to database_name user master_user using master_password
      ```

   1. 将角色 `ROLE_NULLED_PACKAGES` 授予组。在以下示例中，将 *group\$1name* 替换为您要向其中添加该角色的组的名称。

      ```
      db2 "grant role ROLE_NULLID_PACKAGES to group group_name"
      ```

   1. 将角色 `ROLE_TABLESPACES` 授予同一个组。在以下示例中，将 *group\$1name* 替换为您要向其中添加该角色的组的名称。

      ```
      db2 "grant role ROLE_TABLESPACES to group group_name"
      ```

   1. 将角色 `ROLE_PROCEDURES` 授予同一个组。在以下示例中，将 *group\$1name* 替换为您要向其中添加该角色的组的名称。

      ```
      db2 "grant role ROLE_PROCEDURES to group group_name"
      ```

1. 向已将用户添加到的组授予 `connect`、`bindadd`、`createtab` 和 `IMPLICIT_SCHEMA` 权限。在以下示例中，将 *group\$1name* 替换为将用户添加到的第二个组的名称。

   ```
   db2 "grant usage on workload SYSDEFAULTUSERWORKLOAD to public"
   db2 "grant connect, bindadd, createtab, implicit_schema on database to group group_name"
   ```

1. 对将用户添加到的每个其它组重复步骤 4 到 6。

1. 通过以用户身份进行连接、创建表、向表中插入值以及从表中返回数据，测试用户的访问权限。在以下示例中，将 *rds\$1database\$1alias*、*username* 和 *password* 替换为数据库的名称以及用户的用户名和密码。

   ```
   db2 connect to rds_database_alias user username using password
   db2 "create table t1(c1 int not null)"
   db2 "insert into t1 values (1),(2),(3),(4)"
   db2 "select * from t1"
   ```

## 更改用户的密码
<a name="db2-changing-user-password"></a>

**更改用户的密码**

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

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

1. 通过调用 `rdsadmin.change_password` 更改密码。有关更多信息，请参阅 [rdsadmin.change\$1password](db2-sp-granting-revoking-privileges.md#db2-sp-change-password)。

   ```
   db2 "call rdsadmin.change_password(
       'username',
       'new_password')"
   ```

## 向用户添加组
<a name="db2-adding-group-to-user"></a>

**向用户添加组**

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

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

1. 通过调用 `rdsadmin.add_groups` 向用户添加组。有关更多信息，请参阅 [rdsadmin.add\$1groups](db2-sp-granting-revoking-privileges.md#db2-sp-add-groups)。

   ```
   db2 "call rdsadmin.add_groups(
       'username',
       'group_name,group_name')"
   ```

## 从用户中删除组
<a name="db2-removing-groups-from-user"></a>

**从用户中删除组**

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

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

1. 通过调用 `rdsadmin.remove_groups` 删除组。有关更多信息，请参阅 [rdsadmin.remove\$1groups](db2-sp-granting-revoking-privileges.md#db2-sp-remove-groups)。

   ```
   db2 "call rdsadmin.remove_groups(
       'username',
       'group_name,group_name')"
   ```

## 删除用户
<a name="db2-removing-user"></a>

**从授权列表中删除用户**

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

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

1. 通过调用 `rdsadmin.remove_user` 将用户从您的授权列表中删除。有关更多信息，请参阅 [rdsadmin.remove\$1user](db2-sp-granting-revoking-privileges.md#db2-sp-remove-user)。

   ```
   db2 "call rdsadmin.remove_user('username')"
   ```

## 列出用户
<a name="db2-listing-users-database"></a>

要列出授权列表上的用户，请调用 `rdsadmin.list_users` 存储过程。有关更多信息，请参阅 [rdsadmin.list\$1users](db2-sp-granting-revoking-privileges.md#db2-sp-list-users)。

```
db2 "call rdsadmin.list_users()"
```

## 创建角色
<a name="db2-creating-role"></a>

您可以使用 [rdsadmin.create\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-create-role) 存储过程创建角色。

**创建角色**

1. 连接到 `rdsadmin` 数据库。在以下示例中，用您的信息替换 *master\$1username* 和 *master\$1password*。

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

1. 将 Db2 设置为输出内容。

   ```
   db2 set serveroutput on 
   ```

1. 创建角色。有关更多信息，请参阅 [rdsadmin.create\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-create-role)。

   ```
   db2 "call rdsadmin.create_role(
       'database_name',
       'role_name')"
   ```

1. 将 Db2 设置为不输出内容。

   ```
   db2 set serveroutput off
   ```

## 授予角色
<a name="db2-granting-role"></a>

您可以使用 [rdsadmin.grant\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-grant-role) 存储过程为角色、用户或组分配角色。

**分配角色**

1. 连接到 `rdsadmin` 数据库。在以下示例中，用您的信息替换 *master\$1username* 和 *master\$1password*。

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

1. 将 Db2 设置为输出内容。

   ```
   db2 set serveroutput on 
   ```

1. 分配角色。有关更多信息，请参阅 [rdsadmin.grant\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-grant-role)。

   ```
   db2 "call rdsadmin.grant_role(
       'database_name',
       'role_name',
       'grantee',
       'admin_option')"
   ```

1. 将 Db2 设置为不输出内容。

   ```
   db2 set serveroutput off
   ```

## 撤销角色
<a name="db2-revoking-role"></a>

您可以使用 [rdsadmin.revoke\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-revoke-role) 存储过程从角色、用户或组撤销角色。

**撤销角色**

1. 连接到 `rdsadmin` 数据库。在以下示例中，用您的信息替换 *master\$1username* 和 *master\$1password*。

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

1. 撤销角色。有关更多信息，请参阅 [rdsadmin.revoke\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-revoke-role)。

   ```
   db2 "call rdsadmin.revoke_role(
       ?,
       'database_name',
       'role_name',
       'grantee')"
   ```

## 删除角色
<a name="db2-dropping-role"></a>

可以使用 [rdsadmin.drop\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-drop-role) 存储过程删除角色。

**删除角色**

1. 连接到 `rdsadmin` 数据库。在以下示例中，用您的信息替换 *master\$1username* 和 *master\$1password*。

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

1. 删除角色。有关更多信息，请参阅 [rdsadmin.drop\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-drop-role)。

   ```
   db2 "call rdsadmin.drop_role(
       ?,
       'database_name',
       'role_name')"
   ```

## 授予数据库授权
<a name="db2-granting-dbadmin-auth"></a>

拥有 `DBADM` 授权的主用户可以向角色、用户或组授予 `DBADM`、`ACCESSCTRL` 或 `DATAACCESS` 授权。

**授予数据库授权**

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

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

1. 通过调用 `rdsadmin.dbadm_grant` 授予用户访问权限。有关更多信息，请参阅 [rdsadmin.dbadm\$1grant](db2-sp-granting-revoking-privileges.md#db2-sp-dbadm-grant)。

   ```
   db2 "call rdsadmin.dbadm_grant(
       ?,
       'database_name,
       'authorization',
       'grantee')"
   ```

**使用案例示例**

以下过程将引导您完成创建角色、向该角色授予 `DBADM` 授权、将该角色分配给用户以及将该角色授予组。

****

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

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

1. 为名为 `TESTDB` 的数据库创建一个名为 `PROD_ROLE` 的角色。有关更多信息，请参阅 [rdsadmin.create\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-create-role)。

   ```
   db2 "call rdsadmin.create_role(
       'TESTDB',
       'PROD_ROLE')"
   ```

1. 将该角色分配给名为 `PROD_USER` 的用户。`PROD_USER` 已获得分配角色的管理员授权。有关更多信息，请参阅 [rdsadmin.grant\$1role](db2-sp-granting-revoking-privileges.md#db2-sp-grant-role)。

   ```
   db2 "call rdsadmin.grant_role(
       ?,
       'TESTDB',
       'PROD_ROLE',
       'USER PROD_USER',
       'Y')"
   ```

1. （可选）提供其它授权或权限。以下示例针对名为 `FUNDPROD` 的数据库向名为 `PROD_ROLE` 的角色授予 `DBADM` 授权。有关更多信息，请参阅 [rdsadmin.dbadm\$1grant](db2-sp-granting-revoking-privileges.md#db2-sp-dbadm-grant)。

   ```
   db2 "call rdsadmin.dbadm_grant(
       ?,
       'FUNDPROD',
       'DBADM',
       'ROLE PROD_ROLE')"
   ```

1. 终止会话。

   ```
   db2 terminate
   ```

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

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

1. 向该角色添加更多授权。

   ```
   db2 "grant connect, implicit_schema on database to role PROD_ROLE"
   ```

1. 将角色 `PROD_ROLE` 授予组。

   ```
   db2 "grant role PROD_ROLE to group PRODGRP"
   ```

属于组 `PRODGRP` 的用户现在可以执行诸如连接到 `TESTDB` 数据库、创建表或创建架构之类的操作。

## 撤销数据库授权
<a name="db2-revoking-dbadmin-auth"></a>

拥有 `DBADM` 授权的主用户可以从角色、用户或组撤销 `DBADM`、`ACCESSCTRL` 或 `DATAACCESS` 授权。

**撤销数据库授权**

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

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

1. 通过调用 `rdsadmin.dbadm_revoke` 撤销用户访问权限。有关更多信息，请参阅 [rdsadmin.dbadm\$1revoke](db2-sp-granting-revoking-privileges.md#db2-sp-dbadm-revoke)。

   ```
   db2 "call rdsadmin.dbadm_revoke(
       ?,
       'database_name,
       'authorization',
       'grantee')"
   ```

# 连接到远程 RDS for Db2 数据库实例
<a name="db2-attaching-to-remote"></a>

使用以下步骤连接到远程 RDS for Db2 数据库实例，并运行 `get snapshot` 操作。

**连接到远程 RDS for Db2 数据库实例**

1. 运行 IBM Db2 CLP 客户端会话。有关对 RDS for Db2 数据库实例和数据库进行编目的信息，请参阅[使用 IBM Db2 CLP 连接到 Amazon RDS for Db2 数据库实例](db2-connecting-with-clp-client.md)。记下您的 RDS for Db2 数据库实例的主用户名和主密码。

1. 连接到 RDS for Db2 数据库实例。在以下示例中，将 *node\$1name*、*master\$1username* 和 *master\$1password* 替换为您编目的 TCPIP 节点名称以及 RDS for Db2 数据库实例的主用户名和主密码。

   ```
   db2 attach to node_name user master_username using master_password
   ```

连接到远程 RDS for Db2 数据库实例后，您可以运行以下命令和其它 `get snapshot` 命令。有关更多信息，请参阅 IBM Db2 文档中的 [GET SNAPSHOT 命令](https://www.ibm.com/docs/en/db2/11.5?topic=commands-get-snapshot)。

```
db2 list applications
db2 get snapshot for all databases
db2 get snapshot for database manager
db2 get snapshot for all applications
```

# 执行 Amazon RDS for Db2 数据库实例的常见数据库任务
<a name="db2-performing-common-database-tasks-db-instances"></a>

您可以在 Amazon RDS for Db2 数据库实例上执行某些与数据库相关的常见 DBA 任务。为了提供托管服务体验，Amazon RDS 未提供数据库实例的 Shell 访问权限。此外，主用户无法运行需要 `SYSADM`、`SYSMAINT` 或 `SYSCTRL` 权限的命令或实用程序。

有关缓冲池、数据库和表空间的常见任务的信息，请参阅以下主题。

**主题**
+ [缓冲池的常见任务](db2-managing-buffer-pools.md)
+ [常见数据库任务](db2-managing-databases.md)
+ [表空间的常见任务](db2-managing-tablespaces.md)

# 缓冲池的常见任务
<a name="db2-managing-buffer-pools"></a>

您可以针对 RDS for Db2 数据库创建、更改或删除缓冲池。创建、更改或删除缓冲池需要更高级别的 `SYSADM` 或 `SYSCTRL` 权限，而主用户无法获得相应的权限。因此，可改为使用 Amazon RDS 存储过程。

您也可以刷新缓冲池。

**Topics**
+ [创建缓冲池](#db2-creating-buffer-pool)
+ [更改缓冲池](#db2-altering-buffer-pool)
+ [删除缓冲池](#db2-dropping-buffer-pool)
+ [刷新缓冲池](#db2-flushing-buffer-pools)

## 创建缓冲池
<a name="db2-creating-buffer-pool"></a>

要创建 RDS for Db2 数据库的缓冲池，请调用 `rdsadmin.create_bufferpool` 存储过程。有关更多信息，请参阅 IBM Db2 文档中的 [CREATE BUFFERPOOL 语句](https://www.ibm.com/docs/en/db2/11.5?topic=statements-create-bufferpool)。

**创建缓冲池**

1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到 `rdsadmin` 数据库。在以下示例中，用您自己的信息替换 *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)"
   ```

## 更改缓冲池
<a name="db2-altering-buffer-pool"></a>

要更改 RDS for Db2 数据库的缓冲池，请调用 `rdsadmin.alter_bufferpool` 存储过程。有关更多信息，请参阅 IBM Db2 文档中的 [ALTER BUFFERPOOL 语句](https://www.ibm.com/docs/en/db2/11.5?topic=statements-alter-bufferpool)。

**更改缓冲池**

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

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

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

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

## 删除缓冲池
<a name="db2-dropping-buffer-pool"></a>

要删除 RDS for Db2 数据库的缓冲池，请调用 `rdsadmin.drop_bufferpool` 存储过程。有关更多信息，请参阅 IBM Db2 文档中的[删除缓冲池](https://www.ibm.com/docs/en/db2/11.5?topic=pools-dropping-buffer)。

**重要**  
确保没有为要删除的缓冲池分配任何表空间。

**删除缓冲池**

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

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

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

   ```
   db2 "call rdsadmin.drop_bufferpool(
       'database_name', 
       'buffer_pool_name')"
   ```

## 刷新缓冲池
<a name="db2-flushing-buffer-pools"></a>

您可以刷新缓冲池以强制实施检查点，以便 RDS for Db2 将页面从内存写入存储。

**注意**  
您不需要刷新缓冲池。Db2 在提交事务之前同步写入日志。脏页可能仍在缓冲池中，但是 Db2 会将它们异步写入存储。即使系统意外关闭，当您重启数据库时，Db2 也会自动执行崩溃恢复。在崩溃恢复期间，Db2 将已提交的更改写入数据库，或者回滚对未提交事务的更改。

**刷新缓冲池**

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

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

1. 刷新缓冲池。

   ```
   db2 flush bufferpools all
   ```

# 常见数据库任务
<a name="db2-managing-databases"></a>

可以在 RDS for Db2 数据库实例上创建、删除或还原数据库。创建、删除或还原数据库需要更高级别的 `SYSADM` 权限，而主用户无法获得该权限。因此，可改为使用 Amazon RDS 存储过程。

还可以执行常见的管理任务，例如监控、维护和收集有关数据库的信息。

**Topics**
+ [创建数据库](#db2-creating-database)
+ [为数据库配置设置](#db2-configuring-database)
+ [修改数据库参数](#db2-modifying-db-parameters)
+ [配置日志保留期](#db2-configuring-log-retention)
+ [列出日志信息](#db2-listing-log-information)
+ [使用精细访问控制（FGAC）](#db2-using-fine-grained-access-control)
+ [停用数据库](#db2-deactivating-database)
+ [激活数据库](#db2-activating-database)
+ [重新激活数据库](#db2-reactivating-database)
+ [删除数据库](#db2-dropping-database)
+ [备份数据库](#db2-backing-up-database)
+ [将归档日志复制到 Amazon S3](#db2-copying-archive-logs-to-s3)
+ [还原数据库](#db2-restoring-database)
+ [列出数据库](#db2-listing-databases)
+ [收集有关数据库的信息](#db2-collecting-info-db)
+ [强制应用程序退出数据库](#db2-forcing-application-off-db)
+ [生成性能报告](#db2-generating-performance-reports)

## 创建数据库
<a name="db2-creating-database"></a>

要在 RDS for Db2 数据库实例上创建数据库，请调用 `rdsadmin.create_database` 存储过程。有关更多信息，请参阅 IBM Db2 文档中的 [CREATE DATABASE 命令](https://www.ibm.com/docs/en/db2/11.5?topic=commands-create-database)。

**注意**  
如果您打算修改 `db2_compatibility_vector` 参数，请在创建数据库之前进行修改。有关更多信息，请参阅 [设置 db2\$1compatibility\$1vector 参数](db2-known-issues-limitations.md#db2-known-issues-limitations-db2-compatibility-vector)。

**创建数据库**

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

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

1. 通过调用 `rdsadmin.create_database` 创建数据库。有关更多信息，请参阅 [rdsadmin.create\$1database](db2-sp-managing-databases.md#db2-sp-create-database)。

   ```
   db2 "call rdsadmin.create_database(
       'database_name',
       'database_page_size',
       'database_code_set',
       'database_territory',
       'database_collation',
       'database_autoconfigure_str',
       'database_non-restrictive')"
   ```

1. （可选）通过对您要创建的每个数据库调用 `rdsadmin.create_database` 可创建额外数据库。每个 Db2 数据库实例最多可包含 50 个数据库。有关更多信息，请参阅 [rdsadmin.create\$1database](db2-sp-managing-databases.md#db2-sp-create-database)。

   ```
   db2 "call rdsadmin.create_database('database_name')"
   ```

1. （可选）使用以下方法之一确认数据库已创建：
   + 调用 `rdsadmin.list_databases`。有关更多信息，请参阅 [rdsadmin.list\$1databases](db2-user-defined-functions.md#db2-udf-list-databases)。
   + 运行以下 SQL 命令：

     ```
     db2 "select varchar(r.task_type,25) as task_type, r.database_name, 
         varchar(r.lifecycle,15) as lifecycle, r.created_at, r.database_name,
         varchar(bson_to_json(task_input_params),256) as input_params, 
         varchar(r.task_output,1024) as task_output 
         from table(rdsadmin.get_task_status(null,null,'create_database')) 
         as r order by created_at desc"
     ```

## 为数据库配置设置
<a name="db2-configuring-database"></a>

要为 RDS for Db2 数据库实例上的数据库配置设置，请调用 `rdsadmin.set_configuration` 存储过程。例如，您可以配置在还原操作期间要创建的缓冲区或缓冲区操纵器的数量。

**为数据库配置设置**

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

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

1. （可选）通过调用 `rdsadmin.show_configuration` 检查您当前的配置设置。有关更多信息，请参阅 [rdsadmin.show\$1configuration](db2-sp-managing-databases.md#db2-sp-show-configuration)。

   ```
   db2 "call rdsadmin.show_configuration('name')"
   ```

1. 通过调用 `rdsadmin.set_configuration` 配置数据库的设置。有关更多信息，请参阅 [rdsadmin.set\$1configuration](db2-sp-managing-databases.md#db2-sp-set-configuration)。

   ```
   db2 "call rdsadmin.set_configuration(
       'name',  
       'value')"
   ```

## 修改数据库参数
<a name="db2-modifying-db-parameters"></a>

Amazon RDS for Db2 使用三种类型的参数：数据库管理器配置参数、注册表变量和数据库配置参数。可以通过参数组更新前两种类型，并通过 [rdsadmin.update\$1db\$1param](db2-sp-managing-databases.md#db2-sp-update-db-param) 存储过程更新最后一种类型。

**注意**  
只能修改现有参数的值。无法添加 RDS for Db2 不支持的新参数。

有关这些参数以及如何修改其值的更多信息，请参阅 [Amazon RDS for Db2 参数](db2-supported-parameters.md)。

## 配置日志保留期
<a name="db2-configuring-log-retention"></a>

要配置 Amazon RDS 为 RDS for Db2 数据库保留日志文件的时间长度，请调用 `rdsadmin.set_archive_log_retention` 存储过程。

**为数据库配置日志保留期**

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

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

1. （可选）通过调用 `rdsadmin.show_archive_log_retention` 检查您当前的日志保留期配置。有关更多信息，请参阅 [rdsadmin.show\$1archive\$1log\$1retention](db2-sp-managing-databases.md#db2-sp-show-archive-log-retention)。

   ```
   db2 "call rdsadmin.show_archive_log_retention(
       ?,
       'database_name')"
   ```

1. 通过调用 `rdsadmin.set_archive_log_retention` 配置数据库的日志保留期。有关更多信息，请参阅 [rdsadmin.set\$1archive\$1log\$1retention](db2-sp-managing-databases.md#db2-sp-set-archive-log-retention)。

   ```
   db2 "call rdsadmin.set_archive_log_retention(
       ?,            
       'database_name',  
       'archive_log_retention_hours')"
   ```

## 列出日志信息
<a name="db2-listing-log-information"></a>

要列出有关归档日志文件的详细信息，包括使用的总存储大小等详细信息，请调用 `rdsadmin.list_archive_log_information` 存储过程。

**列出数据库的日志信息**

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

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

1. 通过调用 `rdsadmin.list_archive_log_information` 返回日志文件信息列表。有关更多信息，请参阅 [rdsadmin.list\$1archive\$1log\$1information](db2-sp-managing-databases.md#db2-sp-list-archive-log-information)。

   ```
   db2 "call rdsadmin.list_archive_log_information(
       ?,            
       'database_name')"
   ```

## 使用精细访问控制（FGAC）
<a name="db2-using-fine-grained-access-control"></a>

要使用精细访问控制命令来控制对 RDS for Db2 数据库实例上数据库中表数据的访问，请调用 `rdsadmin.fgac_command` 存储过程。您可能需要使用 FGAC 根据用户角色或数据属性来限制对数据的访问。例如，您可以根据数据类型限制对患者医疗保健数据的访问权限，或者限制某些医疗服务提供商的访问权限。

**使用精细访问控制来控制对数据库中表数据的访问**

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

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

1. 通过调用 `rdsadmin.fgac_command` 运行各种精细访问控制命令。有关更多信息，请参阅 [rdsadmin.fgac\$1command参数](db2-sp-managing-databases.md#db2-sp-fgac-command)。

   ```
   db2 "call rdsadmin.fgac_command(     
       ?,
       'database_name',
       'fgac_command')"
   ```

## 停用数据库
<a name="db2-deactivating-database"></a>

要在 RDS for Db2 数据库实例上停用数据库，请调用 `rdsadmin.deactivate_database` 存储过程。

默认情况下，当您在 RDS for Db2 数据库实例上创建数据库时，Amazon RDS 会激活数据库。您可以停用不常使用的数据库以节省内存资源。

**停用数据库**

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

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

1. 通过调用 `rdsadmin.deactivate_database` 停用数据库。有关更多信息，请参阅 [rdsadmin.deactivate\$1database](db2-sp-managing-databases.md#db2-sp-deactivate-database)。

   ```
   db2 "call rdsadmin.deactivate_database(    
       ?, 
       'database_name')"
   ```

## 激活数据库
<a name="db2-activating-database"></a>

要在独立的 RDS for Db2 数据库实例上激活数据库，请调用 `rdsadmin.activate_database` 存储过程。

默认情况下，当您在 RDS for Db2 数据库实例上创建数据库时，Amazon RDS 会激活数据库。您可以停用不常使用的数据库以节省内存资源，在以后再激活已停用的数据库。

**激活数据库**

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

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

1. 通过调用 `rdsadmin.activate_database` 激活数据库。有关更多信息，请参阅 [rdsadmin.activate\$1database](db2-sp-managing-databases.md#db2-sp-activate-database)。

   ```
   db2 "call rdsadmin.activate_database(
       ?, 
       'database_name')"
   ```

## 重新激活数据库
<a name="db2-reactivating-database"></a>

要在副本源 RDS for Db2 数据库实例上重新激活数据库，请调用 `rdsadmin.reactivate_database` 存储过程。更改数据库配置后，您可能需要在 RDS for Db2 数据库实例上重新激活数据库。要确定是否需要重新激活数据库，请连接到该数据库并运行 `db2 get db cfg show detail`。

也可以在更改数据库配置后调用此存储过程，以便在独立的 RDS for Db2 数据库实例上重新激活数据库。或者，可以通过先调用 `rdsadmin.deactivate_database` 存储过程，然后调用 `rdsadmin.activate_database` 存储过程，在独立的 RDS for Db2 数据库实例上重新激活数据库。有关更多信息，请参阅[停用数据库](#db2-deactivating-database)和[激活数据库](#db2-activating-database)。

**重新激活数据库**

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

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

1. 通过调用 `rdsadmin.reactivate_database` 重新激活数据库。有关更多信息，请参阅 [rdsadmin.reactivate\$1database](db2-sp-managing-databases.md#db2-sp-reactivate-database)。

   ```
   db2 "call rdsadmin.reactivate_database(
       ?, 
       'database_name')"
   ```

## 删除数据库
<a name="db2-dropping-database"></a>

要从 RDS for Db2 数据库实例中删除数据库，请调用 `rdsadmin.drop_database` 存储过程。有关更多信息，请参阅 IBM Db2 文档中的 [Dropping databases](https://www.ibm.com/docs/en/db2/11.5?topic=databases-dropping)。

**注意**  
只有满足某些条件时，才能通过调用存储过程来删除数据库。有关更多信息，请参阅 `rdsadmin.drop_database` 的[使用说明](db2-sp-managing-databases.md#db2-sp-drop-database-usage-notes)。

**删除数据库**

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

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

1. 通过调用 `rdsadmin.drop_database` 来删除数据库。有关更多信息，请参阅 [rdsadmin.drop\$1database](db2-sp-managing-databases.md#db2-sp-drop-database)。

   ```
   db2 "call rdsadmin.drop_database('database_name')"
   ```

## 备份数据库
<a name="db2-backing-up-database"></a>

要在 RDS for Db2 数据库实例中将数据库备份到 Amazon S3，请调用 `rdsadmin.backup_database` 存储过程。有关更多信息，请参阅 IBM Db2 文档中的 [BACKUP DATABASE 命令](https://www.ibm.com/docs/en/db2/11.5.x?topic=commands-backup-database)。

**注意**  
此存储过程使用与 Amazon S3 的集成。请确保您已配置了集成，然后再继续。有关更多信息，请参阅 [将 Amazon RDS for Db2 数据库实例与 Amazon S3 集成](db2-s3-integration.md)。

**备份数据库**

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

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

1. 为 S3 创建 VPC 网关端点。如果您已有用于 S3 的 VPC 网关端点，请跳至第 4 步。

   要让 RDS for Db2 数据库实例能够与 Amazon S3 交互，您必须有一个 VPC 和一个供私有子网使用的 Amazon S3 网关端点。有关更多信息，请参阅 [步骤 1：为 Amazon S3 创建 VPC 网关端点](db2-troubleshooting.md#db2-creating-endpoint)。

1. 确认 S3 的 VPC 网关端点。有关更多信息，请参阅 [步骤 2：确认适用于 Amazon S3 的 VPC 网关端点存在](db2-troubleshooting.md#db2-confirming-endpoint)。

1. 通过调用 `rdsadmin.backup_database` 来备份数据库。有关更多信息，请参阅 [rdsadmin.backup\$1database](db2-sp-managing-databases.md#db2-sp-backup-database)。

   ```
   db2 "call rdsadmin.backup_database(
       ?,
       'database_name', 
       's3_bucket_name', 
       's3_prefix', 
       'backup_type',
       'compression_option',
       'util_impact_priority', 
       'num_files',
       'parallelism',
       'num_buffers')"
   ```

1. 终止连接。

   ```
   terminate
   ```

1. （可选）确认备份文件已上传到 Amazon S3 存储桶中的 *s3\$1prefix/dbi\$1resource\$1id/db\$1name* 下。如果这些文件未出现在 *s3\$1prefix/dbi\$1resource\$1id/db\$1name* 中，请检查备份数据库的状态以查明问题。有关更多信息，请参阅 [rdsadmin.get\$1task\$1status](db2-user-defined-functions.md#db2-udf-get-task-status)。如果您无法解决任何已发现的问题，请联系 [AWS 支持人员](https://aws.amazon.com/premiumsupport/)。

1. （可选）完成向 Amazon S3 的备份后，您可以将备份还原到 RDS for Db2 数据库实例或其他位置，例如本地服务器。有关还原到 RDS for Db2 数据库实例的信息，请参阅[还原数据库](#db2-restoring-database)。

## 将归档日志复制到 Amazon S3
<a name="db2-copying-archive-logs-to-s3"></a>

Db2 归档日志现在可以从 RDS for Db2 数据库实例复制到 Amazon S3。归档日志与使用 `rdsadmin.backup_database` 创建的原生备份相结合，可用于将数据库还原和前滚到另一个 RDS for Db2 实例或 EC2 数据库上的时间点。

 在配置此功能之前，请使用存储过程 `rdsadmin.backup_database` 来设置 RDS for Db2 数据库。

此功能在 RDS for Db2 数据库实例级别运行，但可以为每个数据库启用或禁用归档日志复制。

**配置到 Amazon S3 的归档日志复制**

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

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

1. 通过调用 [rdsadmin.set\$1configuration](db2-sp-managing-databases.md#db2-sp-set-configuration) 将归档日志备份设置为 S3。

   ```
   db2 "call rdsadmin.set_configuration(
       'name',
       'value')"
   ```

    **示例：**

   ```
   db2 "call rdsadmin.set_configuration('ARCHIVE_LOG_COPY_TARGET_S3_ARN', 'arn:aws:s3:::my_rds_db2_backups/archive-log-copy/')"
   ```

1. 通过调用 `rdsadmin.enable_archive_log_copy` 为数据库启用归档日志复制。将 *database\$1name* 替换为数据库名称。

   ```
   db2 "call rdsadmin.enable_archive_log_copy(?, 'database_name')"
   ```

1. 同样，要禁用数据库的归档日志复制，请调用 `rdsadmin.disable_archive_log_copy`。

   ```
   db2 "call rdsadmin.disable_archive_log_copy(?, 'database_name')"
   ```

1. 通过调用 `rdsadmin.list_databases` 来确认归档日志复制状态。

   ```
   db2 "select * from table(rdsadmin.list_databases())"
   ```

    **示例输出。**

   ```
   DATABASE_NAME   CREATE_TIME                DATABASE_UNIQUE_ID                                 ARCHIVE_LOG_RETENTION_HOURS ARCHIVE_LOG_COPY ARCHIVE_LOG_LAST_UPLOAD_FILE ARCHIVE_LOG_LAST_UPLOAD_FILE_TIME ARCHIVE_LOG_COPY_STATUS
   --------------- -------------------------- -------------------------------------------------- --------------------------- ---------------- ---------------------------- --------------------------------- ------------------------------
   RDSADMIN        2026-01-06-02.03.42.569069 RDSADMIN                                                                     0 DISABLED         -                            -                                 -
   FOO             2026-01-06-02.13.42.885650 F0D81C7E-7213-4565-B376-4F33FCF420E3                                         7 ENABLED          S0006536.LOG                 2026-01-28-19.15.10.000000        UPLOADING
   CODEP           2026-01-14-19.42.42.508476 106EEF95-6E30-4FFF-85AE-B044352DF095                                         0 DISABLED         -                            -                                 -
   ...
   ```

## 还原数据库
<a name="db2-restoring-database"></a>

要将数据库从 Amazon S3 存储桶移动到 RDS for Db2 数据库实例，请调用 `rdsadmin.restore_database` 存储过程。有关更多信息，请参阅 IBM Db2 文档中的 [RESTORE DATABASE 命令](https://www.ibm.com/docs/en/db2/11.5?topic=commands-restore-database)。

**还原数据库**

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

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

1. （可选）通过调用 `rdsadmin.show_configuration` 来检查当前的配置设置以优化还原操作。有关更多信息，请参阅 [rdsadmin.show\$1configuration](db2-sp-managing-databases.md#db2-sp-show-configuration)。

   ```
   db2 "call rdsadmin.show_configuration('name')"
   ```

1. 通过调用 `rdsadmin.set_configuration` 来配置设置以优化还原操作。显式设置这些值可以提高还原包含大量数据的数据库时的性能。有关更多信息，请参阅 [rdsadmin.set\$1configuration](db2-sp-managing-databases.md#db2-sp-set-configuration)。

   ```
   db2 "call rdsadmin.set_configuration(
       'name',  
       'value')"
   ```

1. 通过调用 `rdsadmin.restore_database` 来还原数据库。有关更多信息，请参阅 [rdsadmin.restore\$1database](db2-sp-managing-databases.md#db2-sp-restore-database)。

   ```
   db2 "call rdsadmin.restore_database(
       ?,
       'database_name', 
       's3_bucket_name', 
       's3_prefix', 
       restore_timestamp, 
       'backup_type')"
   ```

1. （可选）通过调用 `rdsadmin.list_databases` 并检查已还原的数据库是否已列出，来确认您的数据库已还原。有关更多信息，请参阅 [rdsadmin.list\$1databases](db2-user-defined-functions.md#db2-udf-list-databases)。

1. 通过调用 `rdsadmin.rollforward_database` 使数据库恢复联机并应用其它事务日志。有关更多信息，请参阅 [rdsadmin.rollforward\$1database](db2-sp-managing-databases.md#db2-sp-rollforward-database)。

   ```
   db2 "call rdsadmin.rollforward_database(
       ?,
       'database_name',
       's3_bucket_name', 
       s3_prefix, 
       'rollforward_to_option', 
       'complete_rollforward')"
   ```

1. （可选）通过调用 [rdsadmin.rollforward\$1status](db2-sp-managing-databases.md#db2-sp-rollforward-status) 存储过程来检查 `rdsadmin.rollforward_database` 存储过程的状态。

1. 如果在上一步中将 `complete_rollforward` 设置为 `FALSE`，则必须通过调用 `rdsadmin.complete_rollforward` 来完成使数据库恢复联机的过程。有关更多信息，请参阅 [rdsadmin.complete\$1rollforward](db2-sp-managing-databases.md#db2-sp-complete-rollforward)。

   ```
   db2 "call rdsadmin.complete_rollforward(
       ?,
       'database_name')"
   ```

1. （可选）通过调用 [rdsadmin.rollforward\$1status](db2-sp-managing-databases.md#db2-sp-rollforward-status) 存储过程来检查 `rdsadmin.complete_rollforward` 存储过程的状态。

## 列出数据库
<a name="db2-listing-databases"></a>

通过调用 `rdsadmin.list_databases` 用户定义的函数，您可以列出在 Amazon RDS for Db2 上运行的所有数据库。

**列出您的数据库**

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

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

1. 通过调用 `rdsadmin.list_databases` 列出您的数据库。有关更多信息，请参阅 [rdsadmin.list\$1databases](db2-user-defined-functions.md#db2-udf-list-databases)。

   ```
   db2 "select * from table(rdsadmin.list_databases())"
   ```

## 收集有关数据库的信息
<a name="db2-collecting-info-db"></a>

要收集有关 RDS for Db2 数据库实例上数据库的信息，请调用 `rdsadmin.db2pd_command` 存储过程。这些信息可以帮助监控您的数据库或排查问题。

**收集有关数据库的信息**

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

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

1. 通过调用 `rdsadmin.db2pd_command` 收集有关数据库的信息。有关更多信息，请参阅 [rdsadmin.db2pd\$1command](db2-sp-managing-databases.md#db2-sp-db2pd-command)。

   ```
   db2 "call rdsadmin.db2pd_command('db2pd_cmd')"
   ```

## 强制应用程序退出数据库
<a name="db2-forcing-application-off-db"></a>

要强制应用程序退出 RDS for Db2 数据库实例上的数据库，请调用 `rdsadmin.force_application` 存储过程。在对数据库进行维护之前，请强制应用程序退出数据库。

**强制应用程序退出数据库**

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

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

1. 通过调用 `rdsadmin.force_application` 来强制应用程序退出数据库 有关更多信息，请参阅 [rdsadmin.force\$1application](db2-sp-managing-databases.md#db2-sp-force-application)。

   ```
   db2 "call rdsadmin.force_application(     
       ?,
       'applications')"
   ```

## 生成性能报告
<a name="db2-generating-performance-reports"></a>

您可以使用过程或脚本生成性能报告。有关使用过程的信息，请参阅 IBM Db2 文档中的 [DBSUMMARY procedure ‐ Generate a summary report of system and application performance metrics](https://www.ibm.com/docs/en/db2/11.5?topic=mm-dbsummary-procedure-generate-summary-report-system-application-performance-metrics)。

Db2 在其 `~sqllib/sample/perf` 目录中包含一个 `db2mon.sh` 文件。运行该脚本会生成低成本、广泛的 SQL 指标报告。要下载 `db2mon.sh` 文件和相关的脚本文件，请参阅 IBM db2-samples GitHub 存储库中的 [https://github.com/IBM/db2-samples/tree/master/perf](https://github.com/IBM/db2-samples/tree/master/perf) 目录。

**使用脚本生成性能报告**

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

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

1. 通过调用 `rdsadmin.create_bufferpool` 创建一个名为 `db2monbp`、页面大小为 4096 的缓冲池。有关更多信息，请参阅 [rdsadmin.create\$1bufferpool](db2-sp-managing-buffer-pools.md#db2-sp-create-buffer-pool)。

   ```
   db2 "call rdsadmin.create_bufferpool('database_name','db2monbp',4096)"
   ```

1. 通过调用 `rdsadmin.create_tablespace` 创建一个名为 `db2montmptbsp` 且使用 `db2monbp` 缓冲池的临时表空间。有关更多信息，请参阅 [rdsadmin.create\$1tablespace](db2-sp-managing-tablespaces.md#db2-sp-create-tablespace)。

   ```
   db2 "call rdsadmin.create_tablespace('database_name',\
       'db2montmptbsp','db2monbp',4096,1000,100,'T')"
   ```

1. 打开 `db2mon.sh` 脚本，并修改有关连接到数据库的行。

   1. 删除以下行。

      ```
      db2 -v connect to $dbName
      ```

   1. 将上一步中的行替换为下一行。在以下示例中，将 *master\$1username* 和 *master\$1password* 替换为您的 RDS for Db2 数据库实例的主用户名和主密码。

      ```
      db2 -v connect to $dbName user master_username using master_password
      ```

   1. 移除以下各行。

      ```
      db2 -v create bufferpool db2monbp
      
      db2 -v create user temporary tablespace db2montmptbsp bufferpool db2monbp
      
      db2 -v drop tablespace db2montmptbsp
      
      db2 -v drop bufferpool db2monbp
      ```

1. 运行 `db2mon.sh` 脚本以按指定的间隔输出报告。在以下示例中，将 *absolute\$1path* 替换为指向脚本文件的完整路径，将 *rds\$1database\$1alias* 替换为数据库的名称，并将 *seconds* 替换为报告生成之间的秒数（0 到 3600）。

   ```
   absolute_path/db2mon.sh rds_database_alias seconds | tee -a db2mon.out
   ```

   **示例**

   以下示例显示脚本文件位于 `home` 目录下的 `perf` 目录中。

   ```
   /home/db2inst1/sqllib/samples/perf/db2mon.sh rds_database_alias seconds | tee -a db2mon.out
   ```

1. 删除为 `db2mon.sh` 文件创建的缓冲池和表空间。在以下示例中，将 *master\$1username* 和 *master\$1password* 替换为您的 RDS for Db2 数据库实例的主用户名和主密码。将 *database\$1name* 替换为数据库的名称。有关更多信息，请参阅[rdsadmin.drop\$1tablespace](db2-sp-managing-tablespaces.md#db2-sp-drop-tablespace)和[rdsadmin.drop\$1bufferpool](db2-sp-managing-buffer-pools.md#db2-sp-drop-buffer-pool)。

   ```
   db2 connect to rdsadmin user master_username using master_password
   
   db2 "call rdsadmin.drop_tablespace('database_name','db2montmptbsp')"
   
   db2 "call rdsadmin.drop_bufferpool('database_name','db2monbp')"
   ```

## 管理存储
<a name="db2-managing-storage"></a>

Db2 使用自动存储来管理数据库对象（例如表、索引和临时文件）的物理存储。自动存储允许 Db2 系统根据需要创建和管理存储路径，而不是手动分配存储空间和跟踪正在使用的存储路径。这可以简化 Db2 数据库的管理并降低因人为错误而导致错误的可能性。有关更多信息，请参阅 IBM Db2 文档中的[自动存储](https://www.ibm.com/docs/en/db2/11.5?topic=overview-automatic-storage)。

使用 RDS for Db2，您可以通过自动扩展逻辑卷和文件系统来动态增加存储大小。有关更多信息，请参阅 [使用 Amazon RDS 数据库实例的存储](USER_PIOPS.StorageTypes.md)。

# 表空间的常见任务
<a name="db2-managing-tablespaces"></a>

您可以为 RDS for Db2 数据库创建、更改、重命名或删除表空间。创建、更改、重命名或删除表空间需要更高级别的 `SYSADM` 权限，而主用户无法获得该权限。而应使用 Amazon RDS 存储过程。

**Topics**
+ [创建表空间](#db2-creating-tablespace)
+ [更改表空间](#db2-altering-tablespace)
+ [重命名表空间](#db2-renaming-tablespace)
+ [删除表空间](#db2-dropping-tablespace)
+ [检查表空间的状态](#db2-checking-tablespaces-procedure)
+ [返回有关表空间的详细信息](#db2-tablespaces-info-db2pd)
+ [列出表空间的状态和存储组](#db2-state-storage-group-tablespace-sql)
+ [列出表的表空间](#db2-return-tablespaces-sql)
+ [列出表空间容器](#db2-listing-tablespace-containers)

## 创建表空间
<a name="db2-creating-tablespace"></a>

要为您的 RDS for Db2 数据库创建表空间，请调用 `rdsadmin.create_tablespace` 存储过程。有关更多信息，请参阅 IBM Db2 文档中的 [CREATE TABLESPACE 语句](https://www.ibm.com/docs/en/db2/11.5?topic=statements-create-tablespace)。

**重要**  
要创建表空间，您必须具有相同页面大小的缓冲池才能与表空间相关联。有关更多信息，请参阅 [缓冲池的常见任务](db2-managing-buffer-pools.md)。

**创建表空间**

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

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

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')"
   ```

## 更改表空间
<a name="db2-altering-tablespace"></a>

要更改 RDS for Db2 数据库的表空间，请调用 `rdsadmin.alter_tablespace` 存储过程。您可以使用此存储过程来更改表空间的缓冲池、降低高水位或使表空间联机。有关更多信息，请参阅 IBM Db2 文档中的 [ALTER TABLESPACE 语句](https://www.ibm.com/docs/en/db2/11.5?topic=statements-alter-tablespace)。

**更改表空间**

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

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

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

   ```
   db2 "call rdsadmin.alter_tablespace(
       'database_name', 
       'tablespace_name', 
       'buffer_pool_name', 
       buffer_pool_size, 
       tablespace_increase_size, 
       'max_size', 'reduce_max', 
       'reduce_stop', 
       'reduce_value', 
       'lower_high_water', 
       'lower_high_water_stop', 
       'switch_online')"
   ```

## 重命名表空间
<a name="db2-renaming-tablespace"></a>

要更改 RDS for Db2 数据库的表空间名称，请调用 `rdsadmin.rename_tablespace` 存储过程。有关更多信息，请参阅 IBM Db2 文档中的 [RENAME TABLESPACE 语句](https://www.ibm.com/docs/en/db2/11.5?topic=statements-rename-tablespace)。

**重命名表空间**

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

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

1. 通过调用 `rdsadmin.rename_tablespace` 重命名表空间。有关更多信息，包括对表空间命名的限制，请参阅[rdsadmin.rename\$1tablespace](db2-sp-managing-tablespaces.md#db2-sp-rename-tablespace)。

   ```
   db2 "call rdsadmin.rename_tablespace(
       'database_name', 
       'source_tablespace_name',
       'target_tablespace_name')"
   ```

## 删除表空间
<a name="db2-dropping-tablespace"></a>

要删除 RDS for Db2 数据库的表空间，请调用 `rdsadmin.drop_tablespace` 存储过程。在删除表空间之前，请先删除表空间中的所有对象，例如表、索引或大型对象（LOB）。有关更多信息，请参阅 IBM Db2 文档中的[删除表空间](https://www.ibm.com/docs/en/db2/11.5?topic=spaces-dropping-table)。

**删除表空间**

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

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

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

   ```
   db2 "call rdsadmin.drop_tablespace(
       'database_name', 
       'tablespace_name')"
   ```

## 检查表空间的状态
<a name="db2-checking-tablespaces-procedure"></a>

 可以通过使用 `cast` 函数检查表空间的状态。

**检查表空间的状态**

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

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

1. 返回摘要输出。

   对于摘要输出：

   ```
   db2 "select cast(tbsp_id as smallint) as tbsp_id,
   cast(tbsp_name as varchar(35)) as tbsp_name,
   cast(tbsp_type as varchar(3)) as tbsp_type,
   cast(tbsp_state as varchar(10)) as state,
   cast(tbsp_content_type as varchar(8)) as contents from table(mon_get_tablespace(null,-1)) order by tbsp_id"
   ```

## 返回有关表空间的详细信息
<a name="db2-tablespaces-info-db2pd"></a>

可以通过使用 `cast` 函数返回有关一个成员或所有成员的表空间的信息。

**返回有关表空间的详细信息**

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

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

1. 返回数据库中面向一个成员或面向所有成员的所有表空间的详细信息。

   对于一个成员：

   ```
   db2 "select cast(member as smallint) as member,
   cast(tbsp_id as smallint) as tbsp_id,
   cast(tbsp_name as varchar(35)) as tbsp_name,
   cast(tbsp_type as varchar(3)) as tbsp_type,
   cast(tbsp_state as varchar(10)) as state,
   cast(tbsp_content_type as varchar(8)) as contents,
   cast(tbsp_total_pages as integer) as total_pages,
   cast(tbsp_used_pages as integer) as used_pages,
   cast(tbsp_free_pages as integer) as free_pages,
   cast(tbsp_page_top as integer) as page_hwm,
   cast(tbsp_page_size as integer) as page_sz,
   cast(tbsp_extent_size as smallint) as extent_sz,
   cast(tbsp_prefetch_size as smallint) as prefetch_sz,
   cast(tbsp_initial_size as integer) as initial_size,
   cast(tbsp_increase_size_percent as smallint) as increase_pct,
   cast(storage_group_name as varchar(12)) as stogroup from table(mon_get_tablespace(null,-1)) order by member, tbsp_id "
   ```

   对于所有成员：

   ```
   db2 "select cast(member as smallint) as member
   cast(tbsp_id as smallint) as tbsp_id,
   cast(tbsp_name as varchar(35)) as tbsp_name,
   cast(tbsp_type as varchar(3)) as tbsp_type,
   cast(tbsp_state as varchar(10)) as state,
   cast(tbsp_content_type as varchar(8)) as contents,
   cast(tbsp_total_pages as integer) as total_pages,
   cast(tbsp_used_pages as integer) as used_pages,
   cast(tbsp_free_pages as integer) as free_pages,
   cast(tbsp_page_top as integer) as page_hwm,
   cast(tbsp_page_size as integer) as page_sz,
   cast(tbsp_extent_size as smallint) as extent_sz,
   cast(tbsp_prefetch_size as smallint) as prefetch_sz,
   cast(tbsp_initial_size as integer) as initial_size,
   cast(tbsp_increase_size_percent as smallint) as increase_pct,
   cast(storage_group_name as varchar(12)) as stogroup from table(mon_get_tablespace(null,-2)) order by member, tbsp_id "
   ```

## 列出表空间的状态和存储组
<a name="db2-state-storage-group-tablespace-sql"></a>

可以通过运行 SQL 语句来列出表空间的状态和存储组。

要列出表空间的状态和存储组，请运行以下 SQL 语句：

```
db2 "SELECT varchar(tbsp_name, 30) as tbsp_name,
                  varchar(TBSP_STATE, 30) state,
                  tbsp_type,
                  varchar(storage_group_name,30) storage_group
FROM TABLE(MON_GET_TABLESPACE('',-2)) AS t"
```

## 列出表的表空间
<a name="db2-return-tablespaces-sql"></a>

可以通过运行 SQL 语句来列出表的表空间。

要列出表的表空间，运行以下 SQL 语句。在以下示例中，将 *SCHEMA\$1NAME* 和 *TABLE\$1NAME* 替换为架构和表的名称：

```
db2 "SELECT 
   VARCHAR(SD.TBSPACE,30) AS DATA_SPACE,
   VARCHAR(SL.TBSPACE,30) AS LONG_SPACE,
   VARCHAR(SI.TBSPACE,30) AS INDEX_SPACE
 FROM 
   SYSCAT.DATAPARTITIONS P 
   JOIN SYSCAT.TABLESPACES SD ON SD.TBSPACEID = P.TBSPACEID 
   LEFT JOIN SYSCAT.TABLESPACES SL ON SL.TBSPACEID = P.LONG_TBSPACEID
   LEFT JOIN SYSCAT.TABLESPACES SI ON SI.TBSPACEID = P.INDEX_TBSPACEID
 WHERE
    TABSCHEMA = 'SCHEMA_NAME'
 AND TABNAME   = 'TABLE_NAME'"
```

## 列出表空间容器
<a name="db2-listing-tablespace-containers"></a>

可以通过使用 `cast` 命令列出所有表空间容器或特定的表空间容器。

**列出表空间的表空间容器**

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

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

1. 返回数据库中所有表空间容器或特定表空间容器的列表。

   对于所有表空间容器：

   ```
   db2 "select cast(member as smallint) as member,
   cast(tbsp_name as varchar(35)) as tbsp_name,
   cast(container_id as smallint) as id,
   cast(container_name as varchar(60)) as container_path, container_type as type from table(mon_get_container(null,-2)) order by member,tbsp_id,container_id"
   ```

   对于特定的表空间容器：

   ```
   db2 "select cast(member as smallint) as member,
   cast(tbsp_name as varchar(35)) as tbsp_name,
   cast(container_id as smallint) as id,
   cast(container_name as varchar(60)) as container_path, container_type as type from table(mon_get_container('TBSP_1',-2)) order by member, tbsp_id,container_id"
   ```