在 RDS for Oracle 中的存储卷之间移动数据
您可以在主存储卷和附加存储卷之间移动数据文件和数据库对象。在移动数据之前,请考虑以下几点:
源卷和目标卷必须具有足够的可用空间。
数据移动操作会消耗两个卷上的 I/O。
大量数据移动可能会影响数据库性能。
-
当您还原快照时,如果数据受到 EBS 延迟加载的影响,则在存储卷之间移动数据可能会较慢。
在 RDS for Oracle 中的卷之间移动数据文件
要在存储卷之间移动数据文件,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.move_datafile。请注意以下要求:
-
必须使用 Oracle 企业版才能运行
move_datafile过程。 -
您无法移动表空间
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 企业版。
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);