プロが教えるわが家の防犯対策術!

色々と探してみたのですが、オラクルのDB全体の大きさとか未使用領域を見ることは解ったのですが、個々のテーブルの領域や未使用領域を見る手段があれば教えてください。データを格納している個別テーブルです。
よろしくお願いします。

A 回答 (6件)

#2です。



テーブルの項目属性によって、容量を測る事が可能かもしれません。

属性が文字列の場合、桁数をプラスする。
属性が数値列の場合、桁数を+1をプラスする。
属性が日付列の場合、19をプラスする。

例------------------------
 文字列A  VARCHAR2(10)
 数値列B  NUMBER(10,0)
 日付列C  DATE

の3項目があったとします。
その時の容量は、

 列A   10バイト
 列B   11バイト
 列C   19バイト

計=40バイト × レコード数

これで総バイト数が出ると思うので、その値からキロバイト・メガバイトを割り出せばいいのでは・・・
だめですかね?

ただ、VARCHARは、データを格納した後に開放されると思うので、
実際に格納されているデータの桁数の平均値をだし、その値を参考にした方がよいかもしれません。

例------------------------
 列Aの桁数が
  レコード1=10バイト
  レコード2= 3バイト
  レコード3= 8バイト

の場合、(10+3+8)/3=7バイト
 列A    7バイト
 列B   11バイト
 列C   19バイト

計=37バイト × レコード数


ただ、これにブロック数やセクタ数とか違う要素が入ってきて、物理的な容量が求められると思うので、
あくまで、参考にして下さい。

インフラを経験している人の意見を聞きたいものです。
    • good
    • 0

こんにちは #3 です



大したことではないのですが
#2 さんが記載されているスクリプトについて
自分がオリジナルを書かれたという場合や転載可能と判断された内容のものであれば、特に問題はございません。
ただ、同一と思われるスクリプトが海外の Web 上に公開されています。

もしオリジナルでなければ、何かしらのコメントを書いておいた方がよろしいのではないかと思った次第です。
    • good
    • 0

#3 さんへ



返答が遅くなってすみません。

特に問題はないと思います。
人に聞いた事や、自分で試した事を書いたので・・・
問題になりそうなところってありました?
    • good
    • 0

#2 さんへ


横槍ですいませんが投稿された内容について
著作権への配慮は問題ありませんか?
    • good
    • 0

ちょっと長いですが・・・


------------------------
set pagesize 1000
set pause off
set verify off
--
define in_tsname=&tablespace_name
set linesize 100
col tn format a10 heading 'Name' trunc
col fn format a45 heading 'Located in file_ID + File Name'
col bts format a12 heading 'Size'
col used format a12 heading 'Used'
col ex format 9999 headin 'NrExt'
col rs format 999,999,999 heading 'RBSsize'
col init format 9,999,999 heading 'Init'
col next format 9,999,999 heading 'Next'
col mi format 999 heading 'Min'
col ma format 999 heading 'Max'
col pct format 990 heading '%Inc'
col st format a4 heading 'Stat'
col sn format a15 heading 'Segm Name'
col ts format a15 heading 'In Table Space'
select d.tablespace_name tn,
f.file_id||' '||file_name fn,
to_char(f.bytes/1024,'9,999,999')||'K' bts,
to_char( (f.bytes - nvl(s.free_bytes,0))/1024,'9,999,999')||'K' used
from sys.dba_tablespaces d, sys.dba_data_files f,
(select file_id, sum(bytes) free_bytes
from sys.dba_free_space
group by file_id) s
where d.tablespace_name = f.tablespace_name
and f.file_id = s.file_id (+)
and d.tablespace_name like '&in_tsname%'
order by d.tablespace_name, f.file_id;


define part1="rpad('|',29*(f.bytes-nvl(s.free_bytes,0))/f.bytes,'*')"
col gr format a30 heading 'Percent full'
select d.tablespace_name tn,
d.initial_extent init,
d.next_extent next,
d.pct_increase pct,
d.min_extents mi, max_extents ma,
decode(d.status,'ONLINE','OnL','OFFLINE','OffL') st,
rpad(&part1,29,' ')||'|' gr
from sys.dba_tablespaces d, sys.dba_data_files f,
(select file_id, sum(bytes) free_bytes
from sys.dba_free_space
group by file_id) s
where d.tablespace_name = f.tablespace_name
and f.file_id = s.file_id (+)
and d.tablespace_name like '&in_tsname%'
order by d.tablespace_name, f.file_id;
------------------------
上記をSQL*PLUSで流すと、テーブルが使用している実領域が表示されます。
(一度、領域を入力するパラメータが表示されます)

たぶん、これでよいと思いますが・・・
    • good
    • 0

「USER_TABLES」や「USER_TABLESPACE」ビューで見れたと思うのですが・・・



※すいません。手元に環境がないのでビューの有無やメンバ内容等がわかりません。
あくまで、参考ということにしてください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す