- 以下查询均在拥有DBA权限的用户下执行
- 以下命令执行结果截图客户端来自:PL/SQL Developer 11.0.6.1796(64 bit)
一、所有表空间
1、查看所有表空间文件存储位置
方式一
select t1.name tablespace_name,t2.name file_name from v$tablespace t1,v$datafile t2 where t1.ts# = t2.ts#;
方式二
select tablespace_name,file_name from dba_data_files;
以上两种方式查询结果相同,如下图:
2、查看所有表空间使用情况
方式一
SELECT a.tablespace_name "表空间名",
total "表空间大小",
free "表空间剩余大小",
(total - free) "表空间使用大小",
total / (1024 * 1024 * 1024) "表空间大小(G)",
free / (1024 * 1024 * 1024) "表空间剩余大小(G)",
(total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)",
round((total - free) / total, 4) * 100 "使用率 %"
FROM (SELECT tablespace_name, SUM(bytes) free
FROM dba_free_space
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(bytes) total
FROM dba_data_files
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name;
方式二
select
b.file_name "物理文件名",
b.tablespace_name "表空间",
b.bytes/1024/1024 "大小(M)",
(b.bytes-sum(nvl(a.bytes,0)))/1024/1024 "已使用(M)",
substr((b.bytes-sum(nvl(a.bytes,0)))/(b.bytes)*100,1,5) "利用率(%)"
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;
如下如:
该语句通过查询dba_free_space,dba_data_files这二个数据字典表,得到了表空间文件存储位置,表空间名称,以”兆”为单位的表空间大小,已使用的表空间大小及表空间利用率。dba_free_space表描述了表空间的空闲大小,dba_data_files表描述了数据库中的数据文件,dba_tablespaces表描述了数据库中的表空间。
二、指定用户的表空间
1、查询指定用户默认表空间、默认临时表空间
/* 指定用户(username)必须大写! */
select username,default_tablespace,temporary_tablespace from dba_users where username='GZBPO';
如下图:
2、查看指定用户下所有表使用的表空间
select owner,table_name,tablespace_name from dba_tables where owner='GZBPO';
三、查询某表空间被哪些用户所使用
1、先查询所有表空间的名称
select tablespace_name from dba_tablespaces;
2、查看表空间下有多少用户
--查看表空间下有多少用户,tablespace_name表空间的名字一定要大写
select distinct s.owner from dba_segments s where s.tablespace_name ='USERS';
-- 利用视图查看表空间下的所有者(如果有索引的话,此方式会漏掉一些所有者)
select owner from dba_tables where tablespace_name='USERS' group by owner;