

# Reduzir tablespaces no RDS para Oracle
<a name="Oracle.ShrinkTablespace"></a>

A partir do Oracle Database 26ai (26.0.0.0), o Amazon RDS para Oracle é compatível com a redução de tablespaces por meio do procedimento `rdsadmin.rdsadmin_util.shrink_tablespace`. Use esse procedimento para recuperar espaço não utilizado em um tablespace reduzindo seus arquivos de dados. A redução diminui o consumo de armazenamento sem migração de dados nem recriação do tablespace.

**Topics**
+ [Visão geral](#Oracle.ShrinkTablespace.Overview)
+ [Requisitos](#Oracle.ShrinkTablespace.Requirements)
+ [Sintaxe](#Oracle.ShrinkTablespace.Syntax)
+ [Parâmetros](#Oracle.ShrinkTablespace.Parameters)
+ [Exemplos](#Oracle.ShrinkTablespace.Examples)
+ [Considerações](#Oracle.ShrinkTablespace.Considerations)
+ [Recursos relacionados](#Oracle.ShrinkTablespace.Resources)

## Visão geral
<a name="Oracle.ShrinkTablespace.Overview"></a>

Com o tempo, os tablespaces em um banco de dados Oracle podem acumular espaço não utilizado devido à exclusão ou reorganização de dados. O procedimento `rdsadmin.rdsadmin_util.shrink_tablespace` encapsula a funcionalidade `DBMS_SPACE.SHRINK_TABLESPACE` do Oracle e gerencia para você os privilégios internos necessários.

A redução de tablespaces é compatível com os seguintes modos:
+ **Modo de análise** (`DBMS_SPACE.TS_MODE_ANALYZE`): avalia o tablespace e informa quanto espaço pode ser recuperado, sem realizar alterações.
+ **Modo de redução** (`DBMS_SPACE.TS_MODE_SHRINK`): move objetos e redimensiona os arquivos de dados do tablespace para recuperar o espaço não utilizado. Esse é o modo padrão.

## Requisitos
<a name="Oracle.ShrinkTablespace.Requirements"></a>

Para usar a redução de tablespaces, sua instância de banco de dados deve atender aos seguintes requisitos:
+ Oracle Database 26ai ou superior
+ Oracle Enterprise Edition

## Sintaxe
<a name="Oracle.ShrinkTablespace.Syntax"></a>

```
EXEC rdsadmin.rdsadmin_util.shrink_tablespace(
  p_tablespace_name => '{{tablespace_name}}',
  p_shrink_mode     => {{mode}},
  p_target_size     => {{target_bytes}});
```

## Parâmetros
<a name="Oracle.ShrinkTablespace.Parameters"></a>


**shrink\_tablespace parameters**  

| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
| `p_tablespace_name` | `VARCHAR2` | — | Sim | O nome do tablespace a ser reduzido. | 
| `p_shrink_mode` | `NUMBER` | `2` (`TS_MODE_SHRINK`) | Não | O modo de redução. Use `DBMS_SPACE.TS_MODE_ANALYZE` (`1`) para apenas analisar ou `DBMS_SPACE.TS_MODE_SHRINK` (`2`) para executar a redução. | 
| `p_target_size` | `NUMBER` | `0` | Não | O tamanho de destino, em bytes. Use `0` (o padrão) para reduzir ao menor tamanho possível. Especifique um valor positivo para reduzir até um tamanho de destino específico. | 

## Exemplos
<a name="Oracle.ShrinkTablespace.Examples"></a>

### Analisar um tablespace para verificar o espaço recuperável
<a name="Oracle.ShrinkTablespace.Examples.Analyze"></a>

Para analisar um tablespace sem realizar alterações, execute o comando a seguir:

```
EXEC rdsadmin.rdsadmin_util.shrink_tablespace('USERS', DBMS_SPACE.TS_MODE_ANALYZE);
```

A seguir está um exemplo de saída:

```
-------------------ANALYZE RESULT-------------------
Total Movable Objects: 0
Total Movable Size(GB): 0
Original Datafile Size(GB): .1
Suggested Target Size(GB): .06
Process Time: +00 00:00:00.021513
```

### Reduzir um tablespace ao tamanho mínimo
<a name="Oracle.ShrinkTablespace.Examples.Minimum"></a>

Para reduzir um tablespace e recuperar todo o espaço não utilizado, execute o comando a seguir:

```
EXEC rdsadmin.rdsadmin_util.shrink_tablespace('USERS');
```

A seguir está um exemplo de saída:

```
-------------------SHRINK RESULT-------------------
Total Moved Objects: 0
Total Moved Size(GB): 0
Original Datafile Size(GB): .1
New Datafile Size(GB): .05
Process Time: +00 00:00:00.281151
```

### Reduzir um tablespace para um tamanho de destino específico
<a name="Oracle.ShrinkTablespace.Examples.Target"></a>

Para reduzir um tablespace para um tamanho de destino em bytes, especifique o parâmetro `p_target_size`. Se o tamanho de destino for menor que o menor tamanho possível, o Oracle o ajustará automaticamente para um valor maior:

```
EXEC rdsadmin.rdsadmin_util.shrink_tablespace('USERS', DBMS_SPACE.TS_MODE_SHRINK, 52428800);
```

## Considerações
<a name="Oracle.ShrinkTablespace.Considerations"></a>

Considere o seguinte ao reduzir um tablespace:
+ A redução de tablespaces é uma operação online. Os objetos no tablespace permanecem acessíveis durante a redução.
+ A operação de redução pode mover objetos, como tabelas e índices, dentro do tablespace para consolidar o espaço livre antes de redimensionar os arquivos de dados.
+ Os índices permanecem válidos após a operação de redução, e a integridade dos dados é preservada.
+ Se o valor de `p_target_size` for menor que o espaço atualmente ocupado pelos objetos, o Oracle ajustará automaticamente o tamanho de destino para o menor tamanho possível.
+ O valor de `p_target_size` não deve exceder o tamanho atual do tablespace. Especifique um tamanho de destino menor ou igual ao tamanho atual.
+ Transações ativas em objetos do tablespace podem impedir que a operação recupere todo o espaço disponível. Para obter melhores resultados, execute a redução durante um período de baixa atividade.
+ Não há suporte para chamar `DBMS_SPACE.SHRINK_TABLESPACE` diretamente sem o wrapper `rdsadmin_util`. Sempre use o wrapper `rdsadmin.rdsadmin_util.shrink_tablespace`.

## Recursos relacionados
<a name="Oracle.ShrinkTablespace.Resources"></a>
+ [DBMS\_SPACE.SHRINK\_TABLESPACE](https://docs.oracle.com/en/database/oracle/oracle-database/26/arpls/DBMS_SPACE.html) na documentação do Oracle Database
+ Para obter mais informações, consulte [Realização de tarefas comuns de banco de dados para instâncias de banco de dados](Appendix.Oracle.CommonDBATasks.Database.md).