Mover dados entre volumes de armazenamento no RDS para Oracle - Amazon Relational Database Service

Mover dados entre volumes de armazenamento no RDS para Oracle

Você pode mover arquivos de dados e objetos de banco de dados entre seus volumes de armazenamento principal e adicional. Antes de mover dados, pense nos seguintes pontos:

  • Os volumes de origem e de destino devem ter espaço livre suficiente.

  • As operações de movimentação de dados consomem E/S em ambos os volumes.

  • Grandes movimentações de dados podem afetar a performance do banco de dados.

  • Se você restaurar um snapshot, a movimentação de dados entre volumes de armazenamento poderá ser lenta se for afetada pelo carregamento lento do EBS.

Mover arquivos de dados entre volumes no RDS para Oracle

Para mover arquivos de dados entre volumes de armazenamento, use o procedimento rdsadmin.rdsadmin_util.move_datafile do Amazon RDS. Observe os seguintes requisitos:

  • Você deve usar o Oracle Enterprise Edition para executar o procedimento move_datafile.

  • Você não pode mover o espaço para tabela SYSTEM e RDSADMIN.

O procedimento move_datafile tem os seguintes parâmetros.

Nome do parâmetro Tipo de dados Obrigatório Descrição

p_data_file_id

número

Sim

O ID do arquivo de dados a ser movido.

p_location

varchar2

Sim

O volume de armazenamento para o qual você deseja mover o arquivo de dados.

O exemplo a seguir move um espaço para tabela do volume padrão rdsdbdata para o volume adicional 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

Mover dados e índices da tabela entre volumes no RDS para Oracle

Você pode otimizar o armazenamento do banco de dados criando espaços para tabela em volumes de armazenamento adicionais. Depois, você pode mover objetos, como tabelas, índices e partições, para esses espaços para tabela usando o Oracle SQL padrão. Essa abordagem é valiosa para o ajuste de performance quando seu banco de dados contém dados com diferentes padrões de acesso. Por exemplo, você pode armazenar dados operacionais acessados com frequência em volumes de armazenamento de alta performance e, ao mesmo tempo, mover dados históricos raramente acessados para volumes de armazenamento de menor custo.

No exemplo a seguir, você vai criar um espaço para tabela em um volume de alta performance rdsdbdata2. Depois, você vai mover uma tabela para o volume de armazenamento adicional enquanto ela está on-line. Você também vai mover o índice para o mesmo volume. A movimentação de tabelas e a recompilação de índices on-line exigem o 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;

No exemplo a seguir, você vai criar um espaço para tabela em um volume de baixo custo. Depois, você vai mover uma partição da tabela para seu volume de armazenamento de baixo custo usando uma operação on-line.

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;

No exemplo a seguir, você vai consultar operações longas de sessões ativas.

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

Você pode conferir o uso de espaços para tabela com a consulta a seguir.

SELECT tablespace_name, used_percent FROM dba_tablespace_usage_metrics ORDER BY used_percent DESC;

Gerenciar o armazenamento LOB usando volumes adicionais

Seu banco de dados pode conter tabelas com objetos BLOB ou CLOB que consomem armazenamento substancial, mas são acessados com pouca frequência. Para otimizar o armazenamento, você pode realocar esses segmentos LOB em um espaço para tabela em um volume de armazenamento adicional.

No exemplo a seguir, você vai criar um espaço para tabela para dados LOB em um volume de baixo custo destinado a dados de baixo acesso. Depois, você vai criar uma tabela que armazene dados nesse volume.

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);