[Oracle] 表領域の使用量/空き容量を確認する方法

2017年11月6日

 Oracle の表領域の使用量と空き容量を知る方法について、OEMDC(Oracle Enterprise Manager Database Console)や SI Object Browser などのツールを使って確認するのは容易ですが、SQL*Plus で確認する方法がわからないのことが多いので、その方法のメモ。

 まず大前提として「表領域の現在容量や空き容量という情報はない」です。あるのは「表領域に属する "データファイル" のサイズと空き容量」です。
 さらにはデータファイルについても「現在使用量」という情報はないです。データファイルの現在使用量はデータファイルのサイズから空き容量を差し引いて求めます。

 それを踏まえたうえで、例えば USERS 表領域の使用量を求めるには以下のように求めます。

  1. USERS 表領域に属するデータファイルごとのサイズを表示します。
    select FILE_ID, BYTES, FILE_NAME from DBA_DATA_FILES where TABLESPACE_NAME='USERS';
    
  2. USERS 表領域に属するデータファイルごとの空き領域を表示します。
    select FILE_ID, BYTES from DBA_FREE_SPACE where TABLESPACE_NAME='USERS';
    
  3. これらの合計の差が使用量になりますが、ファイル毎に表示されて面倒なのと、単位が Byte で桁が無駄に多いので、集計して MB で表示します。
    select sum(BYTES) / (1024*1024) from DBA_DATA_FILES where TABLESPACE_NAME='USERS'; --①
    select sum(BYTES) / (1024*1024) from DBA_FREE_SPACE where TABLESPACE_NAME='USERS'; --②
    
  4. 上記で出た数値を差し引けば(①-②)、現在の使用量が求められます。

 表領域ごとに使用量と使用率の一覧が出る…みたいな SQL が欲しい場合は、上記をヒントに自分で作るか、他の色んなサイトで紹介されているのでそちらをどうぞ(汗

 また余談ですが、上記のように迂遠な方法を使わずとも、以下の view を用いて表示する方法もあります。

select * from DBA_TABLESPACE_USAGE_METRICS where TABLESPACE_NAME='USERS';

 これの注意点としては、表示される数値はブロック数(ブロックサイズは show parameter db_block_size で参照)でありバイトではない点と、AUTOEXTEND ON を指定している場合は、現在のデータベースファイルのサイズではなく、理論上の最大(ディスク容量またはデータベースファイルの最大拡張サイズ)が表示される点です。特性を理解したうえで使い分けてください。






カテゴリー: Oracle, データベース

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org