在Oracle中查詢表的大小和資料表空間的大小

來源:互聯網
上載者:User

有兩種含義的表大小。一種是分配給一個表的物理空間數量,而不管空間是否被使用。可以這樣查詢獲得位元組數:

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

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;
  1、查看Oracle資料庫中資料表空間資訊的工具方法:

  使用oracle enterprise manager console工具,這是oracle的用戶端工具,當安裝oracle伺服器或用戶端時會自動安裝此工具,在windows作業系統上完成oracle安裝後,通過下面的方法登入該工具:開始菜單——程式——Oracle-OraHome92——Enterprise Manager Console(單擊)——oracle enterprise manager console登入——選擇‘獨立啟動’單選框——‘確定’ —— ‘oracle enterprise manager console,獨立’ ——選擇要登入的‘執行個體名’ ——彈出‘資料庫連接資訊’ ——輸入’使用者名稱/口令’ (一般使用sys使用者),’串連身份’選擇選擇SYSDBA——‘確定’,這時已經成功登入該工具,選擇‘儲存’ ——資料表空間,會看到如下的介面,該介面顯示了資料表空間名稱,資料表空間類型,區管理類型,以”兆”為單位的資料表空間大小,已使用的資料表空間大小及資料表空間利用率。

  圖1 資料表空間大小及使用率

  2、查看Oracle資料庫中資料表空間資訊的命令方法:

  通過查詢資料庫系統中的資料字典表(data dictionary tables)擷取資料表空間的相關資訊,首先使用用戶端工具串連到資料庫,這些工具可以是SQLPLUS字元工具、TOAD、PL/SQL等,串連到資料庫後執行如下的查詢語句:

  select

  a.a1 資料表空間名稱,

  c.c2 類型,

  c.c3 區管理,

  b.b2/1024/1024 資料表空間大小M,

  (b.b2-a.a2)/1024/1024 已使用M,

  substr((b.b2-a.a2)/b.b2*100,1,5) 利用率

  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;

  該語句通過查詢dba_free_space,dba_data_files,dba_tablespaces這三個資料字典表,得到了資料表空間名稱,資料表空間類型,區管理類型,以”兆”為單位的資料表空間大小,已使用的資料表空間大小及資料表空間利用率。dba_free_space表描述了資料表空間的空閑大小,dba_data_files表描述了資料庫中的資料檔案,dba_tablespaces表描述了資料庫中的資料表空間。

  上面語句中from子句後有三個select語句,每個select語句相當於一個視圖,視圖的名稱分別為a、b、c,通過它們之間的關聯關係,我們得到了資料表空間的相關資訊。

  語句執行結果如下:

   資料表空間名稱 類型 區管理 資料表空間大小M 已使用M 利用率
CWMLITE PERMANENT LOCAL 20 9.375 46.87
DRSYS PERMANENT LOCAL 20 9.6875 48.43
EXAMPLE PERMANENT LOCAL 149.375 149.25 99.91
INDX PERMANENT LOCAL 25 0.0625 0.25
ODM PERMANENT LOCAL 20 9.375 46.87
SYSTEM PERMANENT LOCAL 400 397.375 99.34
TOOLS PERMANENT LOCAL 10 6.0625 60.62
UNDOTBS1 UNDO LOCAL 200 5.9375 2.968
USERS PERMANENT LOCAL 25 0.0625 0.25
XDB PERMANENT LOCAL 38.125 37.9375 99.5
  上面描述中分別介紹了查看Oracle資料庫中資料表空間資訊的工具方法和命令方法。

  1、查看Oracle資料庫中資料檔案資訊的工具方法:

  使用上面介紹過的方法登入oracle enterprise manager console工具,選擇‘儲存’ ——資料檔案,會看到如下的介面,該介面顯示了資料檔案名稱,資料表空間名稱,以”兆”為單位的資料檔案大小,已使用的資料檔案大小及資料檔案利用率。

  

  圖2 資料檔案大小及使用率

        2、查看Oracle資料庫中資料檔案資訊的命令方法:

  通過查詢資料庫系統中的資料字典表(data dictionary tables)擷取資料檔案的相關資訊,首先使用用戶端工具串連到資料庫,這些工具可以是SQLPLUS字元工具、TOAD、PL/SQL等,串連到資料庫後執行如下的查詢語句:

  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

  語句執行結果如下:

   物理檔案名稱 資料表空間 大小M 已使用M 利用率
