

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 執行 Oracle 資料庫執行個體的一般資料庫任務
<a name="Appendix.Oracle.CommonDBATasks.Database"></a>

您可以在下文中找到如何在執行 Oracle 的 Amazon RDS 資料庫執行個體上執行與資料庫相關的一般 DBA 任務。為了提供受管理的服務體驗，Amazon RDS 並不會提供資料庫執行個體的殼層存取權。Amazon RDS 也會將存取權限制在某些需要進階權限的系統程序和資料表。

**Topics**
+ [變更資料庫的全域名稱](Appendix.Oracle.CommonDBATasks.RenamingGlobalName.md)
+ [在 RDS for Oracle 中使用資料表空間](Appendix.Oracle.CommonDBATasks.TablespacesAndDatafiles.md)
+ [在 RDS for Oracle 中使用暫存檔](Appendix.Oracle.CommonDBATasks.using-tempfiles.md)
+ [在 RDS for Oracle 中調整資料表空間、資料檔案和暫存檔的大小](Appendix.Oracle.CommonDBATasks.ResizeTempSpaceReadReplica.md)
+ [在 RDS for Oracle 中的儲存磁碟區之間移動資料](Appendix.Oracle.CommonDBATasks.MovingDataBetweenVolumes.md)
+ [在 RDS for Oracle 中使用外部資料表](Appendix.Oracle.CommonDBATasks.External_Tables.md)

# 變更資料庫的全域名稱
<a name="Appendix.Oracle.CommonDBATasks.RenamingGlobalName"></a>

若要變更資料庫的全域名稱，請使用 Amazon RDS 程序 `rdsadmin.rdsadmin_util.rename_global_name`。`rename_global_name` 程序具有下列參數。


****  

| 參數名稱 | 資料類型 | 預設 | 必要 | 描述 | 
| --- | --- | --- | --- | --- | 
|  `p_new_global_name`  |  varchar2  |  —  |  是  |  資料庫的新全域名稱。  | 

必須開啟資料庫，才會發生名稱變更。如需變更資料庫全域名稱的詳細資訊，請參閱 Oracle 文件中的 [ALTER DATABASE](http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_1004.htm#SQLRF52547)。

下列範例會將資料庫的全域名稱變更為 `new_global_name`。

```
EXEC rdsadmin.rdsadmin_util.rename_global_name(p_new_global_name => 'new_global_name');
```

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

您可以搭配 RDS for Oracle 使用資料表空間，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* 的資料表空間，其中的起始大小為 1 GB。由於已指定資料檔案大小，但未指定 `AUTOEXTEND ON`，因此資料表空間無法自動擴展。

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

下列範例會建立名為 *users3* 的資料表空間，其中的起始大小為 1 GB、開啟自動擴展，且大小上限為 10 GB：

```
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* 的大型檔案資料表空間大小調整為 200 MB。

```
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)。

# 在 RDS for Oracle 中使用暫存檔
<a name="Appendix.Oracle.CommonDBATasks.using-tempfiles"></a>

## 將暫存檔新增至僅供讀取複本上的執行個體儲存體
<a name="Appendix.Oracle.CommonDBATasks.adding-tempfile-replica"></a>

當您在主要資料庫執行個體上建立暫存資料表空間時，僅供讀取複本不會建立暫存檔。假設出於以下原因之一，僅供讀取複本上存在空的暫存資料表空間：
+ 您已從僅供讀取複本的資料表空間捨棄暫存檔。如需詳細資訊，請參閱[捨棄僅供讀取複本上的暫存檔](Appendix.Oracle.CommonDBATasks.dropping-tempfiles-replica.md)。
+ 您已在主要資料庫執行個體上建立新的暫存資料表空間。在此情況下，RDS for Oracle 會將中繼資料同步至僅供讀取複本。

您可以將暫存檔新增至空的暫存資料表空間，並將暫存檔存放在執行個體儲存體中。若要在執行個體儲存體上建立暫存檔，請使用 Amazon RDS 程序 `rdsadmin.rdsadmin_util.add_inst_store_tempfile`。您只能在僅供讀取複本上使用此程序。 程序具有下列參數。


****  

| 參數名稱 | 資料類型 | 預設 | 必要 | 描述 | 
| --- | --- | --- | --- | --- | 
|  `p_tablespace_name`  |  varchar  |  —  |  是  |  僅供讀取複本上暫存資料表空間的名稱。  | 

在下列範例中，僅供讀取複本上存在空的暫存資料表空間 *temp01*。執行下列命令，為此資料表空間建立暫存檔，並將它存放在執行個體儲存體中。

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

