¿Cómo saber el tamaño de una base de datos en Oracle?

Descubre el Tamaño Real de tus Esquemas Oracle

09/06/2022

Valoración: 4.01 (12901 votos)

En el vasto universo de las bases de datos, comprender el espacio que ocupan tus objetos y esquemas es tan fundamental como saber el contenido que almacenan. Para los administradores de bases de datos (DBAs) y desarrolladores que trabajan con Oracle, monitorear el tamaño de los esquemas no es solo una buena práctica, es una necesidad imperativa para la planificación de capacidad, la optimización del rendimiento y la gestión eficiente de los recursos. Un esquema de base de datos es una colección lógica de objetos (tablas, índices, vistas, procedimientos, etc.) asociados a un usuario de la base de datos. Conocer su tamaño nos permite anticipar necesidades de almacenamiento, identificar posibles crecimientos desmedidos o incluso detectar anomalías.

¿Cómo encontrar la tasa de crecimiento de una base de datos Oracle?
Para comprobar el crecimiento de la base de datos: P / 1024 / 1024 ),2) || ' MB' "Espacio usado", ROUND(((SUMA(USADO. BYTES) / 1024 / 1024 ) - (LIBRE. P / 1024 / 1024 )) / ROUND(SUMA(USADO. BYTES) / 1024 / 1024 ,2)*100,2) || '% MB' "Usado en %", ROUND((LIBRE.

Este artículo te guiará a través de los pasos y comandos esenciales para comprobar el tamaño de tus esquemas en Oracle, utilizando las herramientas y vistas de diccionario de datos más comunes. Exploraremos la consulta clave, desglosaremos sus componentes y discutiremos la importancia de esta información para la salud general de tu base de datos.

Índice de Contenido

Entendiendo los Componentes de un Esquema en Oracle

Antes de sumergirnos en las consultas, es crucial entender qué constituye el tamaño de un esquema. En Oracle, el espacio es gestionado a través de segmentos, extensiones y bloques. Cada objeto dentro de un esquema, como una tabla o un índice, consume espacio en la base de datos y se almacena en segmentos. Un segmento es la unidad de almacenamiento que contiene un objeto de base de datos específico (por ejemplo, un segmento de tabla, un segmento de índice, un segmento de rollback). Estos segmentos residen dentro de tablespaces.

  • Tablespace: Un tablespace es una unidad lógica de almacenamiento en Oracle. Contiene segmentos de datos, y cada segmento pertenece a un tablespace.
  • Segmento: Es el espacio de almacenamiento asignado a un objeto específico de la base de datos (tabla, índice, LOB, etc.).
  • Extensión: Un segmento está compuesto por una o más extensiones. Una extensión es una asignación contigua de bloques de datos.
  • Bloque: La unidad más pequeña de E/S que Oracle puede leer o escribir.

El tamaño de un esquema se refiere al espacio total ocupado por todos los segmentos propiedad de un usuario específico dentro de la base de datos.

La Consulta Fundamental: dba_segments

La vista de diccionario de datos dba_segments es tu mejor aliada para obtener información sobre el espacio ocupado por los segmentos en tu base de datos Oracle. Esta vista proporciona detalles sobre todos los segmentos de almacenamiento en la base de datos, incluyendo su propietario, nombre, tipo, tamaño en bytes y el tablespace al que pertenecen.

La consulta proporcionada es una excelente manera de obtener un resumen del tamaño total por propietario (esquema):

set linesize 150 set pagesize 5000 col owner for a15 col segment_name for a30 col segment_type for a20 col TABLESPACE_NAME for a30 clear breaks clear computes compute sum of SIZE_IN_GB on report break on report select OWNER,sum(bytes)/1024/1024/1000 “SIZE_IN_GB” from dba_segments group by owner order by owner;

Desglose de la Consulta y Comandos de Formato

Analicemos cada parte de esta poderosa consulta y los comandos de SQL*Plus que la acompañan:

  • set linesize 150: Este comando de SQL*Plus establece el ancho de la línea de salida en 150 caracteres. Esto es útil para asegurar que toda la información de cada fila se muestre correctamente sin truncarse, especialmente cuando tienes columnas con nombres largos o datos extensos.
  • set pagesize 5000: Define el número de líneas que se mostrarán en una página antes de que SQL*Plus imprima un encabezado y un pie de página. Un valor alto como 5000 es útil para evitar interrupciones frecuentes de la salida y ver más filas de datos de una vez.
  • col owner for a15: Formatea la columna OWNER para que tenga un ancho de 15 caracteres. La 'a' indica un formato alfanumérico. Esto ayuda a alinear la salida y hacerla más legible.
  • col segment_name for a30: Formatea la columna SEGMENT_NAME con un ancho de 30 caracteres. Aunque no se usa directamente en la consulta principal que suma por propietario, es una buena práctica incluirla si se piensa en consultas más detalladas de dba_segments.
  • col segment_type for a20: Formatea la columna SEGMENT_TYPE con un ancho de 20 caracteres. De nuevo, para futuras consultas más detalladas.
  • col TABLESPACE_NAME for a30: Formatea la columna TABLESPACE_NAME con un ancho de 30 caracteres. Útil para análisis por tablespace.
  • clear breaks: Elimina cualquier definición de salto de línea anterior.
  • clear computes: Elimina cualquier definición de cálculo anterior (como sumas, promedios, etc.).
  • compute sum of SIZE_IN_GB on report: Este comando le indica a SQL*Plus que calcule la suma total de la columna SIZE_IN_GB al final del informe (on report). Es increíblemente útil para obtener un resumen global del tamaño de todos los esquemas.
  • break on report: Define un punto de ruptura para el informe completo. Cuando se combina con compute, asegura que el cálculo total se muestre al final de toda la salida.
  • select OWNER,sum(bytes)/1024/1024/1000 “SIZE_IN_GB” from dba_segments group by owner order by owner;: Esta es la consulta principal.
    • OWNER: La columna que identifica al propietario del segmento, que en este contexto es el nombre del esquema.
    • sum(bytes)/1024/1024/1000 “SIZE_IN_GB”: Calcula la suma de los bytes ocupados por todos los segmentos de un propietario. Se divide por 1024 para convertir a Kilobytes, nuevamente por 1024 para Megabytes, y finalmente por 1000 para Gigabytes (se usa 1000 en lugar de 1024 para una aproximación decimal más común en reportes de GB, aunque técnicamente 1024 es GiB). La columna resultante se renombra como SIZE_IN_GB.
    • from dba_segments: Especifica que estamos consultando la vista de diccionario dba_segments.
    • group by owner: Agrupa los resultados por el propietario del esquema, lo que permite que la función sum() calcule el total de bytes para cada esquema individualmente.
    • order by owner: Ordena los resultados alfabéticamente por el nombre del propietario, facilitando la lectura y búsqueda de esquemas específicos.

Interpretando los Resultados

La salida de esta consulta te mostrará una lista de todos los propietarios (esquemas) de la base de datos, junto con el tamaño total de los segmentos que poseen, expresado en Gigabytes. Al final de la lista, gracias a los comandos compute y break, verás una línea con el tamaño total de todos los esquemas combinados en tu base de datos.

Es importante recordar que este tamaño representa el espacio asignado a los segmentos, no necesariamente el espacio utilizado. Por ejemplo, una tabla con muchas filas eliminadas puede tener mucho espacio asignado (segmento grande) pero poco espacio realmente lleno de datos activos.

Consideraciones Adicionales y Otras Vistas Útiles

Mientras que dba_segments es la vista principal para el tamaño de los esquemas, otras vistas de diccionario de datos pueden proporcionar una imagen más completa:

1. Tamaño a Nivel de Tablespace

Aunque no es directamente el tamaño del esquema, los esquemas residen en tablespaces. Entender el espacio libre y ocupado en los tablespaces es crucial para la gestión de la base de datos.

SELECT df.tablespace_name, total_space_mb AS "Total MB", free_space_mb AS "Free MB", (total_space_mb - free_space_mb) AS "Used MB", ROUND((total_space_mb - free_space_mb) / total_space_mb * 100, 2) AS "% Used" FROM (SELECT tablespace_name, SUM(bytes) / 1024 / 1024 AS total_space_mb FROM dba_data_files GROUP BY tablespace_name) df JOIN (SELECT tablespace_name, SUM(bytes) / 1024 / 1024 AS free_space_mb FROM dba_free_space GROUP BY tablespace_name) fs ON df.tablespace_name = fs.tablespace_name ORDER BY "% Used" DESC;

2. Espacio por Tipo de Segmento dentro de un Esquema

Si deseas ver qué tipo de objetos (tablas, índices, LOBs) están consumiendo más espacio dentro de un esquema específico, puedes modificar la consulta original:

select OWNER, SEGMENT_TYPE, sum(bytes)/1024/1024/1000 “SIZE_IN_GB” from dba_segments where OWNER = 'TU_ESQUEMA' -- Reemplaza 'TU_ESQUEMA' con el nombre real group by owner, SEGMENT_TYPE order by owner, SEGMENT_TYPE;

Esta consulta te daría un desglose como este:

OWNERSEGMENT_TYPESIZE_IN_GB
HRTABLE0.005
HRINDEX0.002
SCOTTTABLE0.001
SCOTTINDEX0.000
SYSTABLE5.123
SYSINDEX2.345
SYSLOBSEGMENT1.500

3. Segmentos Temporales y de Deshacer (Undo)

Es importante recordar que los segmentos temporales (utilizados para operaciones de clasificación y hash) y los segmentos de deshacer (para transacciones y consistencia de lectura) también consumen espacio, aunque generalmente no se asocian directamente con un esquema de usuario para el cálculo de su 'tamaño'. Sin embargo, pueden influir en el consumo total de disco de la base de datos.

¿Por Qué es Crucial Monitorear el Tamaño de los Esquemas?

El monitoreo constante del tamaño de los esquemas es una tarea vital para cualquier DBA. Aquí te explicamos por qué:

  • Planificación de Capacidad: Conocer el crecimiento histórico y actual de los esquemas te permite prever futuras necesidades de almacenamiento y planificar la expansión de discos o la adquisición de licencias.
  • Optimización de Rendimiento: Un esquema que crece sin control puede indicar la presencia de tablas con demasiados datos, índices ineficientes o la falta de purga de información antigua. Un tamaño excesivo puede impactar negativamente el rendimiento de las consultas y las operaciones DML.
  • Gestión de Costos: En entornos de nube (como Oracle Cloud Infrastructure, AWS RDS, Azure SQL Database), el almacenamiento es un componente de costo significativo. Optimizar el tamaño de los esquemas puede llevar a ahorros considerables.
  • Identificación de Anomalías: Un crecimiento repentino e inesperado en el tamaño de un esquema podría ser una señal de un problema, como una aplicación que inserta datos de forma descontrolada, un bucle infinito o un proceso de carga de datos erróneo.
  • Mantenimiento y Purga de Datos: Los reportes de tamaño pueden ayudarte a identificar candidatos para archivar o purgar datos antiguos o innecesarios, liberando espacio y mejorando el rendimiento.

Estrategias para Gestionar el Tamaño del Esquema

Una vez que identificas esquemas grandes o en crecimiento, puedes tomar varias acciones:

  • Purga de Datos: Elimina datos históricos o no esenciales que ya no sean necesarios para la operación diaria.
  • Archivado de Datos: Mueve datos antiguos a un almacenamiento de menor costo o a una base de datos de archivo separada.
  • Compresión de Tablas e Índices: Oracle ofrece opciones de compresión a nivel de tabla y de índice que pueden reducir significativamente el espacio ocupado, especialmente para datos con alta redundancia.
  • Particionamiento: Para tablas muy grandes, el particionamiento puede ayudar a gestionar el tamaño, mejorar el rendimiento y facilitar el archivado de datos. Puedes mover particiones antiguas a tablespaces de menor costo o eliminarlas.
  • Reorganización de Objetos (Shrink): Después de una eliminación masiva de datos, los segmentos pueden tener mucho espacio libre fragmentado. El comando ALTER TABLE ... SHRINK SPACE o ALTER INDEX ... SHRINK SPACE puede recuperar este espacio sin necesidad de una reorganización completa del objeto.
  • Identificación de Objetos Grandes: Usa consultas detalladas sobre dba_segments (filtrando por OWNER y ordenando por bytes DESC) para encontrar las tablas o índices específicos que más espacio consumen dentro de un esquema.

Preguntas Frecuentes (FAQ)

¿Qué es un esquema en Oracle?

En Oracle, un esquema es una colección lógica de objetos de base de datos (tablas, índices, vistas, procedimientos almacenados, etc.) que pertenecen a un usuario específico de la base de datos. Cuando creas un usuario en Oracle, automáticamente se crea un esquema con el mismo nombre.

¿Por qué el tamaño del esquema es diferente al tamaño de la base de datos?

El tamaño de un esquema se refiere al espacio ocupado por los objetos de un usuario específico. El tamaño de la base de datos es el espacio total que ocupa la base de datos en el disco, incluyendo todos los esquemas de usuario, esquemas del sistema (como SYS, SYSTEM), tablespaces temporales, tablespaces de deshacer y archivos de control y redo logs.

¿Cómo puedo liberar espacio de un esquema?

Puedes liberar espacio eliminando datos no necesarios (DELETE), truncando tablas (TRUNCATE TABLE), eliminando objetos (DROP TABLE, DROP INDEX), o usando la operación SHRINK SPACE en tablas e índices para recuperar espacio no utilizado dentro de sus segmentos.

¿Afecta el tamaño del esquema al rendimiento?

Sí, un tamaño excesivo del esquema puede afectar el rendimiento. Tablas muy grandes pueden hacer que las consultas sean más lentas, los índices pueden ser menos eficientes, y las operaciones de respaldo y recuperación pueden tardar más tiempo. Además, un crecimiento descontrolado puede llevar a la fragmentación del espacio.

¿La consulta muestra el espacio utilizado o el espacio asignado?

La consulta a dba_segments muestra el espacio asignado a los segmentos. Esto significa el espacio que Oracle ha reservado para esos objetos, incluso si no todo está lleno de datos activos. Para el espacio realmente utilizado, se necesitarían consultas más complejas que involucren dba_tables y num_rows, pero dba_segments es la forma más directa de obtener el espacio de almacenamiento físico reservado.

¿Qué otras herramientas puedo usar para monitorear el tamaño?

Además de SQL*Plus y las vistas de diccionario, herramientas como Oracle Enterprise Manager (OEM) o SQL Developer ofrecen interfaces gráficas que facilitan la visualización y el monitoreo del tamaño de los esquemas y tablespaces. También existen scripts personalizados y herramientas de terceros para un análisis más profundo.

Conclusión

La capacidad de monitorear y gestionar el tamaño de los esquemas de base de datos en Oracle es una habilidad esencial para cualquier profesional de bases de datos. La consulta a dba_segments es el punto de partida fundamental para obtener esta información vital. Al entender no solo cómo ejecutar la consulta, sino también cómo interpretar sus resultados y qué acciones tomar en función de ellos, puedes asegurar la salud, el rendimiento y la longevidad de tus sistemas Oracle. Implementa estas prácticas de monitoreo regularmente para mantener tu base de datos optimizada y preparada para el crecimiento futuro.

Si quieres conocer otros artículos parecidos a Descubre el Tamaño Real de tus Esquemas Oracle puedes visitar la categoría Cálculos.

Subir