RDS for Oracle のストレージボリューム間のデータの移動
データファイルとデータベースオブジェクトは、プライマリストレージボリュームと追加のストレージボリューム間で移動できます。データを移動する前に、次の点を考慮してください。
ソースボリュームとターゲットボリュームには十分な空き領域が必要です。
データ移動オペレーションは、両方のボリュームで I/O を消費します。
大きなデータ移動は、データベースのパフォーマンスに影響を与える可能性があります。
-
スナップショットを復元する場合、EBS 遅延ロードの影響を受けると、ストレージボリューム間のデータの移動が遅くなる可能性があります。
トピック
RDS for Oracle のボリューム間でのデータファイルの移動
ストレージボリューム間でデータファイルを移動するには、Amazon RDS プロシージャ rdsadmin.rdsadmin_util.move_datafile を使用します。次の要件に注意してください。
-
move_datafileプロシージャを実行するには、Oracle Enterprise Edition を使用する必要があります。 -
テーブルスペース
SYSTEMとRDSADMINを移動することはできません。
move_datafile プロシージャには以下のパラメータがあります。
| パラメータ名 | データ型 | 必要 | 説明 |
|---|---|---|---|
|
|
number |
はい |
移動するデータファイルの ID。 |
|
|
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 のボリューム間でテーブルデータとインデックスを移動する
追加のストレージボリュームにテーブルスペースを作成することで、データベースストレージを最適化できます。その後、標準の 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 ストレージの管理
データベースには、大量のストレージを消費するが、アクセス頻度が低い 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);