¿Cómo se cambia el tamaño del espacio de tablas de la instancia de base de datos de Amazon RDS for Oracle?

Actualización más reciente: 3 de noviembre de 2021

Quiero saber cómo administrar o modificar el tamaño del espacio de tablas de la instancia de base de datos de Amazon Relational Database Service (Amazon RDS) para Oracle.

Descripción breve

El tipo de espacio de tablas predeterminado para las instancias de base de datos de Amazon RDS for Oracle es bigfile. Los espacios de tablas de bigfile hacen que los archivos de datos sean transparentes para los usuarios. Por lo tanto, es posible realizar las operaciones en los espacios de tabla directamente en lugar de administrar cada uno de los archivos de datos subyacentes. Los espacios de tablas de bigfile simplifican la administración de los archivos de datos al eliminar la necesidad de agregar nuevos archivos de datos o gestionar múltiples archivos. Es una práctica recomendada evitar el uso de espacios de tablas smallfile para las instancias de RDS for Oracle.

Si la instancia de RDS for Oracle tiene un espacio de tablas smallfile, existen las siguientes limitaciones:

  • No se puede cambiar el tamaño de los archivos de datos. Sin embargo, puede cambiar el tamaño del espacio de tablas al agregar nuevos archivos de datos en el espacio de tablas.
  • No se puede ejecutar la consulta ALTER DATABASE para cambiar el tamaño o la configuración de los archivos de datos. Esto se debe a que en RDS for Oracle no se admite el comando ALTER DATABASE. Para obtener más información, consulte las Limitaciones de RDS for Oracle.
  • Debe administrar manualmente el parámetro db_files para definir el número máximo de archivos de datos en la base de datos. Es posible que haya que modificar el db_files cuando el número de archivos de datos alcance este límite.

De forma predeterminada, los espacios de tabla en RDS for Oracle son bigfile con AUTOEXTEND activado. El tamaño máximo de los espacios de tabla bigfile es de 16 TiB. Cuando se insertan datos en el espacio de tablas, el espacio de tablas aumenta según sea necesario ya sea hasta el límite máximo configurado para ese espacio de tablas o hasta el almacenamiento asignado configurado para la instancia RDS, lo que sea menor. Si el almacenamiento asignado a la instancia RDS se utiliza por completo, la instancia pasa al estado STORAGE_FULL y los espacios de tabla no se podrán ampliar. Para solucionar este problema, debe agregar espacio de almacenamiento a la instancia. Para obtener información adicional, consulte ¿Cómo se pueden resolver los problemas que se producen cuando las instancias de base de datos de Amazon RDS se quedan sin almacenamiento?

Cuando se eliminan datos de un espacio de tablas, el tamaño del espacio de tablas no se reduce. Los bloques libres se pueden reutilizar cuando se insertan nuevos datos. Es necesario cambiar manualmente el tamaño del espacio de tablas para aprovechar el espacio no utilizado.

Resolución

Para cambiar el tamaño del espacio de tablas de la instancia de RDS for Oracle, siga los siguientes pasos:

  1. Verifique la configuración del espacio de tablas.
  2. Aumente o disminuya el tamaño del espacio de tablas según su caso de uso.

Verifique la configuración del espacio de tablas

1.    Ejecute una consulta similar a la siguiente para determinar si el espacio de tablas es:

  • Permanente, deshacer o temporal
  • Smallfile o bigfile
SQL> SELECT TABLESPACE_NAME, CONTENTS, BIGFILE FROM DBA_TABLESPACES;

2.    Ejecute una consulta similar a la siguiente para verificar si la característica de extensión automática está activada, el tamaño actual del archivo de datos y el límite máximo configurado:

Para los espacios de tablas permanentes y de deshacer:

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 los espacios de tablas temporales:

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;

