表空间对应数据文件
select tablespace_name,
file_id,
file_name,
round(bytes / (1024 * 1024), 0) total_space
from dba_data_files
order by tablespace_name;
表空间总大小、使用率、剩余空间
注意:
- dba_data_files中的user_bytes表示的是可用空间,不是剩余空间。即数据文件的很小一部分空间用作数据文件本身的管理用,所以user_bytes比bytes小一点,就是这部分管理需要的空间。
- “当前表空间大小” :未自动扩展到极致的表空间大小;
- “允许最大表空间大小”:自动扩展到最大时,只能手动添加文件扩展表空间。
select upper(f.tablespace_name) "表空间名",
d.max_total_mb "允许最大表空间大小(m)",
d.max_total_mb - f.space_free_mb "剩余可扩展空间大小(m)",
d.space_total_mb "当前表空间大小(m)",
d.space_total_mb - f.space_free_mb "已使用空间(m)",
to_char(round((d.space_total_mb - f.space_free_mb) /
d.space_total_mb * 100,
2),
'990.99') || '%' "使用比",
f.space_free_mb "空闲空间(m)",
f.max_mb "最大块(m)"
from (select tablespace_name,
round(sum(bytes) / (1024 * 1024), 2) space_free_mb,
round(max(bytes) / (1024 * 1024), 2) max_mb
from sys.dba_free_space
--where tablespace_name = 'HSEMR_TAB'
group by tablespace_name) f,
(select dd.tablespace_name,
round(sum(dd.bytes) / (1024 * 1024), 2) space_total_mb,
round(sum(dd.maxbytes) / (1024 * 1024), 2) max_total_mb
from sys.dba_data_files dd
--where dd.tablespace_name = 'HSEMR_TAB'
group by dd.tablespace_name) d
where d.tablespace_name = f.tablespace_name
order by f.tablespace_name;
具体表的占用空间大小
select *
from (select t.tablespace_name,
t.owner,
t.segment_name,
t.segment_type,
sum(t.bytes / 1024 / 1024) mb
from dba_segments t
where t.segment_type = 'TABLE'
group by t.tablespace_name, t.owner, t.segment_name, t.segment_type) t
order by t.mb desc;
Oracle对BLOB类型的定义为:存储大型的、未被结构化的的变长二进制数据(如二进制文件、图片文件、音频和视频等非文本文件),在Oracle11g中BLOB最大存储容量为128TB;CLOB的定义为:用于存储单字节或多字节的大型字符串对象,支持使用数据库字符集的定长或变长字符,在Oracle11g中CLOB最大存储容量为128TB。显然,LOB类型通常用来存储大的信息,故 lobsegment、lobindex 占用空间较大也就不足为奇了。
当表含有LOB字段时,Oracle会为含有LOB字段的列单独创建一个lobsegment,同时还会创建一个lobindex。那么lobsegment、lobindex是如何与表关联起来的呢?可以使用xxx_lobs来查找lobsegment、lobindex与表之间的关系:
有LOB字段的表占用空间大小
select *
from (select tablespace_name, owner, segment_name, sum(mb) mb
from (select t.tablespace_name,
t.owner,
nvl(b.table_name, t.segment_name) segment_name,
t.segment_type,
t.bytes / 1024 / 1024 mb
from dba_segments t, dba_lobs b
where t.owner = 'HSEMR'
and t.tablespace_name = b.tablespace_name(+)
and t.owner = b.owner(+)
and t.segment_name = b.segment_name(+))
group by tablespace_name, owner, segment_name
order by mb desc)
--查看具体表时,条件只能写到最外层
where segment_name like 'MR_FILE_CONTENT%'
表空间或数据库的增长量
select a.snap_id,
c.tablespace_name ts_name,
to_char(to_date(a.rtime, 'mm/dd/yyyy hh24:mi:ss'),
'yyyy-mm-dd hh24:mi') rtime,
round(a.tablespace_size * c.block_size / 1024 / 1024, 2) ts_size_mb,
round(a.tablespace_usedsize * c.block_size / 1024 / 1024, 2) ts_used_mb,
round((a.tablespace_size - a.tablespace_usedsize) * c.block_size / 1024 / 1024,
2) ts_free_mb,
round(a.tablespace_usedsize / a.tablespace_size * 100, 2) pct_used
from dba_hist_tbspc_space_usage a,
(select tablespace_id,
substr(rtime, 1, 10) rtime,
max(snap_id) snap_id
from dba_hist_tbspc_space_usage nb
group by tablespace_id, substr(rtime, 1, 10)) b,
dba_tablespaces c,
v$tablespace d
where a.snap_id = b.snap_id
and a.tablespace_id = b.tablespace_id
and a.tablespace_id = d.ts#
and d.name = c.tablespace_name
and to_date(a.rtime, 'mm/dd/yyyy hh24:mi:ss') >= sysdate - 30
order by a.tablespace_id, to_date(a.rtime, 'mm/dd/yyyy hh24:mi:ss') desc;