miércoles, diciembre 01, 2010

Oracle: Espacio ocupado por un esquema

Consulta que obtiene el espacio ocupado por los objetos de la BBDD (agrupados):

SELECT
-- ds.tablespace_name TABLESPACE,
ds.segment_name TABLA,
NULL COLUMNA,
ds.segment_type TIPO,
SUM(ds.bytes) / 1024 KBYTES,
SUM(ds.blocks) BLOCKS,
SUM(ds.extents) EXTENTS
FROM dba_segments ds
WHERE ds.owner IN('ESQUEMA')
AND ds.segment_type NOT IN ('LOB PARTITION','LOBSEGMENT','INDEX PARTITION','INDEX','LOBINDEX')
GROUP BY
-- ds.tablespace_name,
ds.segment_name,
ds.segment_type
UNION
SELECT
-- ds.tablespace_name TABLESPACE,
dlp.TABLE_NAME TABLA,
dlp.column_name COLUMNA,
ds.segment_type TIPO,
SUM(ds.bytes) / 1024 KBYTES,
SUM(ds.blocks) BLOCKS,
SUM(ds.extents) EXTENTS
FROM dba_segments ds,
dba_lob_partitions dlp
WHERE ds.owner IN('ESQUEMA')
AND(dlp.lob_partition_name = ds.partition_name
AND ds.segment_type = 'LOB PARTITION')
GROUP BY
-- ds.tablespace_name,
dlp.TABLE_NAME,
ds.segment_name,
dlp.column_name,
ds.segment_type
UNION
SELECT
-- ds.tablespace_name TABLESPACE,
dl.table_name TABLA,
dl.column_name COLUMNA,
ds.segment_type TIPO,
SUM(ds.bytes) / 1024 KBYTES,
SUM(ds.blocks) BLOCKS,
SUM(ds.extents) EXTENTS
FROM dba_segments ds, dba_lobs dl
WHERE ds.owner IN('ESQUEMA')
AND (ds.segment_type = 'LOBSEGMENT'
AND dl.segment_name = ds.segment_name)
GROUP BY
-- ds.tablespace_name,
dl.table_name,
dl.column_name,
ds.segment_type
UNION
SELECT
-- ds.tablespace_name TABLESPACE,
di.TABLE_NAME TABLA,
ds.segment_name COLUMNA,
ds.segment_type TIPO,
SUM(ds.bytes) / 1024 KBYTES,
SUM(ds.blocks) BLOCKS,
SUM(ds.extents) EXTENTS
FROM dba_segments ds,
dba_indexes di
WHERE ds.owner IN('ESQUEMA')
AND(di.index_name = ds.segment_name
AND ds.segment_type IN ('INDEX PARTITION','INDEX','LOBINDEX'))
GROUP BY
-- ds.tablespace_name,
di.table_name,
ds.segment_name,
ds.segment_type ;