

# Reducción de espacios de tabla en RDS para Oracle
<a name="Oracle.ShrinkTablespace"></a>

A partir de Oracle Database 26ai (26.0.0.0), Amazon RDS para Oracle admite la reducción del espacio de tablas con el procedimiento `rdsadmin.rdsadmin_util.shrink_tablespace`. Utilice este procedimiento para recuperar el espacio no utilizado de un espacio de tabla reduciendo sus archivos de datos. La reducción disminuye el consumo de almacenamiento sin necesidad de migrar los datos ni recrear los espacios de tabla.

**Topics**
+ [Descripción general](#Oracle.ShrinkTablespace.Overview)
+ [Requisitos](#Oracle.ShrinkTablespace.Requirements)
+ [Sintaxis](#Oracle.ShrinkTablespace.Syntax)
+ [Parameters](#Oracle.ShrinkTablespace.Parameters)
+ [Ejemplos](#Oracle.ShrinkTablespace.Examples)
+ [Consideraciones](#Oracle.ShrinkTablespace.Considerations)
+ [Recursos relacionados](#Oracle.ShrinkTablespace.Resources)

## Descripción general
<a name="Oracle.ShrinkTablespace.Overview"></a>

Con el tiempo, los espacios de tabla de una base de datos de Oracle pueden acumular espacio no utilizado a partir de datos eliminados o reorganizados. El procedimiento `rdsadmin.rdsadmin_util.shrink_tablespace` incluye la funcionalidad `DBMS_SPACE.SHRINK_TABLESPACE` de Oracle y gestiona los privilegios internos necesarios en su nombre.

La reducción del espacio de tabla admite los siguientes modos:
+ **Modo de análisis** (`DBMS_SPACE.TS_MODE_ANALYZE`): evalúa el espacio de tablas e informa sobre cuánto espacio puede reclamar, sin realizar cambios.
+ **Modo de reducción** (`DBMS_SPACE.TS_MODE_SHRINK`): mueve los objetos y cambia el tamaño de los archivos de datos del espacio de tablas para recuperar el espacio no utilizado. Este es el modo predeterminado.

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

Para utilizar la reducción de espacios de tabla, la instancia de base de datos debe cumplir los siguientes requisitos:
+ Oracle Database 26ai o superiores
+ Oracle Enterprise Edition

## Sintaxis
<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}});
```

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


**parámetros de shrink\_tablespace**  

| Nombre del parámetro | Tipo de datos | Valor predeterminado | Obligatorio | Descripción | 
| --- | --- | --- | --- | --- | 
| `p_tablespace_name` | `VARCHAR2` | — | Sí | El nombre del espacio de tabla que se va a reducir. | 
| `p_shrink_mode` | `NUMBER` | `2` (`TS_MODE_SHRINK`) | No | El modo de reducción. Utilice `DBMS_SPACE.TS_MODE_ANALYZE` (`1`) solo para analizar o `DBMS_SPACE.TS_MODE_SHRINK` (`2`) para realizar la reducción. | 
| `p_target_size` | `NUMBER` | `0` | No | El tamaño del destino, en bytes. Utilice `0` (opción predeterminada) para reducir el tamaño al mínimo posible. Especifique un valor positivo para reducirlo a un objetivo específico. | 

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

### Análisis de un espacio de tabla en busca de espacio recuperable
<a name="Oracle.ShrinkTablespace.Examples.Analyze"></a>

Para analizar un espacio de tabla sin realizar cambios, ejecute el comando siguiente:

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

A continuación, se muestra un ejemplo de la salida:

```
-------------------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
```

### Reducción de un espacio de tabla al tamaño mínimo
<a name="Oracle.ShrinkTablespace.Examples.Minimum"></a>

Para reducir un espacio de tabla y recuperar todo el espacio no utilizado, ejecute el siguiente comando:

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

A continuación, se muestra un ejemplo de la salida:

```
-------------------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
```

### Reducción de un espacio de tabla a un tamaño de destino específico
<a name="Oracle.ShrinkTablespace.Examples.Target"></a>

Para reducir un espacio de tabla a un tamaño de destino en bytes, especifique el parámetro `p_target_size`. Si el objetivo es menor que el tamaño mínimo alcanzable, Oracle lo ajusta automáticamente al alza:

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

## Consideraciones
<a name="Oracle.ShrinkTablespace.Considerations"></a>

Tenga en cuenta lo siguiente cuando reduzca un espacio de tabla:
+ La reducción del espacio de tabla es una operación en línea. Los objetos del espacio de tabla permanecen accesibles durante la reducción.
+ Es posible que la operación de reducción mueva objetos, como tablas e índices, dentro del espacio de tabla para consolidar el espacio libre antes de cambiar el tamaño de los archivos de datos.
+ Los índices siguen siendo válidos tras la operación de reducción y se preserva la integridad de los datos.
+ Si el valor de `p_target_size` es menor que el espacio que ocupan los objetos actualmente, Oracle ajusta el objetivo al tamaño mínimo alcanzable.
+ El valor de `p_target_size` no debe superar el tamaño del espacio de tabla actual. Especifique un objetivo que sea inferior o igual al tamaño actual.
+ Es posible que las transacciones activas en los objetos del espacio de tabla impidan que la operación reclame todo el espacio disponible. Para obtener los mejores resultados, ejecute la reducción durante un periodo de baja actividad.
+ No se admite llamar a `DBMS_SPACE.SHRINK_TABLESPACE` directamente sin el encapsulador `rdsadmin_util`. Utilice siempre el encapsulador `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) en la documentación de Oracle Database
+ Para obtener más información, consulte [Ejecución de tareas comunes de base de datos para instancias de base de datos](Appendix.Oracle.CommonDBATasks.Database.md).