一、查看表大小
有两种含义的表大小。
一种是分配给一个表的物理空间数量,而不管空间是否被使用。可以这样查询获得字节数、
1.查看特定表大小占用表空间大小
select sum(bytes)/1024/1024 mbytes from user_segments where segment_type='table' and segment_name='test01';
查看所有表大小
select segment_name, bytes from user_segments where segment_type = 'table';
注意、where 条件查询的参数都要大写,否则就会查询不到符合的数据。
2.查看表当前使用的空间
analyze table test01 compute statistics; 分析表
select num_rows * avg_row_len from user_tables where table_name = 'test01'; 查询表
二、查看表空间大小
命令一、先查看当前库下所有的user表空间
select * from user_tablespaces
命令二、查看当前库下所有表空间的free情况
select tablespace_name,sum(nvl(bytes,0)) from dba_free_space group by tablespace_name;
函数nvl用法、
nvl(a,b),就是用户判断a的值,如果查询的结果a的值为null,则返回b的值,如果a的值不为null,则返回a的值
命令三、查看当前库下的数据文件
select tablespace_name,sum(bytes) from dba_data_files group by tablespace_name;
这个值会查看到oracle 表空间的总大小
命令四、描述数据库的表空间
select tablespace_name,contents,extent_management from dba_tablespaces
根据上面四个常用的命令,来创建一个视图,查看表空间的利用情况
select
a.a1 tab_name,(表空间名称)
c.c2 tab_type,(表类型)
c.c3 table_management, (表管理)
b.b2/1024/1024 tab_space_m, (表空间大小,总)
a.a2/1024/1024 free_space_m,(剩余表空间大小)
(b.b2-a.a2)/1024/1024 u
sed_space_m,( 表使用大小)
substr((b.b2-a.a2)/b.b2*100,1,5)use_ratio(表的利用率)
from
(select tablespace_name a1,sum(nvl(bytes,0)) a2 from dba_free_space group by tablespace_name) a,
(select tablespace_name b1,sum(bytes) b2 from dba_data_files group by tablespace_name) b,
(select tablespace_name c1,contents c2,extent_management c3 from dba_tablespaces) c
where a.a1=b.b1 and c.c1=b.b1;
我后面中文是起到一个标识的作用,在实际的oracle sql developer工具或者pl/sql中,都尽量不要带有中文,很容易造成sql 语句不能识别
查询结果如图、
三、如果想要查看到表空间的datafile文件名,需要更改视图、
1.查看当前库下所有表空间的free情况
select tablespace_name,sum(nvl(bytes,0)) from dba_free_space group by tablespace_name;
2.查看表空间所属的数据文件,测试环境下,一般都是一个表空间下只有一个数据文件,而在实际的环境中,一个表空间下有多个数据文件,而一个数据文件只能属于一个表空间
select file_name,tablespace_name from dba_data_files;
可以为一个表空间添加数据文件
alter tablespace myspace add datafile '/opt/oracle/oradata/test05/mytb02.dbf' size 20m autoextend on next 2m maxsize 100m;
创建视图,查看file_name,tablespace_name,如下
select
b.file_namephy_file_name, (物理文件名)
b.tablespace_nametablespace_name,(表空间名)
b.bytes/1024/1024tabspace_bytes,(表空间大小 mb)
(b.bytes-sum(nvl(a.bytes,0)))/1024/1024useed_space,(使用表空间大小)
substr((b.bytes-sum(nvl(a.bytes,0)))/(b.bytes) * 100,1,5) use_ratio (利用率)
from dba_free_space a , dba_data_files b
where a.file_id=b.file_id
group by b.tablespace_name,b.file_name,b.bytes
order by b.tablespace_name
查询结果如图、
四、如果想查看特定的表所在的表空间以及所在的物理文件上
select a.table_name,a.tablespace_name,b.file_name from user_tables a , dba_data_files b
where a.tablespace_name=b.tablespace_name and a.table_name='test01';
五、查询和表空间的相关查询命令(知识点)
1、查询默认的数据表空间和临时表空间
select property_name,property_value from database_properties where property_name in ('default_permanent_tablespace',
'default_temp_tablespace'); (针对user的默认数据表空间和临时表空间)
2、更改数据库的默认表空间
alter database default tablespace tablespace_name;(数据表空间)
alter database temporary tablespace tablespace_name;(临时数据表空间)