

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

# 在 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);
```