如需詳細資訊，請參閱[將暫存資料存放在 RDS for Oracle 執行個體儲存體中](CHAP_Oracle.advanced-features.instance-store.md)。

# 捨棄僅供讀取複本上的暫存檔
<a name="Appendix.Oracle.CommonDBATasks.dropping-tempfiles-replica"></a>

您無法捨棄僅供讀取複本上的現有暫存資料表空間。您可以將僅供讀取複本上的暫存檔儲存體從 Amazon EBS 變更為執行個體儲存體，或從執行個體儲存體變更為 Amazon EBS。若要實現這些目標，請執行下列操作：

1. 捨棄僅供讀取複本上暫存資料表空間中的目前暫存檔。

1. 在不同的儲存體上建立新的暫存檔。

若要捨棄暫存檔，請使用 Amazon RDS 程序 `rdsadmin.rdsadmin_util. drop_replica_tempfiles`。您只能在僅供讀取複本上使用此程序。`drop_replica_tempfiles` 程序具有下列參數。


****  

| 參數名稱 | 資料類型 | 預設 | 必要 | 描述 | 
| --- | --- | --- | --- | --- | 
|  `p_tablespace_name`  |  varchar  |  —  |  是  |  僅供讀取複本上暫存資料表空間的名稱。  | 

假設名為 *temp01* 的暫存資料表空間位於僅供讀取複本的執行個體儲存體中。執行下列命令，捨棄此資料表空間中的所有暫存檔。

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

如需詳細資訊，請參閱[將暫存資料存放在 RDS for Oracle 執行個體儲存體中](CHAP_Oracle.advanced-features.instance-store.md)。

# 在 RDS for Oracle 中調整資料表空間、資料檔案和暫存檔的大小
<a name="Appendix.Oracle.CommonDBATasks.ResizeTempSpaceReadReplica"></a>

依預設，Oracle 資料表空間建立時會開啟自動擴展，並且沒有大小上限。由於這些預設設定，資料表空間有時可能會成長得太大。建議您對永久和暫存資料表空間指定適當的大小，並且謹慎監控空間使用情況。

## 調整永久資料表空間的大小
<a name="resizing-perm-tbs"></a>

若要調整 RDS for Oracle 資料庫執行個體中永久資料表空間的大小，請使用下列任一 Amazon RDS 程序：
+ `rdsadmin.rdsadmin_util.resize_datafile`
+ `rdsadmin.rdsadmin_util.autoextend_datafile`

`resize_datafile` 程序具有下列參數。


****  

| 參數名稱 | 資料類型 | 預設 | 必要 | 描述 | 
| --- | --- | --- | --- | --- | 
|  `p_data_file_id`  |  數字  |  —  |  是  |  要調整大小的資料檔案識別符。  | 
|  `p_size`  |  varchar2  |  —  |  是  |  資料檔案的大小。以位元組 (預設)、KB (K)、MB (M) 或 GB (G) 為單位指定大小。  | 

`autoextend_datafile` 程序具有下列參數。


****  

| 參數名稱 | 資料類型 | 預設 | 必要 | 描述 | 
| --- | --- | --- | --- | --- | 
|  `p_data_file_id`  |  數字  |  —  |  是  |  要調整大小的資料檔案識別符。  | 
|  `p_autoextend_state`  |  varchar2  |  —  |  是  |  自動擴展功能的狀態。指定 `ON` 以自動擴展資料檔案，以及指定 `OFF` 以關閉自動擴展。  | 
|  `p_next`  |  varchar2  |  —  |  否  |  下一個資料檔案增量的大小。以位元組 (預設)、KB (K)、MB (M) 或 GB (G) 為單位指定大小。  | 
|  `p_maxsize`  |  varchar2  |  —  |  否  |  允許自動擴展的磁碟空間上限。以位元組 (預設)、KB (K)、MB (M) 或 GB (G) 為單位指定大小。您可以指定 `UNLIMITED` 來移除檔案大小限制。  | 

下列範例會將資料檔案 4 的大小調整為 500 MB。

```
EXEC rdsadmin.rdsadmin_util.resize_datafile(4,'500M');
```

下列範例會關閉資料檔案 4 的自動擴展。它也會開啟資料檔案 5 的自動擴展，增量為 128 MB 且沒有大小上限。

```
EXEC rdsadmin.rdsadmin_util.autoextend_datafile(4,'OFF');
EXEC rdsadmin.rdsadmin_util.autoextend_datafile(5,'ON','128M','UNLIMITED');
```

