1. 程式人生 > >在Oracle中查詢表的大小和表空間的大小 .

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

  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