• Categoría: Oracle
  • Visto: 78625

Ratio: 4 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio desactivado
 
Oracle

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;