G:\ORACLE\ORADATA\ORA92\CWMLITE01.DBF CWMLITE 20 9.375 46.87
G:\ORACLE\ORADATA\ORA92\DRSYS01.DBF DRSYS 20 9.6875 48.43
G:\ORACLE\ORADATA\ORA92\EXAMPLE01.DBF EXAMPLE 149.375 149.25 99.91
G:\ORACLE\ORADATA\ORA92\INDX01.DBF INDX 25 0.0625 0.25
G:\ORACLE\ORADATA\ORA92\ODM01.DBF ODM 20 9.375 46.87
G:\ORACLE\ORADATA\ORA92\SYSTEM01.DBF SYSTEM 400 397.375 99.34
G:\ORACLE\ORADATA\ORA92\TOOLS01.DBF TOOLS 10 6.0625 60.62
G:\ORACLE\ORADATA\ORA92\UNDOTBS01.DBF UNDOTBS1 200 5.9375 2.968
G:\ORACLE\ORADATA\ORA92\USERS01.DBF USERS 25 0.0625 0.25
G:\ORACLE\ORADATA\ORA92\XDB01.DBF XDB 38.125 37.9375 99.5
  上明描述中分別介紹了查看Oracle資料庫中資料檔案資訊的工具方法和命令方法。

  在oracle資料庫中,暫存資料表空間主要用於使用者在使用order by 、group by語句進行排序和匯總時所需的臨時工作空間。要查詢資料庫中暫存資料表空間的名稱,大小及資料檔案,可以查詢資料字典dba_tablespaces及dba_data_files。命令如下:

  select

  a.talbespace_name 資料表空間名稱,

  b.bytes 大小bytes,

  b.file_name 資料檔案名

  from dba_tablespaces a, dba_data_files b

  Where a.talbespace_name=b.talbespace_name and a.contents=’TEMPORARY’;

  查詢結果如下:

  資料表空間名稱大小bytes資料檔案名

  TEMPONLINEG:\ORACLE\ORADATA\ORA92\TEMP01.DBF

  從oracle 9i開始,可以建立Temporary tablespace類資料表空間,即“臨時“資料表空間,這類資料表空間使用臨時檔案。臨時檔案的資訊被儲存在資料字典V$tempfile中。命令如下:

  Select file#,status,name from V$tempfile;

  查詢資料字典V$tempfile結果如下:

   FILE# status NAME
1 ONLINE G:\ORACLE\ORADATA\ORA92\TEMP01.DBF
  在上面介紹的方法中,建議掌握命令方法,因為你的環境可能沒有圖形工具,而SQLPLUS一般情況下都是可以使用的,有了命令指令碼,很容易得到資料表空間和資料檔案的相關資訊。另外,資料庫管理員應該多整理命令指令碼,在需要時直接執行指令碼以提高工作效率。

  在資料庫管理員的日常工作中,應該經常查詢資料表空間的利用率,按照資料庫系統的具體情況估算資料表空間的增長量,當資料表空間的利用率超過90%時,要及時採取措施,如清理曆史表、曆史資料以釋放空間,向資料表空間中添加新的資料檔案,擴充現有資料檔案大小等方法來降低資料表空間的利用率,避免資料表空間利用率接近100%時,將產生空間不夠的錯誤。

1.查詢oracle資料表空間的使用方式

 select b.file_id  檔案ID,
  b.tablespace_name  資料表空間,
  b.file_name     物理檔案名稱,
  b.bytes       總位元組數,
  (b.bytes-sum(nvl(a.bytes,0)))   已使用,
  sum(nvl(a.bytes,0))        剩餘,
  sum(nvl(a.bytes,0))/(b.bytes)*100 剩餘百分比
  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.file_id,b.bytes
  order by b.tablespace_name

 

2.查詢oracle系統使用者的預設資料表空間和暫存資料表空間

select default_tablespace,temporary_tablespace from dba_users

 

 3.查詢單張表的使用方式

select segment_name,bytes from dba_segments where segment_name = 'RE_STDEVT_FACT_DAY' and owner = USER

RE_STDEVT_FACT_DAY是您要查詢的表名稱

 

4.查詢所有使用者表使用大小的前三十名

select * from (select segment_name,bytes from dba_segments where owner = USER order by bytes desc ) where rownum <= 30

 

5.查詢目前使用者預設資料表空間的使用方式

select tablespacename,sum(totalContent),sum(usecontent),sum(sparecontent),avg(sparepercent)
from
(
SELECT b.file_id as id,b.tablespace_name as tablespacename,b.bytes as totalContent,(b.bytes-sum(nvl(a.bytes,0))) as usecontent,sum(nvl(a.bytes,0)) as sparecontent,sum(nvl(a.bytes,0))/(b.bytes)*100  as sparepercent
FROM dba_free_space a,dba_data_files b
WHERE a.file_id=b.file_id and b.tablespace_name = (select default_tablespace from dba_users where username = user) 
group by b.tablespace_name,b.file_name,b.file_id,b.bytes
)
GROUP BY tablespacename

 

6.查詢使用者資料表空間的表

select   *  from user_tables

 

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/cosio/archive/2009/03/11/3978747.aspx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.