一、對表空間的查詢
表空間是數據庫的邏輯划分,一個表空間只能屬於一個數據庫。所有的數據庫對象都存放在指定的表空間中。但主要存放的是表, 所以稱作表空間。
Oracle數據庫中至少存在一個表空間,即SYSTEM的表空間。
附:
1、oracle 用戶與表空間關系
2、oracle 表空間和schema
3、關於表空間、Schema和用戶
4、ORACLE 中SCHEMA的概念以及數據庫,表空間,數據文件等的區別
1、查詢所有表空間名
select tablespace_name from sys.dba_tablespaces;
2、查詢所有表空間大小
//單位M SELECT DD.TABLESPACE_NAME, ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) "表空間大小(M)" FROM SYS.DBA_DATA_FILES DD GROUP BY DD.TABLESPACE_NAME
3、查詢所有表空間剩余空間大小
SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024), 2) "空閑空間(M)", ROUND(MAX(BYTES) / (1024 * 1024), 2) "最大塊(M)" FROM SYS.DBA_FREE_SPACE GROUP BY TABLESPACE_NAME
4、表空間已使用大小
--方法一:總表空間 - 空閑表空間 select d.tablespace_name, d.totalSize - f.freeSize "已使用空間(M)" from ( SELECT DD.TABLESPACE_NAME,ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) totalSize FROM SYS.DBA_DATA_FILES DD GROUP BY DD.TABLESPACE_NAME ) d, ( SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024), 2) freeSize FROM SYS.DBA_FREE_SPACE GROUP BY TABLESPACE_NAME ) f where d.TABLESPACE_NAME = f.TABLESPACE_NAME --方法二: select TABLESPACE_NAME,round(sum(bytes)/(1024*1024),2) "已使用空間(M)" from sys.dba_segments GROUP BY TABLESPACE_NAME
注:建議采用第一種方法,第二種方法會忽略未使用的表空間,且第一種方法得到的結果普遍比第二種方法得到的結果大1M,第一種方法得到的結果應該更准確
5、增加表空間大小的方式
--第一種:格式化數據文件初始大小並設置自增長到最大值 create tablespace d_test1 datafile '/test1_data/datafile01.dbf' size 10m autoextend on next 5m maxsize 100m; --第二種:格式化數據文件初始大小不設置自增長,當然也就沒有最大值 alter tablespace d_test1 add datafile '/test1_data/datafile02.dbf' size 10m;
二、對schema的查詢
1、查詢所有schema
資料來源:
1、Oracle DB , 計算各個用戶/schema 的磁盤占用空間
//一個用戶(user)對應一個方案(schema) select username from sys.dba_users
2、查詢schema下的所有表
select table_name from sys.dba_tables where owner='schema名';
3、查詢所有的schema及所屬的所有表
select s.username "schema",t.table_name "table_name" from sys.dba_users s left join sys.dba_tables t on s.username=t.owner order by s.username asc
4、查詢所有的schema所占空間大小
//消耗的總磁盤空間(包括索引、表空間空閑空間),單位G
select owner, sum(bytes)/1024/1024/1024 schema_size_gig from sys.dba_segments group by owner;
5、查詢指定schema各segment_type占用空間大小
select sum(bytes)/1024/1024/1024 as size_in_gig, segment_type from dba_segments where owner='SCOTT' group by segment_type; Drop Table 之后,如果空間不能回收,需要執行下面語句 清除當前用戶的回收站:purge recyclebin; 清除所有用戶的回收站:purge dba_recyclebin;
三、查詢表
1、通過指定表空間查詢所屬的表名
Select Table_Name, Tablespace_Name From Dba_Tables Where Tablespace_Name = 'USERS';
2、通過指定表空間查詢所屬表的占用空間
select segment_name, bytes/1024||'KB' "占用空間" from user_segments where segment_type='TABLE' and tablespace_name='USERS' order by segment_name asc