Es posible que observe lo siguiente en la salida de estas consultas:

  • Si la característica de extensión automática no está activada, entonces el valor de MAX_GB es igual a 0.
  • Si el espacio de tablas es smallfile, el valor de MAX_GB depende del tamaño de bloque que se utilizó para crear el espacio de tablas. Por ejemplo, el valor de MAX_GB es 32 GB si el tamaño de bloque utilizado es 8K. Para obtener más información, consulte la documentación de Oracle sobre Tamaños de bloques no estándar.
  • Si el espacio de tablas es bigfile, el valor de MAX_GB se muestra como 32 TB. Sin embargo, debido a limitaciones relacionadas con el sistema operativo en RDS for Oracle, el archivo solo se puede extender hasta 16 TiB.

Opcionalmente, puede ejecutar las siguientes consultas para obtener el DDL utilizado para crear el espacio de tablas:

SQL> SET LINESIZE 400
SQL> SET LONG 99999
SQL> SELECT DBMS_METADATA.GET_DDL('TABLESPACE','example-tablespace') FROM DUAL;

Puede obtener la información necesaria sobre el espacio de tablas a partir del DDL devuelto.

Aumente el tamaño del espacio de tablas

Si ha activado la característica de extensión automática, no es necesario aumentar el tamaño del espacio de tablas, independientemente del tipo de espacio de tablas. En este caso, el espacio de tablas cambiará de tamaño automáticamente según sea necesario.

Si no ha activado la característica de extensión automática y desea modificar el tamaño del espacio de tablas, siga los siguientes pasos:

Para los espacios de tabla bigfile: cambie el tamaño del espacio de tablas mediante el comando ALTER TABLESPACE. Puede especificar el tamaño en kilobytes (K), megabytes (M), gigabytes (G) o terabytes (T). El espacio de tablas bigfile tiene un único archivo de datos, y este comando modifica el tamaño del archivo de datos único subyacente asociado al espacio de tablas.

SQL> ALTER TABLESPACE example-tablespace RESIZE 50G;

Para los espacios de tablas smallfile: puede modificar el tamaño del espacio de tablas únicamente al agregar más archivos de datos al espacio de tablas. No se puede cambiar el tamaño ni modificar la configuración de los archivos de datos actuales.

SQL> ALTER TABLESPACE example-tablespace ADD DATAFILE SIZE 1G AUTOEXTEND ON;

Reducir el tamaño del espacio de tabla

Si el espacio de tablas es smallfile, entonces no se pueden administrar los archivos de datos subyacentes. Para aumentar el tamaño del espacio de tablas, agregue un nuevo archivo de datos. Al agregar un nuevo archivo de datos, asegúrese de elegir los valores correctos para AUTOEXTEND, SIZE y MAXSIZE. Estos valores no se pueden modificar posteriormente. Para reducir el tamaño del espacio de tablas smallfile, cree un nuevo espacio de tablas con el espacio deseado y traslade todos los datos manualmente al nuevo espacio de tablas.

Si el espacio de tablas es bigfile, elija uno de los siguientes métodos para reducir el tamaño del espacio de tablas en función del tipo de datos del espacio de tablas:

Espacios de tablas permanentes: no se puede disminuir el tamaño de un espacio de tablas permanente a un valor inferior a la indicación de máximo del espacio de tablas. Si lo intenta, se produce el siguiente error en la operación de cambio de tamaño:

ORA-03297: file contains used data beyond requested RESIZE value

Sin embargo, supongamos que un espacio de tablas tiene el tamaño de 50 GB con una indicación de máximo de 40 GB. Entonces, puede reducir el tamaño del espacio de tablas a 40 GB mediante la ejecución de una consulta similar a la siguiente:

SQL> ALTER TABLESPACE example-tablespace RESIZE 40G;

No se puede reducir el tamaño del espacio de tablas a un valor inferior a la indicación de máximo. En estos casos, puede realizar cualquiera de las siguientes acciones:

  • Volver a organizar los objetos en el espacio de tablas.
  • Cree un nuevo espacio de tablas y migre todos los objetos al nuevo espacio de tablas. A continuación, descarte el antiguo espacio de tablas.

Espacios de tablas temporales: es posible disminuir el tamaño del espacio de tablas temporal mediante el comando SHRINK.

Ejemplo:

