Oracle--查詢表空間、schema、表等存儲情況操作

一、對錶空間的查詢

表空間是數據庫的邏輯劃分,一個表空間只能屬於一個數據庫。所有的數據庫對象都存放在指定的表空間中。但主要存放的是表, 所以稱作表空間。

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

資料來源:
1、Oracle DB , 計算各個用戶/schema 的磁盤佔用空間
2、oracle表空間總大小 剩餘大小

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章