

# 表空间的常见任务
<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"
   ```