SQL> ALTER TABLESPACE example-tablespace SHRINK SPACE KEEP 100M;

Para cambiar el tamaño de los espacios de tablas temporales en una réplica de lectura, utilice el paquete rdsadmin.rdsadmin_util.resize_temp_tablespace:

SQL> EXEC rdsadmin.rdsadmin_util.resize_temp_tablespace('example-tablespace','100M');

Para obtener más información, consulte Cambiar el tamaño del espacio de tablas temporal en una réplica de lectura.

-o bien-

Puede crear otro espacio de tablas temporal con el tamaño de su elección. Tras ello, puede establecer este nuevo espacio de tablas temporal como espacio de tablas temporal predeterminado.

1.    Ejecute la siguiente consulta para ver el espacio de tablas temporal predeterminado actual:

SQL> SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'DEFAULT_TEMP_TABLESPACE';

2.    Ejecute la siguiente consulta para crear un nuevo espacio de tablas temporal:

SQL> CREATE TEMPORARY TABLESPACE example-tablespace TEMPFILE SIZE 100M;

3.    Ejecute la siguiente consulta para establecer el nuevo espacio de tablas temporal como espacio de tablas temporal predeterminado:

SQL> EXEC RDSADMIN.RDSADMIN_UTIL.ALTER_DEFAULT_TEMP_TABLESPACE(TABLESPACE_NAME => 'example-tablespace');

Para modificar el espacio de tablas temporal para un usuario específico, puede hacer lo siguiente:

1.    Ejecute la siguiente consulta para ver el espacio de tablas temporal predeterminado actual para el usuario:

SQL>  SELECT USERNAME, TEMPORARY_TABLESPACE FROM DBA_USERS where USERNAME='example_username';

2.    Ejecute la siguiente consulta para cambiar el espacio de tablas temporal predeterminado para el usuario:

SQL> ALTER USER example_username TEMPORARY TABLESPACE example-tablespace;

Espacios de tabla de deshacer: en primer lugar, intente reducir el tamaño del espacio de tablas de deshacer mediante el comando ALTER TABLESPACE.

Ejecute la siguiente consulta para identificar el espacio de tablas de deshacer que está actualmente en uso:

SQL> SHOW PARAMETER UNDO_TABLESPACE;

Ejecute una consulta similar a la siguiente para disminuir el tamaño del espacio de tablas de deshacer:

SQL> ALTER TABLESPACE example-tablespace RESIZE 500M;

Esta consulta se ejecuta correctamente si no hay segmentos de deshacer en el almacenamiento que se deban eliminar.

Si la consulta anterior no se ejecuta correctamente, haga lo siguiente:

1.    Cree un nuevo espacio de tablas de deshacer:

Ejecute una consulta similar a la siguiente para crear un nuevo espacio de tabla de deshacer:

SQL> CREATE UNDO TABLESPACE example-new-tablespace DATAFILE SIZE 1G AUTOEXTEND ON MAXSIZE 100G;

2.    Establezca el espacio de tablas recién creado como espacio de tablas de deshacer predeterminado:

Establezca el parámetro de inicialización UNDO_TABLESPACE en el grupo de parámetros para que apunte al espacio de tablas recién creado. Para obtener más información, consulteModificación de parámetros en un grupo de parámetros de base de datos.

Ejemplo:

UNDO_TABLESPACE = example-new-tablespace

Este parámetro es un parámetro dinámico y no da lugar a ningún tiempo de inactividad para aplicar la modificación. Sin embargo, es una práctica recomendada reiniciar la instancia de la base de datos después de este cambio. Para obtener más información, consulte Administración de deshacer.

Ejecute la siguiente consulta para verificar que el nuevo espacio de tablas de deshacer es el espacio de tablas predeterminado:

SQL> SHOW PARAMETER UNDO_TABLESPACE;

3.    Descarte el antiguo espacio de tablas de deshacer:

Ejecute una consulta similar a la siguiente para eliminar el antiguo espacio de tablas de deshacer:

SQL> DROP TABLESPACE example-tablespace INCLUDING CONTENTS AND DATAFILES;