

# 在 RDS for Oracle 中使用表空间
<a name="Appendix.Oracle.CommonDBATasks.TablespacesAndDatafiles"></a>

可以将表空间与 RDS for Oracle 结合使用，后者是一种用于存储数据库数据的逻辑存储单元。

**重要**  
如果您的数据库实例有副本，我们建议使用参数组设置而不是会话级别的更改来管理默认文件位置。对主实例中默认文件位置的会话级别更改不会自动反映在副本中。使用参数组设置可确保文件位置在主实例和副本实例间保持一致。

**Topics**
+ [在 RDS for Oracle 中指定数据库文件位置](#Appendix.Oracle.CommonDBATasks.DatabaseFileLocations)
+ [在 RDS for Oracle 中创建表空间并调整其大小](#Appendix.Oracle.CommonDBATasks.CreatingTablespacesAndDatafiles)
+ [在 RDS for Oracle 中的附加存储卷上创建表空间](#Appendix.Oracle.CommonDBATasks.CreatingTablespacesWithFileLocations)
+ [在 RDS for Oracle 中设置默认表空间](#Appendix.Oracle.CommonDBATasks.SettingDefaultTablespace)
+ [在 RDS for Oracle 中设置默认临时表空间](#Appendix.Oracle.CommonDBATasks.SettingDefTempTablespace)
+ [在实例存储上创建临时表空间](#Appendix.Oracle.CommonDBATasks.creating-tts-instance-store)

## 在 RDS for Oracle 中指定数据库文件位置
<a name="Appendix.Oracle.CommonDBATasks.DatabaseFileLocations"></a>

RDS for Oracle 使用 Oracle 管理的文件（OMF）来命名数据库文件。创建数据库文件时，数据库会根据 `DB_CREATE_FILE_DEST` 初始化参数的当前设置派生该设置。

`DB_CREATE_FILE_DEST` 初始化参数的默认值为 `/rdsdbdata/db`（对于独立数据库）和 `/rdsdbdata/db/pdb` [对于容器化（CDB/MT）架构]。如果数据库实例有附加存储卷，则可以将 `DB_CREATE_FILE_DEST` 设置为卷位置。例如，如果实例在 `/rdsdbdata/db` 上挂载了卷，则可以将 `DB_CREATE_FILE_DEST` 设置为该值。

您可以在会话级别或 Oracle 数据库实例级别修改 `DB_CREATE_FILE_DEST` 参数。

### 在实例级别修改 DB\$1CREATE\$1FILE\$1SET
<a name="Appendix.Oracle.CommonDBATasks.InstanceLevelModification"></a>

要在实例级别修改该参数，请更新分配给数据库实例的参数组中的该参数并应用该参数。有关更多信息，请参阅[RDS for Oracle 初始化参数](Oracle.Concepts.FeatureSupport.Parameters.md)和[在 Amazon RDS 中修改数据库参数组中的参数](USER_WorkingWithParamGroups.Modifying.md)。

### 在会话级别修改 DB\$1CREATE\$1FILE\$1DEST
<a name="Appendix.Oracle.CommonDBATasks.SessionLevelModification"></a>

您可以通过执行 `ALTER SESSION` 语句在会话级别修改该参数。当您想要在特定位置为特定会话创建数据库文件而不影响整个实例时，这种方法非常有用。

以下示例显示了如何检查当前参数值并针对会话修改该值：

```
SHOW PARAMETER db_create_file_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest                  string      /rdsdbdata/db

ALTER SESSION SET db_create_file_dest = '/rdsdbdata2/db';

Session altered.

SHOW PARAMETER db_create_file_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest                  string      /rdsdbdata2/db
```

## 在 RDS for Oracle 中创建表空间并调整其大小
<a name="Appendix.Oracle.CommonDBATasks.CreatingTablespacesAndDatafiles"></a>

创建表空间时，数据库会在创建时在由 `DB_CREATE_FILE_DEST` 初始化参数指定的存储卷中创建数据文件。原定设置情况下，如果未指定数据文件大小，则创建的表空间原定设置为 `AUTOEXTEND ON`，且没有最大大小。在以下示例中，表空间 *users1* 是可自动扩展的。

```
CREATE TABLESPACE users1;
```

由于这些默认设置，表空间会增大以占用所有分配的存储空间。建议您在永久表空间和临时表空间上指定适当的最大大小，并仔细监视空间使用率。

以下示例创建一个名为 *users2* 的表空间，起始大小为 1GB。由于指定了数据文件大小，但未指定 `AUTOEXTEND ON`，因此表空间不可自动扩展。

```
CREATE TABLESPACE users2 DATAFILE SIZE 1G;
```

以下示例创建一个名为 *users3* 的表空间，起始大小为 1GB，开启了自动扩展，且最大大小为 10GB。

```
CREATE TABLESPACE users3 DATAFILE SIZE 1G AUTOEXTEND ON MAXSIZE 10G;
```

以下示例创建一个名为 *temp01* 的临时表空间。

```
CREATE TEMPORARY TABLESPACE temp01;
```

您可以使用 `ALTER TABLESPACE` 调整大文件表空间的大小。可以 KB (K)、MB (M)、GB (G) 或 TB (T) 为单位指定大小。以下示例将名为 *users\$1bf* 的大文件表空间的大小调整到 200MB。

```
ALTER TABLESPACE users_bf RESIZE 200M;
```

以下示例向名为 *users\$1sf* 的小文件表空间添加另一个数据文件。

```
ALTER TABLESPACE users_sf ADD DATAFILE SIZE 100000M AUTOEXTEND ON NEXT 250m MAXSIZE UNLIMITED;
```

## 在 RDS for Oracle 中的附加存储卷上创建表空间
<a name="Appendix.Oracle.CommonDBATasks.CreatingTablespacesWithFileLocations"></a>

要在附加存储卷上创建表空间，请将 `DB_CREATE_FILE_DEST` 参数修改为卷位置。以下示例将文件位置设置为 `/rdsdbdata2/db`。

```
ALTER SESSION SET db_create_file_dest = '/rdsdbdata2/db';

Session altered.
```

在以下示例中，您将在附加卷 `/rdsdbdata2/db` 上创建表空间。

```
CREATE TABLESPACE new_tablespace DATAFILE SIZE 10G;

Tablespace created.

SELECT tablespace_name,file_id,file_name FROM dba_data_files
WHERE tablespace_name = 'NEW_TABLESPACE';

TABLESPACE_NAME              FILE_ID FILE_NAME
------------------------- ---------- --------------------------------------------------------------------------------
NEW_TABLESPACE                     7 /rdsdbdata2/db/ORCL_A/datafile/o1_mf_newtable_a123b4c5_.dbf
```

要创建小文件表空间并将其数据文件分散到不同的存储卷，请在创建表空间后向表空间添加数据文件。在以下示例中，您创建了一个表空间，其中数据文件位于默认位置 `/rdsdbdata/db`。然后将默认目标设置为 `/rdsdbdata/db2`。向新创建的表空间中添加数据文件时，数据库会将该文件存储在 `/rdsdbdata/db2` 中。

```
ALTER SESSION SET db_create_file_dest = '/rdsdbdata/db';

Session altered.

CREATE SMALLFILE TABLESPACE smalltbs DATAFILE SIZE 10G;

Tablespace created.

SELECT tablespace_name,file_id,file_name FROM dba_data_files
WHERE tablespace_name = 'SMALLTBS';

TABLESPACE_NAME              FILE_ID FILE_NAME
------------------------- ---------- --------------------------------------------------------------------------------
SMALLTBS                           8 /rdsdbdata/db/ORCL_A/datafile/o1_mf_smalltbs_n563yryk_.dbf

ALTER SESSION SET db_create_file_dest = '/rdsdbdata2/db';

Session altered.

ALTER TABLESPACE smalltbs ADD DATAFILE SIZE 10G;

Tablespace altered.

SELECT tablespace_name,file_id,file_name FROM dba_data_files
WHERE tablespace_name = 'SMALLTBS';

TABLESPACE_NAME              FILE_ID FILE_NAME
------------------------- ---------- --------------------------------------------------------------------------------
SMALLTBS                           8 /rdsdbdata/db/ORCL_A/datafile/o1_mf_smalltbs_n563yryk_.dbf
SMALLTBS                           9 /rdsdbdata2/db/ORCL_A/datafile/o1_mf_smalltbs_n564004g_.dbf
```

## 在 RDS for Oracle 中设置默认表空间
<a name="Appendix.Oracle.CommonDBATasks.SettingDefaultTablespace"></a>

要设置默认表空间，请使用 Amazon RDS 过程 `rdsadmin.rdsadmin_util.alter_default_tablespace`。`alter_default_tablespace` 过程具有以下参数。


****  

| 参数名称 | 数据类型 | 默认值 | 必需 | 描述 | 
| --- | --- | --- | --- | --- | 
|  `tablespace_name`  |  varchar  |  —  |  是  |  默认表空间的名称。  | 

以下示例将默认表空间设置为 *users2*：

```
EXEC rdsadmin.rdsadmin_util.alter_default_tablespace(tablespace_name => 'users2');
```

## 在 RDS for Oracle 中设置默认临时表空间
<a name="Appendix.Oracle.CommonDBATasks.SettingDefTempTablespace"></a>

要设置默认临时表空间，请使用 Amazon RDS 过程 `rdsadmin.rdsadmin_util.alter_default_temp_tablespace`。`alter_default_temp_tablespace` 过程具有以下参数。


****  

| 参数名称 | 数据类型 | 默认值 | 必需 | 描述 | 
| --- | --- | --- | --- | --- | 
|  `tablespace_name`  |  varchar  |  —  |  是  |  默认临时表空间的名称。  | 

以下示例将默认临时表空间设置为 *temp01*。

```
EXEC rdsadmin.rdsadmin_util.alter_default_temp_tablespace(tablespace_name => 'temp01');
```

## 在实例存储上创建临时表空间
<a name="Appendix.Oracle.CommonDBATasks.creating-tts-instance-store"></a>

要在实例存储上创建临时表空间，请使用 Amazon RDS 过程 `rdsadmin.rdsadmin_util.create_inst_store_tmp_tblspace`。`create_inst_store_tmp_tblspace` 过程具有以下参数。


****  

| 参数名称 | 数据类型 | 默认值 | 必需 | 描述 | 
| --- | --- | --- | --- | --- | 
|  `p_tablespace_name`  |  varchar  |  —  |  是  |  临时表空间的名称。  | 

以下示例在实例存储中创建临时表空间 *temp01*。

```
EXEC rdsadmin.rdsadmin_util.create_inst_store_tmp_tblspace(p_tablespace_name => 'temp01');
```

**重要**  
运行 `rdsadmin_util.create_inst_store_tmp_tblspace` 时，新创建的临时表空间不会自动设置为原定设置临时表空间。要将其设置为原定设置，请参阅 [在 RDS for Oracle 中设置默认临时表空间](#Appendix.Oracle.CommonDBATasks.SettingDefTempTablespace)。

有关更多信息，请参阅 [在 RDS for Oracle 实例存储中存储临时数据](CHAP_Oracle.advanced-features.instance-store.md)。