Con esta sencilla Select podremos obtener el tamaño en Megas de los objetos de nuestra base de datos Oracle.
set pagesize 4000
set linesize 200
SELECT SEGMENT_NAME, SEGMENT_TYPE, SUM(BYTES)/1024/1024
FROM DBA_SEGMENTS
WHERE OWNER=nuestro_owner
GROUP BY SEGMENT_NAME, SEGMENT_TYPE
ORDER BY 2,1;
Con esta otra Select obtendremos el tamaño de un objeto en concreto,
set pagesize 4000
set linesize 200
SELECT SEGMENT_NAME, SEGMENT_TYPE, SUM(BYTES)/1024/1024
FROM DBA_SEGMENTS
WHERE SEGMENT_NAME=nombre_objeto
GROUP BY SEGMENT_NAME, SEGMENT_TYPE
ORDER BY 2,1;
Con esta query podemos ver los diferentes tipos de objetos que tenemos creados de un usuario esquema (OWNER).
set pagesize 4000
set linesize 200
SELECT DISTINCT SEGMENT_TYPE "Tipos objetos"
FROM DBA_SEGMENTS
WHERE OWNER=user_esquema
ORDER BY 1;
Para obtener el tamaño en MB de los índices creados de un esquema podemos utilizar esta query.
set pagesize 4000
set linesize 200
SELECT SEGMENT_NAME Indice, ROUND(SUM(BYTES)/1024/1024) MB
FROM DBA_SEGMENTS A
WHERE SEGMENT_TYPE = 'INDEX'
AND OWNER=user_esquema
GROUP BY SEGMENT_NAME
ORDER BY 1;
En este ejemplo voy a seleccionar los índices de unas tablas específicas, tabla1, tabla2, etc., y para un esquema dado.
set pagesize 4000
set linesize 200
SELECT SEGMENT_NAME Indice, ROUND(SUM(BYTES)/1024/1024) MB
FROM DBA_SEGMENTS A
WHERE SEGMENT_TYPE = 'INDEX'
AND OWNER=user_esquema
AND SEGMENT_NAME IN (SELECT INDEX_NAME FROM DBA_INDEXES WHERE TABLE_NAME IN ('TABLA1', 'TABLA2', 'TABLA3'))
GROUP BY SEGMENT_NAME
ORDER BY 1;
Otro ejemplo, esta query selecciona los índices asociados a unas tablas específicas, el resultado nos muestra la tabla más sus índices asociados con su tamaño en Mb.
SELECT B.TABLE_NAME Tabla, A.SEGMENT_NAME Indice, ROUND(SUM(A.BYTES)/1024/1024) MB
FROM DBA_SEGMENTS A, (SELECT INDEX_NAME, TABLE_NAME FROM DBA_INDEXES WHERE TABLE_NAME IN ('TABLA1', 'TABLA2', 'TABLA3')) B
WHERE A.SEGMENT_TYPE = 'INDEX'
AND A.SEGMENT_NAME = B.INDEX_NAME
AND A.OWNER=user_esquema
GROUP BY B.TABLE_NAME, A.SEGMENT_NAME
ORDER BY 1,2;