• 締切済み

オラクルのテーブルの領域について

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

みんなの回答

  • tyurajima
  • ベストアンサー率28% (16/57)
回答No.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バイト × レコード数 ただ、これにブロック数やセクタ数とか違う要素が入ってきて、物理的な容量が求められると思うので、 あくまで、参考にして下さい。 インフラを経験している人の意見を聞きたいものです。

  • MZ-80B
  • ベストアンサー率56% (46/81)
回答No.5

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

  • tyurajima
  • ベストアンサー率28% (16/57)
回答No.4

#3 さんへ 返答が遅くなってすみません。 特に問題はないと思います。 人に聞いた事や、自分で試した事を書いたので・・・ 問題になりそうなところってありました?

  • MZ-80B
  • ベストアンサー率56% (46/81)
回答No.3

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

  • tyurajima
  • ベストアンサー率28% (16/57)
回答No.2

ちょっと長いですが・・・ ------------------------ 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で流すと、テーブルが使用している実領域が表示されます。 (一度、領域を入力するパラメータが表示されます) たぶん、これでよいと思いますが・・・

  • Senna_FF
  • ベストアンサー率45% (153/334)
回答No.1

「USER_TABLES」や「USER_TABLESPACE」ビューで見れたと思うのですが・・・ ※すいません。手元に環境がないのでビューの有無やメンバ内容等がわかりません。 あくまで、参考ということにしてください。

関連するQ&A