Cómo ver el espacio que ocupan las tablas de un esquema en oracle

Algunas veces es necesario conocer el tamaño que nos ocupa la tabla de un determinado esquema.

Aquí os dejamos un par de consultas para ello:

Espacio que ocupan las tablas en bytes, kb, mb, gb de un esquema.

Para ello sustituiremos nombre_de_esquema por el esquema que queramos consultar.

SELECT segment_name AS "TABLE_NAME",
SUM (BYTES) AS "[Bytes]",
SUM (BYTES) / 1024 AS "[Kb]",
SUM (BYTES) / (1024*1024) AS "[Mb]",
SUM (BYTES) / (1024*1024*1024) AS "[Gb]"
FROM dba_segments
WHERE owner = 'nombre_de_esquema’' and segment_type = 'TABLE'
GROUP BY segment_name order by "[Bytes]" desc

Si queremos saber el espacio de una tabla determinada, lo haremos con la siguiente consulta sustituyendo nombre_de_tabla por la tabla que queramos consultar.

SELECT segment_name AS "TABLE_NAME",
SUM (BYTES) AS "[Bytes]",
SUM (BYTES) / 1024 AS "[Kb]",
SUM (BYTES) / (1024*1024) AS "[Mb]",
SUM (BYTES) / (1024*1024*1024) AS "[Gb]"
FROM dba_segments
WHERE segment_name = 'nombre_de_tabla' and segment_type = 'TABLE'
GROUP BY segment_name order by "[Bytes]" des9c

Consultar el espacio disponible en los tablespaces

A menudo, los DBAs necesitan monitorizar el espacio de los tablespaces. Aunque ya hay productos, como el Cloud Control donde pueden programarse estas alertas, siempre podemos consultar el espacio accediendo a las vistas dedicadas a ello que tiene nuestra base de datos.

Esta consulta serviría para bases de datos «nonpluggable» de oracle 12c

SELECT 1 seq, b.tablespace_name, nvl(x.fs,0)/y.ap*100 pf, b.file_name file_name,
b.bytes/&&b_div a_byt, NVL((b.bytes-SUM(f.bytes))/&&b_div,b.bytes/&&b_div) t_byt,
NVL(SUM(f.bytes)/&&b_div,0) f_byt, NVL(SUM(f.bytes)/b.bytes*100,0) pct_free
FROM dba_free_space f, dba_data_files b
,(SELECT y.tablespace_name, SUM(y.bytes) fs
FROM dba_free_space y GROUP BY y.tablespace_name) x
,(SELECT x.tablespace_name, SUM(x.bytes) ap
FROM dba_data_files x GROUP BY x.tablespace_name) y
WHERE f.file_id(+) = b.file_id
AND x.tablespace_name(+) = y.tablespace_name
and y.tablespace_name = b.tablespace_name
AND f.tablespace_name(+) = b.tablespace_name
GROUP BY b.tablespace_name, nvl(x.fs,0)/y.ap*100, b.file_name, b.bytes
UNION
SELECT 2 seq, tablespace_name,
j.bf/k.bb*100 pf, b.name file_name, b.bytes/&&b_div a_byt,
a.bytes_used/&&b_div t_byt, a.bytes_free/&&b_div f_byt,
a.bytes_free/b.bytes*100 pct_free
FROM v$temp_space_header a, v$tempfile b
,(SELECT SUM(bytes_free) bf FROM v$temp_space_header) j
,(SELECT SUM(bytes) bb FROM v$tempfile) k
WHERE a.file_id = b.file#
ORDER BY 1,2,4,3;