在 RDS for Oracle 中的存储卷之间移动数据 - Amazon Relational Database Service

在 RDS for Oracle 中的存储卷之间移动数据

您可以在主存储卷和附加存储卷之间移动数据文件和数据库对象。在移动数据之前,请考虑以下几点:

  • 源卷和目标卷必须具有足够的可用空间。

  • 数据移动操作会消耗两个卷上的 I/O。

  • 大量数据移动可能会影响数据库性能。

  • 当您还原快照时,如果数据受到 EBS 延迟加载的影响,则在存储卷之间移动数据可能会较慢。

在 RDS for Oracle 中的卷之间移动数据文件

要在存储卷之间移动数据文件,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.move_datafile。请注意以下要求:

  • 必须使用 Oracle 企业版才能运行 move_datafile 过程。

  • 您无法移动表空间 SYSTEMRDSADMIN

move_datafile 过程具有以下参数。

参数名称 数据类型 必需 描述

p_data_file_id

number

要移动的数据文件的 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 中的卷之间移动表数据和索引

您可以通过在附加存储卷上创建表空间来优化数据库存储。然后,您可以使用标准 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);