## 調整暫存資料表空間的大小
<a name="resizing-temp-tbs"></a>

若要調整 RDS for Oracle 資料庫執行個體中者存資料表空間的大小，包括僅供讀取複本，請使用下列任一 Amazon RDS 程序：
+ `rdsadmin.rdsadmin_util.resize_temp_tablespace`
+ `rdsadmin.rdsadmin_util.resize_tempfile`
+ `rdsadmin.rdsadmin_util.autoextend_tempfile`

`resize_temp_tablespace` 程序具有下列參數。


****  

| 參數名稱 | 資料類型 | 預設 | 必要 | 描述 | 
| --- | --- | --- | --- | --- | 
|  `p_temp_tablespace_name`  |  varchar2  |  —  |  是  |  要調整大小的暫時資料表空間的名稱。  | 
|  `p_size`  |  varchar2  |  —  |  是  |  資料表空間的大小。以位元組 (預設)、KB (K)、MB (M) 或 GB (G) 為單位指定大小。  | 

`resize_tempfile` 程序具有下列參數。


****  

| 參數名稱 | 資料類型 | 預設 | 必要 | 描述 | 
| --- | --- | --- | --- | --- | 
|  `p_temp_file_id`  |  數字  |  —  |  是  |  要調整大小的暫存檔識別符。  | 
|  `p_size`  |  varchar2  |  —  |  是  |  暫存檔的大小。以位元組 (預設)、KB (K)、MB (M) 或 GB (G) 為單位指定大小。  | 

`autoextend_tempfile` 程序具有下列參數。


****  

| 參數名稱 | 資料類型 | 預設 | 必要 | 描述 | 
| --- | --- | --- | --- | --- | 
|  `p_temp_file_id`  |  數字  |  —  |  是  |  要調整大小的暫存檔識別符。  | 
|  `p_autoextend_state`  |  varchar2  |  —  |  是  |  自動擴展功能的狀態。指定 `ON` 以自動擴展暫存檔，以及指定 `OFF` 以關閉自動擴展。  | 
|  `p_next`  |  varchar2  |  —  |  否  |  下一個暫存檔增量的大小。以位元組 (預設)、KB (K)、MB (M) 或 GB (G) 為單位指定大小。  | 
|  `p_maxsize`  |  varchar2  |  —  |  否  |  允許自動擴展的磁碟空間上限。以位元組 (預設)、KB (K)、MB (M) 或 GB (G) 為單位指定大小。您可以指定 `UNLIMITED` 來移除檔案大小限制。  | 

下列範例會將名為 `TEMP` 的暫存資料表空間大小調整為 4 GB。

```
EXEC rdsadmin.rdsadmin_util.resize_temp_tablespace('TEMP','4G');
```

```
EXEC rdsadmin.rdsadmin_util.resize_temp_tablespace('TEMP','4096000000');
```

下列範例會根據檔案識別符為 `1` 的暫存檔，將暫時資料表空間大小調整為 2 MB。

```
EXEC rdsadmin.rdsadmin_util.resize_tempfile(1,'2M');
```

下列範例會關閉暫存檔 1 的自動擴展。它還將暫存檔 2 的自動擴展大小上限設定為 10 GB，增量為 100 MB。

```
EXEC rdsadmin.rdsadmin_util.autoextend_tempfile(1,'OFF');
EXEC rdsadmin.rdsadmin_util.autoextend_tempfile(2,'ON','100M','10G');
```

如需有關 Oracle 資料庫執行個體的僅供讀取複本的詳細資訊，請參閱 [使用適用於 Amazon RDS for Oracel 的僅供讀取複本](oracle-read-replicas.md)。

# 在 RDS for Oracle 中的儲存磁碟區之間移動資料
<a name="Appendix.Oracle.CommonDBATasks.MovingDataBetweenVolumes"></a>

您可以在主要和其他儲存磁碟區之間移動資料檔案和資料庫物件。移動資料之前，請考慮下列幾點：
+ 來源和目標磁碟區必須有足夠的可用空間。
+ 資料移動操作會在兩個磁碟區上使用 I/O。
+ 大型資料移動可能會影響資料庫效能。
+ 如果您還原快照，如果資料受到 EBS 延遲載入影響，則在儲存磁碟區之間移動資料可能會緩慢。

