¿Cómo determinar el tamaño de una base de datos Oracle?
A menudo nos hacen la pregunta de ¿cuál es el tamaño de nuestra base de datos?
Podríamos decir cuál es el tamaño de los datos, pero considero que una respuesta más amplia sería que el tamaño debería estar suministrado por nuestros tablespaces (incluyendo los temporales) más nuestros redolog y si la base de datos se encuentra en modo archivelog entonces agregar el tamaño de los directorios que almacenan los archivelogs.
Esta pequeña consulta responde a esta pregunta, de tamaño total de la base de datos, además de aportar alguna información sobre la utilización de los tablespaces.
Tamaño Total Base de Datos
SELECT sum(total) + sum(logs) + sum(dir_archivelog) TamanoBDD
FROM (
-- Espacio Libre Tablespaces
select g.tablespace_name TS,
ROUND(sum(g.bytes) / 1024 / 1024, 2) libre,
0 total,
0 logs,
0 dir_archivelog
from dba_free_space g
group by g.tablespace_name
union all
--Espacio Total Tablespaces
select f.tablespace_name,
0,
ROUND(sum(f.bytes) / 1024 / 1024, 2),
0,
0
from dba_data_files f
group by f.tablespace_name
union all
--Espacio de Tablespaces Temporales
SELECT v.TABLESPACE_NAME,
free_blocks * 8192 / 1024 / 1024 libre,
round(sum(bytes) / 1024 / 1024, 2) total,
0,
0
FROM v$sort_segment v
left outer join dba_temp_files t
on v.TABLESPACE_NAME = t.tablespace_name
group by v.TABLESPACE_NAME, free_blocks
union all
--Espacio de los Redologs
select 'REDOLOGS', 0, 0, round(sum(bytes) / 1024 / 1024, 2), 0
from v$log
union all
--Espacio del directorio que almacena los Archivelogs
select 'DIR ARCHIVELOGS',
0,
0,
0,
to_number(substr(Display_value,
1,
INSTRC(Display_value, 'G', 1) - 1))
from v$parameter
where name = 'db_recovery_file_dest_size')
Con Informacion de uso de Los Tablespaces
SELECT ts nombre_tablespace,
sum(libre) Espacio_Libre,
sum(total) Espacio_Total,
sum(total) - sum(libre) Espacio_usado,
sum(logs) Espacio_redoLogs,
sum(dir_archivelog) Espacio_dir_archivelog
FROM (
-- Espacio Libre Tablespace
select g.tablespace_name TS,
ROUND(sum(g.bytes) / 1024 / 1024, 2) libre,
0 total,
0 logs,
0 dir_archivelog
from dba_free_space g
group by g.tablespace_name
union all
--Espacio Total Tablespace
select f.tablespace_name,
0,
ROUND(sum(f.bytes) / 1024 / 1024, 2),
0,
0
from dba_data_files f
group by f.tablespace_name
union all
--Espacio de Tablespaces Temporales
SELECT v.TABLESPACE_NAME,
free_blocks * 8192 / 1024 / 1024 libre,
round(sum(bytes) / 1024 / 1024, 2) total,
0,
0
FROM v$sort_segment v
left outer join dba_temp_files t
on v.TABLESPACE_NAME = t.tablespace_name
group by v.TABLESPACE_NAME, free_blocks
union all
--Espacio de los Redologs
select 'REDOLOGS', 0, 0, round(sum(bytes) / 1024 / 1024, 2), 0
from v$log
union all
--Espacio del directorio que almacena los Archivelogs
select 'DIR ARCHIVELOGS',
0,
0,
0,
to_number(substr(Display_value,
1,
INSTRC(Display_value, 'G', 1) - 1))
from v$parameter
where name = 'db_recovery_file_dest_size')
group by ts
Si necesitas mas información histórica acerca del uso de los tablespace, te recomiendo usar las vistas dba_hist_tablespace_stat y dba_hist_tbspc_space_usage que proporciona el AWR
No hay comentarios:
Publicar un comentario