1. 程式人生 > >Oracle中查詢表的大小、表的佔用情況和表空間的大小

Oracle中查詢表的大小、表的佔用情況和表空間的大小

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

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