**Topics**
+ [在 RDS for Oracle 中的磁碟區之間移動資料檔案](#Appendix.Oracle.CommonDBATasks.MovingDatafiles)
+ [在 RDS for Oracle 中的磁碟區之間移動資料表資料和索引](#Appendix.Oracle.CommonDBATasks.MovingTableData)
+ [使用其他磁碟區管理 LOB 儲存](#Appendix.Oracle.CommonDBATasks.ManagingLargeLOBStorage)

## 在 RDS for Oracle 中的磁碟區之間移動資料檔案
<a name="Appendix.Oracle.CommonDBATasks.MovingDatafiles"></a>

若要在儲存磁碟區之間移動資料檔案，請使用 Amazon RDS 程序 `rdsadmin.rdsadmin_util.move_datafile`。請注意以下要求：
+ 您必須使用 Oracle Enterprise Edition 來執行`move_datafile`程序。
+ 您無法移動資料表空間 `SYSTEM`和 `RDSADMIN`。

`move_datafile` 程序具有下列參數。


****  

| 參數名稱 | 資料類型 | 必要 | 描述 | 
| --- | --- | --- | --- | 
|  `p_data_file_id`  |  數字  |  是  |  要移動的資料檔案 ID。  | 
|  `p_location`  |  varchar2  |  是  |  您要移動資料檔案的儲存磁碟區。  | 

下列範例會將資料表空間從預設磁碟區移至`rdsdbdata`額外的磁碟區 `rdsdbdata2`。

```
SQL> SELECT tablespace_name,file_id,file_name FROM dba_data_files
 WHERE tablespace_name = 'MYNEWTABLESPACE';

TABLESPACE_NAME              FILE_ID FILE_NAME
------------------------- ---------- --------------------------------------------------------------------------------
MYNEWTABLESPACE                    6 /rdsdbdata/db/ORCL_A/datafile/o1_mf_mynewtab_n123abcd_.dbf

EXECUTE rdsadmin.rdsadmin_util.move_datafile( 6, 'rdsdbdata2');

PL/SQL procedure successfully completed.

SQL> SELECT tablespace_name,file_id,file_name FROM dba_data_files
  WHERE tablespace_name = 'MYNEWTABLESPACE';

TABLESPACE_NAME              FILE_ID FILE_NAME
------------------------- ---------- --------------------------------------------------------------------------------
MYNEWTABLESPACE                    6 /rdsdbdata2/db/ORCL_A/datafile/o1_mf_mynewtab_n356efgh_.dbf
```

## 在 RDS for Oracle 中的磁碟區之間移動資料表資料和索引
<a name="Appendix.Oracle.CommonDBATasks.MovingTableData"></a>

您可以在其他儲存磁碟區上建立資料表空間，以最佳化資料庫儲存。然後，您可以使用標準 Oracle SQL 將資料表、索引和分割區等物件移至這些資料表空間。當您的資料庫包含具有不同存取模式的資料時，這種方法對於效能調校很有用。例如，您可以將經常存取的操作資料存放在高效能儲存磁碟區上，同時將很少存取的歷史資料移至成本較低的儲存磁碟區。

在下列範例中，您會在高效能磁碟區 上建立新的資料表空間`rdsdbdata2`。然後在資料表上線時，將資料表移至額外的儲存磁碟區。您也可以將索引移至相同的磁碟區。在上線時移動資料表和重建索引需要 Oracle Enterprise Edition。

```
ALTER SESSION SET db_create_file_dest = '/rdsdbdata2/db';
CREATE TABLESPACE perf_tbs DATAFILE SIZE 10G;

ALTER TABLE employees
  MOVE TABLESPACE perf_tbs ONLINE;

ALTER INDEX employees_idx
  REBUILD ONLINE TABLESPACE perf_tbs;
```

在下列範例中，您會在低成本磁碟區上建立資料表空間。然後，您可以使用線上操作將資料表分割區移至低成本儲存磁碟區。

```
ALTER SESSION SET db_create_file_dest = '/rdsdbdata3/db';
CREATE TABLESPACE hist_tbs DATAFILE SIZE 10G;

ALTER TABLE orders
  MOVE PARTITION orders_2022
  TABLESPACE hist_tbs ONLINE;
```

在下列範例中，您會查詢作用中工作階段的長操作。

```
SELECT sid,opname,sofar,totalwork,time_remaining,elapsed_seconds 
  FROM v$session_longops 
  WHERE time_remaining > 0;
```

您可以使用下列查詢來檢查資料表空間用量。

```
SELECT tablespace_name, used_percent
  FROM dba_tablespace_usage_metrics
  ORDER BY used_percent DESC;
```

## 使用其他磁碟區管理 LOB 儲存
<a name="Appendix.Oracle.CommonDBATasks.ManagingLargeLOBStorage"></a>

您的資料庫可能包含具有 BLOB 或 CLOB 物件的資料表，這些物件會耗用大量儲存空間，但不常存取。若要最佳化儲存，您可以將這些 LOB 區段重新放置到額外儲存磁碟區的資料表空間。

在下列範例中，您會在用於低存取資料的低成本磁碟區上建立 LOB 資料的資料表空間。然後，建立將資料存放在此磁碟區的資料表。

```
ALTER SESSION SET db_create_file_dest = '/rdsdbdata3/db';
CREATE TABLESPACE lob_data DATAFILE SIZE 5G AUTOEXTEND ON NEXT 1G;

CREATE TABLE documents (
    doc_id NUMBER PRIMARY KEY,
    doc_date DATE,
    doc_content CLOB
) TABLESPACE user_data
LOB(doc_content) STORE AS (TABLESPACE lob_data);
```

# 在 RDS for Oracle 中使用外部資料表
<a name="Appendix.Oracle.CommonDBATasks.External_Tables"></a>

*Oracle 外部資料表*，指的是該資料表所具有的資料不在資料庫中。反而資料是位在資料庫可以存取的外部檔案中。您可以使用外部資料表來存取資料，而不需將資料載入資料庫。如需外部資料表的詳細資訊，請參閱 Oracle 文件中的[管理外部資料表](http://docs.oracle.com/database/121/ADMIN/tables.htm#ADMIN01507)。

您可以使用 Amazon RDS 在目錄物件中儲存外部資料表檔案。您可以建立目錄物件，也可以使用 Oracle 資料庫中預先定義的目錄物件，例如 DATA\$1PUMP\$1DIR 目錄。如需建立目錄物件的詳細資訊，請參閱 [在主要資料儲存空間中建立和捨棄目錄](Appendix.Oracle.CommonDBATasks.Misc.md#Appendix.Oracle.CommonDBATasks.NewDirectories)。您可以查詢 ALL\$1DIRECTORIES 檢視，來列出您 Amazon RDS Oracle 資料庫執行個體的目錄物件。

**注意**  
目錄物件會指向您執行個體使用的主要資料儲存空間 (Amazon EBS 磁碟區)。根據配置的儲存體來計算的已使用空間 (以及資料檔案、重做日誌、稽核、追蹤和其他檔案)。

您可以使用 [DBMS\$1FILE\$1TRANSFER](https://docs.oracle.com/database/121/ARPLS/d_ftran.htm#ARPLS095) 套件或 [UTL\$1FILE](https://docs.oracle.com/database/121/ARPLS/u_file.htm#ARPLS069) 套件，在不同 Oracle 資料庫之間移動外部資料檔案。外部資料檔案會從來源資料庫上的目錄，移動至目的地資料庫上指定的目錄。如需使用 `DBMS_FILE_TRANSFER` 的相關資訊，請參閱 [使用 Oracle Data Pump 匯入](Oracle.Procedural.Importing.DataPump.md)。

移動外部資料檔案後，該檔案即可用來建立外部資料表。下列範例會建立採用 USER\$1DIR1 目錄中 `emp_xt_file1.txt` 檔案的外部資料表。

```
CREATE TABLE emp_xt (
  emp_id      NUMBER,
  first_name  VARCHAR2(50),
  last_name   VARCHAR2(50),
  user_name   VARCHAR2(20)
)
ORGANIZATION EXTERNAL (
  TYPE ORACLE_LOADER
  DEFAULT DIRECTORY USER_DIR1
  ACCESS PARAMETERS (
    RECORDS DELIMITED BY NEWLINE
    FIELDS TERMINATED BY ','
    MISSING FIELD VALUES ARE NULL
    (emp_id,first_name,last_name,user_name)
  )
  LOCATION ('emp_xt_file1.txt')
)
PARALLEL
REJECT LIMIT UNLIMITED;
```

假設您要將 Amazon RDS Oracle 資料庫執行個體中的資料移動至外部資料表檔案。在此情況下，您可以透過建立外部資料表並從資料庫中的資料表選取資料，來填入外部資料檔案。例如，下列 SQL 陳述式會透過查詢資料庫中的 `orders_xt` 資料表來建立 `orders` 外部資料表。

```
CREATE TABLE orders_xt
  ORGANIZATION EXTERNAL
   (
     TYPE ORACLE_DATAPUMP
     DEFAULT DIRECTORY DATA_PUMP_DIR
     LOCATION ('orders_xt.dmp')
   )
   AS SELECT * FROM orders;
```

在此範例中，資料會填入 DATA\$1PUMP\$1DIR 目錄中的 `orders_xt.dmp` 檔案。