oracle 空間大小查詢

1、表空間大小sql

select b.file_name 物理文件名,數據庫

       b.tablespace_name 表空間,性能

       b.bytes / 1024 / 1024 大小M,spa

       (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,orm

       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 file_id,file_name,tablespace_name,status,bytes/1024/1024 as "bytes MB" from dba_data_files;

臨時表空間查詢:

1.查看默認的臨時表空間

SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE';SELECT USERNAME, TEMPORARY_TABLESPACE FROM DBA_USERS;

2.臨時表空間信息

SELECT FILE# AS FILE_NUMBER,
       NAME AS NAME,
       CREATION_TIME AS CREATION_TIME,
       BLOCK_SIZE AS BLOCK_SIZE,
       BYTES / 1024 / 1024 / 1024 AS "FILE_SIZE(G)",
       CREATE_BYTES / 1024 / 1024 / 1024 AS "INIT_SIZE(G)",
       STATUS AS STATUS,
       ENABLED AS ENABLED
  FROM V$TEMPFILE;

select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_files;

用sys管理員帳戶登陸查看

select status,enabled, name, bytes/1024/1024 file_size from v_$tempfile;

SELECT temp_used.tablespace_name,
      total - used as "Free",
       total as "Total",
       round(nvl(total - used, 0) * 100 / total, 3) "Free percent"
  FROM (SELECT tablespace_name, SUM(bytes_used) / 1024 / 1024 used
          FROM GV_$TEMP_SPACE_HEADER
         GROUP BY tablespace_name) temp_used,
       (SELECT tablespace_name, SUM(bytes) / 1024 / 1024 total
          FROM dba_temp_files
         GROUP BY tablespace_name) temp_total
 WHERE temp_used.tablespace_name = temp_total.tablespace_name
 ORDER BY B.TABLESPACE, B.SEGFILE#, B.SEGBLK#, B.BLOCKS;

 

查看每一個表空間的大小
Select Tablespace_Name,Sum(bytes)/1024/1024 from Dba_Segments Group By Tablespace_Name
1.查看剩餘表空間大小
 
SELECT tablespace_name 表空間,sum(blocks*8192/1000000) 剩餘空間M from dba_free_space GROUP BY tablespace_name;
 
2.檢查系統中全部表空間整體空間
select b.name,sum(a.bytes/1000000)總空間 from v$datafile a,v$tablespace b where a.ts#=b.ts# group by b.name;
 
3.查詢整個數據庫剩餘和使用的表空間大小使用狀況:
select df.tablespace_name "表空間名",totalspace "總空間M",freespace "剩餘空間M",round((1-freespace/totalspace)*100,2) "使用率%"
from
(select tablespace_name,round(sum(bytes)/1024/1024) totalspace
from dba_data_files
group by tablespace_name) df,
(select tablespace_name,round(sum(bytes)/1024/1024) freespace
from dba_free_space
group by tablespace_name) fs
where df.tablespace_name=fs.tablespace_name;

2、表的實際大小

分配給表的大小:

select sum(bytes)/1024/1024 "表大小(M)" from user_segments where segment_name='table_name';--注,僅表數據的大小,不含索引、分區、LOB類型

select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name having Segment_Name='table_name';

select segment_name, bytes from user_segments where segment_type = 'TABLE';或者
   Select Segment_Name,Sum(bytes)/1024/1024 from User_Extents Group By Segment_Name;以上查詢均是分配給表的大小

實際使用大小查詢:select num_rows * avg_row_len from user_tables where table_name = 'EMP';

有兩種含義的表大小。一種是分配給一個表的物理空間數量,而無論空間是否被使用。能夠這樣查詢得到字節數:

select segment_name, bytes
from user_segments
where segment_type = 'TABLE';
或者
   Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name

另外一種表實際使用的空間。這樣查詢:

analyze table emp compute statistics;
select num_rows * avg_row_len
from user_tables
where table_name = 'EMP';

查看每一個表空間的大小
Select Tablespace_Name,Sum(bytes)/1024/1024 From Dba_Segments Group By Tablespace_Name

 

表空間能夠按4種方式分類

1、按數據文件的類型,分爲:

大文件表空間(bigfile tablespace)此爲10g新增功能
小文件表空間(smallfile tablespace)此爲建立時默認值

大文件表空間的優勢有:

一、在一個表空間裏只有一個大的數據文件,之後不須要再去管理數據文件;
二、一個大的數據文件至關於1024個小的數據文件,這樣一來,在一個塊大小爲32K時,整個數據庫能夠達到(4g*32K)128TB,不過在實際環境中仍是要受到操做系統的影響;
三、使用一個大的數據文件能夠代替多個小數據文件,這樣對數據文件的管理就少多了;
四、當打開數據庫,發生檢查點,執行DBWR進程時使用大文件表空間會加強性能。

大文件表空間的的須要注意有:

一、要使用在ORACLE的ASM(自動存儲管理)的存儲空間或者分散(striping)存儲的LVM中,或者RAID陣列上;
二、不要把大文件表空間創建在不能分散(striping)存儲的系統上;
三、不要把大文件表空間創建在沒有空間(剩餘空間少)的磁盤組上;
四、創建大文件表空間時不推薦創建在不能擴展的存儲空間裏;
五、大文件表空間只支持本地管理表空間(LMT)和本地段空間管理(ASSM);
六、在臨時表空間與回滾段表空間,只能用手動段空間管理;
七、自動擴展數據文件必須是起用的,並且最大文件大小必須是不限制;
八、系統表空間和系統輔助(SYSAUX)表空間不能使用大文件表空間;
九、每一個表空間只能包含一個數據文件。若是試圖添加新的文件,則會報告 ora-32771 錯誤;
十、在 bft 上存儲的表的 rowid 和 smallfile 表空間上的 rowid 結構有些不一樣的。要正確獲得 rowid 信息,dbms_rowid 包增長了一個新的參數 ts_type_in 來解決這個問題。參考這個範例:

sql> select dbms_rowid.rowid_block_number (rowid, bigfile) 2 from foo;
dbms_rowid.rowid_block_number(rowid,bigfile)
----------------------------------------------
24
sql>

2、按管理方式,分爲:

本地管理表空間(LMT)
數據字典管理表空間(DMT)

本地管理表空間:
  一種比較先進的管理擴展(extent)的方式;
  是用bitmap來管理表空間裏的全部的extent;
  當使用本地管理表空間時是使用6個塊(從第三個到第八個)來標識整個表空間裏的每個擴展(extent);
  其中的每一位(bit)來表示每一個擴展的狀態。1爲已被分配,0爲可被分配。
  在本地管理表空間的方式裏能夠選擇每一個extent的大小是固定(Uniform)的或是自動的:在自動管理,系統通常是剛開始一個extent8個block,而後逐漸增長;固定大小爲每一個extent都是固定大小的,推薦使用。

字典管理表空間:這種方式是爲了與以前版本兼容而提供的。不推薦使用。

10G裏是不能建立字典管理表空間的,被強制推薦,只能倒入老版本中的字典管理表空間。

3、按使用類型,分爲:

永久段表空間()
臨時段表空間()
回滾段表空間()

永久表空間:
  通常存儲數據的表空間;
  系統表空間,普通用戶使用的表空間都爲永久表空間;
  永久表空間的狀態有三種:讀寫,只讀,脫機;
  只有在永久表空間,才能配置ASSM管理模式;
  能夠設置記錄日誌模式。創建選yes,以便數據庫出問題後進行恢復;
  以設置爲系統默認表空間。這樣,建立用戶時,沒有指定默認表空間,就自動設置爲系統默認表空間;
  設置默認表空間的命令:

  ALTER DATABASE DEFAULT TABLESPACE ;

臨時表空間:
  通常用來排序和建立索引時使用;
  臨時表空間裏不存放實際的數據,因此,即便出了問題,也不須要恢復,並且,也不須要備份,所以也不須要記錄日誌;
  臨時表空間只能使是讀寫模式,並且只能爲手動管理段空間模式;
  能夠設置爲系統默認臨時表空間。這樣,建立用戶時,沒有指定默認臨時表空間,就自動設置爲系統默認臨時表空間,命令以下:

  ALTER DATABASE DEFAULT TEMPORARY TABLESPACE ;

回滾段表空間:
  用來存放修改中數據的原數據;
  回滾段表空間是用來保證數據讀一致性的;
 

4、在永久表空間中按存儲內容方式,分爲:

系統表空間(SYSTEM TABLESPACE)系統輔助表空間(SYSAUX TABLESPACE)非系統表空間

相關文章
相關標籤/搜索