Como redimensiono o tablespace da minha instância de banco de dados do Amazon RDS for Oracle?
Quero saber como gerenciar ou redimensionar o tablespace para minha instância de banco de dados Amazon Relational Database Service (Amazon RDS) for Oracle.
Breve descrição
O tipo de tablespace padrão para instâncias de banco de dados do Amazon RDS for Oracle é bigfile. O bigfile tablespaces torna os arquivos de dados transparentes para os usuários. Portanto, você pode executar as operações em tablespaces diretamente em vez de gerenciar cada um dos arquivos de dados subjacentes. O bigfile tablespaces simplifica o gerenciamento de arquivos de dados, eliminando a necessidade de adicionar novos arquivos de dados ou lidar com vários arquivos. É uma prática recomendada evitar o uso de smallfile tablespaces para suas instâncias do RDS for Oracle.
Se a instância do RDS for Oracle tiver um smallfile tablespace, você terá as seguintes limitações:
- Você não pode redimensionar os arquivos de dados. No entanto, você pode redimensionar o tablespace adicionando novos arquivos de dados no tablespace.
- Não é possível executar a consulta ALTER DATABASE para redimensionar ou alterar as configurações do arquivo de dados. Isso ocorre porque o comando ALTER DATABASE não é suportado no RDS for Oracle. Para obter mais informações, consulte Limitações do RDS for Oracle.
- Você deve gerenciar manualmente o parâmetro db_files para definir o número máximo de arquivos de dados no banco de dados. O db_files pode precisar ser ajustado quando o número de arquivos de dados atingir esse limite.
Por padrão, os tablespaces no RDS for Oracle são bigfile com o AUTOEXTEND ativado. O tamanho máximo do bigfile tablespaces é 16 TiB. Quando você insere dados no tablespace, o tablespace aumenta conforme necessário até o limite máximo configurado para esse tablespace ou o armazenamento alocado configurado para a instância do RDS, o que for menor. Se o armazenamento alocado para a instância do RDS for totalmente utilizado, a instância alternará para o estado STORAGE_FULL, e os tablespaces não poderão ser estendidos. Para corrigir esse problema, você deve adicionar espaço de armazenamento à sua instância. Para obter mais informações, consulte Como resolver problemas que ocorrem quando instâncias de banco de dados do Amazon RDS esgotam o armazenamento?
Quando os dados são excluídos de um tablespace, o tamanho do tablespace não diminui. Os blocos livres podem ser reutilizados quando novos dados são inseridos. Você deve redimensionar manualmente o tablespace para recuperar o espaço não utilizado.
Resolução
Para redimensionar o tablespace da sua instância do RDS for Oracle, faça o seguinte:
- Verifique a configuração do tablespace.
- Aumente ou diminua o tamanho do tablespace com base no seu caso de uso.
Verifique a configuração do tablespace
1. Execute uma consulta semelhante à seguinte para identificar se o tablespace é:
- Permanente, desfazer ou temporário
- Smallfile ou bigfile
SQL> SELECT TABLESPACE_NAME, CONTENTS, BIGFILE FROM DBA_TABLESPACES;
2. Execute uma consulta semelhante à seguinte para verificar se o recurso de extensão automática está ativado, o tamanho atual do arquivo de dados e o limite máximo configurado:
Para tablespaces permanentes e desfazer:
SQL> SELECT TABLESPACE_NAME, ROUND(SUM(BYTES)/(1024*1024*1024),2) SUM_GB, ROUND(MAXBYTES/(1024*1024*1024),2) MAX_GB, AUTOEXTENSIBLE FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME, MAXBYTES,AUTOEXTENSIBLE;
Para tablespaces temporários:
SQL> SELECT TABLESPACE_NAME, ROUND(SUM(BYTES)/(1024*1024*1024),2) SUM_GB, ROUND(MAXBYTES/(1024*1024*1024),2) MAX_GB, AUTOEXTENSIBLE FROM DBA_TEMP_FILES GROUP BY TABLESPACE_NAME, MAXBYTES,AUTOEXTENSIBLE;
Você pode observar o seguinte na saída dessas consultas:
- Se o recurso de extensão automática não estiver ativado, o valor de MAX_GB será igual a 0.
- Se o tablespace for smallfile, o valor de MAX_GB dependerá do tamanho do bloco usado para criar o tablespace. Por exemplo, o valor de MAX_GB é 32 GB se o tamanho do bloco usado for 8K. Para obter mais informações, consulte a documentação da Oracle para tamanhos de blocos fora do padrão.
- Se o tablespace for bigfile, o valor de MAX_GB será exibido como 32 TB. No entanto, devido às limitações do sistema operacional no RDS for Oracle, o arquivo só pode se estender até 16 TiB.
Você também pode executar as seguintes consultas para obter o DDL usado para criar o tablespace:
SQL> SET LINESIZE 400
SQL> SET LONG 99999
SQL> SELECT DBMS_METADATA.GET_DDL('TABLESPACE','example-tablespace') FROM DUAL;
Você pode obter as informações necessárias sobre o tablespace do DDL retornado.
Aumentar o tamanho do tablespace
Se você ativou o recurso de extensão automática, não precisará aumentar o tamanho do tablespace, independentemente do tipo de tablespace. Nesse caso, o tablespace é redimensionado automaticamente conforme necessário.
Se você não ativou o recurso de extensão automática e deseja redimensionar o tablespace, faça o seguinte:
Para bigfile tablespaces: redimensione o tablespace usando o comando ALTER TABLESPACE. Você pode especificar o tamanho em kilobytes (K), megabytes (M), gigabytes (G) ou terabytes (T). O bigfile tablespace tem um único arquivo de dados, e esse comando redimensiona o arquivo de dados único subjacente associado ao tablespace.
SQL> ALTER TABLESPACE example-tablespace RESIZE 50G;
Para smallfile tablespaces: você pode redimensionar o tablespace somente adicionando mais arquivos de dados ao tablespace. Você não pode redimensionar ou modificar a configuração dos arquivos de dados atuais.
SQL> ALTER TABLESPACE example-tablespace ADD DATAFILE SIZE 1G AUTOEXTEND ON;
Diminuir o tamanho do tablespace
Se o tablespace for smallfile, você não poderá gerenciar os arquivos de dados subjacentes. Para aumentar o tamanho do tablespace, adicione um novo arquivo de dados. Ao adicionar um novo arquivo de dados, certifique-se de escolher os valores corretos para AUTOEXTEND, SIZE e MAXSIZE. Esses valores não podem ser alterados posteriormente. Para reduzir o tamanho do smallfile tablespace, crie um novo tablespace com o espaço desejado e mova todos os dados manualmente para o novo tablespace.
Se o tablespace for bigfile, escolha um dos seguintes métodos para diminuir o tamanho do tablespace com base no tipo de dados do seu tablespace:
Tablespaces permanentes: não é possível diminuir o tamanho de um tablespace permanente para um valor menor que a marca d'água alta do tablespace. Se você tentar fazer isso, sua operação de redimensionamento falhará com o seguinte erro:
ORA-03297: file contains used data beyond requested RESIZE value
No entanto, suponha que um tablespace tenha o tamanho de 50 GB com uma marca d'água alta de 40 GB. Você pode diminuir o tamanho do tablespace para 40 GB executando uma consulta semelhante à seguinte:
SQL> ALTER TABLESPACE example-tablespace RESIZE 40G;
Não é possível diminuir o tamanho do tablespace para um valor menor que a marca d'água alta. Nesses casos, você pode fazer um dos seguintes procedimentos:
- Reorganizar os objetos no tablespace.
- Criar um novo tablespace e migrar todos os objetos para o novo tablespace. Em seguida, soltar o tablespace antigo.
Tablespaces temporários: você pode diminuir o tamanho do tablespace temporário usando o comando SHRINK.
Exemplo:
SQL> ALTER TABLESPACE example-tablespace SHRINK SPACE KEEP 100M;
Para redimensionar tablespaces temporários em uma réplica de leitura, use o pacote rdsadmin.rdsadmin_util.resize_temp_tablespace:
SQL> EXEC rdsadmin.rdsadmin_util.resize_temp_tablespace('example-tablespace','100M');
Para obter mais informações, consulte Como redimensionar o tablespace temporário em uma réplica de leitura.
-ou-
Você pode criar outro tablespace temporário com o tamanho de sua escolha e definir esse novo tablespace temporário como o tablespace temporário padrão.
1. Execute a seguinte consulta para exibir o tablespace temporário padrão atual:
SQL> SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'DEFAULT_TEMP_TABLESPACE';
2. Execute a seguinte consulta para criar um novo tablespace temporário:
SQL> CREATE TEMPORARY TABLESPACE example-tablespace TEMPFILE SIZE 100M;
3. Execute a seguinte consulta para definir o novo tablespace temporário como o tablespace temporário padrão:
SQL> EXEC RDSADMIN.RDSADMIN_UTIL.ALTER_DEFAULT_TEMP_TABLESPACE(TABLESPACE_NAME => 'example-tablespace');
Para modificar o tablespace temporário de um usuário específico, você pode fazer o seguinte:
1. Execute a seguinte consulta para exibir o tablespace temporário padrão atual do usuário:
SQL> SELECT USERNAME, TEMPORARY_TABLESPACE FROM DBA_USERS where USERNAME='example_username';
2. Execute a seguinte consulta para alterar o tablespace temporário padrão para o usuário:
SQL> ALTER USER example_username TEMPORARY TABLESPACE example-tablespace;
Tablespaces de desfazer: primeiro, tente diminuir o tamanho do tablespace de desfazer usando o comando ALTER TABLESPACE.
Execute a seguinte consulta para identificar o tablespace de desfazer que está em uso no momento:
SQL> SHOW PARAMETER UNDO_TABLESPACE;
Execute uma consulta semelhante à seguinte para diminuir o tamanho do tablespace de desfazer:
SQL> ALTER TABLESPACE example-tablespace RESIZE 500M;
Essa consulta será executada com êxito se não houver segmentos de desfazer no armazenamento que devam ser removidos.
Se a consulta acima não for executada com êxito, faça o seguinte:
1. Crie um novo tablespace de desfazer:
Execute uma consulta semelhante à seguinte para criar um novo tablespace de desfazer:
SQL> CREATE UNDO TABLESPACE example-new-tablespace DATAFILE SIZE 1G AUTOEXTEND ON MAXSIZE 100G;
2. Defina o tablespace recém-criado como o tablespace de desfazer padrão:
Defina o parâmetro de inicialização UNDO_TABLESPACE no grupo de parâmetros para apontar para o tablespace recém-criado. Para obter mais informações, consulte Como modificar parâmetros em um grupo de parâmetros de banco de dados.
Exemplo:
UNDO_TABLESPACE = example-new-tablespace
Esse parâmetro é dinâmico e não resulta em nenhum tempo de inatividade para aplicar a modificação. No entanto, é uma prática recomendada reinicializar a instância de banco de dados após essa alteração. Para obter mais informações, consulte Como gerenciar o desfazer.
Execute a seguinte consulta para verificar se o novo tablespace de desfazer é o tablespace padrão:
SQL> SHOW PARAMETER UNDO_TABLESPACE;
3. Solte o tablespace antigo para desfazer:
Execute uma consulta semelhante à seguinte para excluir o antigo tablespace de desfazer:
SQL> DROP TABLESPACE example-tablespace INCLUDING CONTENTS AND DATAFILES;
Informações relacionadas
Conteúdo relevante
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos