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

Oracle(8.0.5以降)で、テーブル毎のサイズを知りたいのですが、どこにその情報はあるのでしょうか?
テーブルが拡張されてそれぞれどの程度のサイズになっているのか、また、何%程度使用しているのか等が知りたいのです。
以前に、Oracleのシステムテーブルにそのような情報をもっていると聞いたことがあるのですが、わかりません。
どなたかわかる方がいましたら、よろしくお願い致します。

A 回答 (3件)

簡単に調べる方法があります。


以下のSQL文をSQL*Plus等で実行してみてください。

select segment_name,trunc(bytes/1024,0) kb
from user_segment
where segment_name='*****'
/

*****に目的のテーブル名を設定します。
テーブルのサイズがKバイト単位で表示されます。
バイト単位で知りたい場合は、trunc(bytes/1024,0)をbytesに
置き換えます。
    • good
    • 1
この回答へのお礼

ありがとうございました。
私が望んでいたそのままの回答でした。

お礼日時:2002/01/10 09:31

No.2の回答に、一部記述の誤りがありました。



[誤]
from user_segment

[正]
from user_segments

"user_segments"以外に、"dba_segments"でもOKです。
    • good
    • 3

以下の方法で表示することができます。


以下の文をサーバマネージャもしくはSQL*Plusで流してください

(1)以下のテーブルを作成する
CREATE TABLE FSPACE
(TABLESPACE_NAME VARCHAR2(30),
ALLOCATED NUMBER,
FREE_TODAY NUMBER,
FREE_YESTERDAY NUMBER,
PERCENT_CHANGED NUMBER,
SYSTEM_DATE DATE)
TABLESPACE usertsp PCTFREE 20 PCTUSED 40
STORAGE(INITIAL 1k NEXT 1k PCTINCREASE 0
MINEXTENTS 1 MAXEXTENTS UNLIMITED);

(2)テーブルの分析を行う
analyze table yosankanri estimate statistics sample 5 percent;

(3)参照したい情報を表示する

--テーブルの空領域、平均行長、追加できるおおよその行数(理論的)
select table_name, empty_blocks*4096 empty_bytes, avg_row_len, empty_blocks*4096*(100-5)/100/avg_row_len more_rows_riron from sys.user_tables where table_name ='テーブル名';

--imageテーブルの空領域、平均行長、追加できるおおよその行数(現実的)
select table_name, empty_blocks*4096 empty_bytes, num_rows*avg_row_len space_in_use, blocks*4096 space_allocated, (blocks*4096 - num_rows*avg_row_len)*(100 - 5)/100/avg_row_len more_rows_real from sys.user_tables where table_name ='テーブル名';

以上のスクリプトを流してください。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

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