geek.conf.2

あるインフラエンジニアの備忘録

全表領域のサイズやら使用率やらを求めよう。あとテーブル関係

はい、タイトル通り全表領域の現サイズ、使用量、使用率、空き容量をぱっと出すSQL
以下のサイトで見つけんたんでメモ。

TechWiki iTakahiro(takaBSD) - Oracle

んじゃあ、それを書きますね。


SQL> select a.TABLESPACE_NAME,
min(a.BYTES)/1024/1024 "現サイズ(MB)",
round(min(a.BYTES)/(1024*1024) - sum(b.BYTES)/(1024*1024),2) "使用量(MB)",
round*1/
(min(a.BYTES)/1024/1024)*100,2) "使用率(%)",
round(sum(b.BYTES)/(1024*1024),2) "空き容量(MB)"
from dba_data_files a, dba_free_space b
where a.FILE_ID = b.FILE_ID
group by a.TABLESPACE_NAME;

TABLESPACE_NAME 現サイズ(MB) 使用量(MB) 使用率(%) 空き容量(MB)
------------------------------ ------------ ---------- ---------- ------------
USER1 1024 21.69 2.12 1002.31
USER2 1024 25.88 2.53 998.13
USER3 1024 20.31 1.98 1003.69


がつっと書きましたんで説明します。

現サイズはdba_data_filesという表領域からBYTESというデータファイルサイズの最小値を
選択しています。
空き容量はdba_free_spaceという表領域からBYTESというデータファイルの残りサイズの
合計値を選択しています。

ここまでは当たり前のことを言ってます私。
でまあ、この現サイズと空き容量を使って、使用量と使用率を求めます。

使用量=(現サイズ-空き容量)を2桁に四捨五入したもの

使用率=*2×100を2桁に四捨五入したもの

となります。てか、これもなんか当たり前っちゃー当たり前なんだよな。


以下おまけ

すべてのテーブルを表示
SQL> SELECT owner,table_name,tablespace_name
  FROM all_tables ORDER BY tablespace_name, table_name;

OWNER TABLE_NAME
------------------------------ ------------------------------
TABLESPACE_NAME
------------------------------


自分が所有するテーブルを表示する。

SQL> select * from tab;

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------

*1:min(a.BYTES)/(1024*1024) - sum(b.BYTES)/(1024*1024

*2:四捨五入する前の使用量)÷(現サイズ