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

お世話になります。オラクルのSQLについて教えて下さい。

データサイズについて調査したく、下の条件でデータを抽出したいと考えています

-------------------------------------------------所有者はSQLPlusで最初にログインしたユーザの
頭文字が "MY" で始まるオブジェクト全て(テーブル・インデックスなど)のデータサイズ
を知りたいと考えているのですが・・・
-------------------------------------------------
全てのオブジェクトでなくとも、テーブルやインデックスごとのデータサイズを抽出でも
良いのですが、どなたかご教授下さい。

宜しくお願い致します。

A 回答 (3件)

これを参考にして下さい。


テーブルの場合
set linesize 200
set pagesize 1000

select a.TABLE_NAME,a.TABLESPACE_NAME,a.INITIAL_EXTENT,a.NEXT_EXTENT,
b.init_bytes,b.blk_cnt,
tbl_cnt(a.TABLE_NAME),
c.len
from user_tables a,
(select SEGMENT_NAME,TABLESPACE_NAME,max(EXTENT_ID),max(BYTES) as init_bytes,max(BLOCKS) as blk_cnt
from USER_EXTENTS group by SEGMENT_NAME, TABLESPACE_NAME) b,
(select TABLE_NAME,sum(DATA_LENGTH) as len from user_tab_columns group by TABLE_NAME) c
where a.TABLE_NAME = b.SEGMENT_NAME
and a.TABLESPACE_NAME = b.TABLESPACE_NAME
and a.TABLE_NAME = c.TABLE_NAME
order by a.TABLE_NAME

インデックスの場合
set linesize 200
set pagesize 2000

select a.TABLE_NAME,a.INDEX_NAME,a.TABLESPACE_NAME,a.INITIAL_EXTENT,a.NEXT_EXTENT,
b.init_bytes,b.blk_cnt,
tbl_cnt(a.TABLE_NAME),
c.len
from user_indexes a,
(select SEGMENT_NAME,TABLESPACE_NAME,max(EXTENT_ID),max(BYTES) as init_bytes,max(BLOCKS) as blk_cnt
from USER_EXTENTS group by SEGMENT_NAME, TABLESPACE_NAME) b,
(select INDEX_NAME,sum(COLUMN_LENGTH) as len from user_ind_columns group by INDEX_NAME) c
where a.INDEX_NAME = b.SEGMENT_NAME
and a.TABLESPACE_NAME = b.TABLESPACE_NAME
and a.INDEX_NAME = c.INDEX_NAME
order by a.INDEX_NAME

この結果をspool出力してExcelでひらいて集計して下さい。
すいません関数が一つ必要です。
FUNCTION tbl_cnt(
tbl_name IN VARCHAR2
) RETURN NUMBER
IS
num NUMBER;
BEGIN

execute immediate 'select count(*) from ' || tbl_name into num;

RETURN num;

END tbl_cnt;

これを先にコンパイルして下さい。
sqlplusでログイン後に
@関数のファイル名;

以上です
    • good
    • 0

SQL*PLUSでしたか。

失礼しました。
    • good
    • 0

「データサイズ」というのは、割り当てられた容量・ブロック数という意味で良いのでしょうか?


こんな感じでいかがですか?


svrmgrl

connect internal

select SEGMENT_NAME, SEGMENT_TYPE, BYTES, BLOCKS
from dba_segments
where SEGMENT_NAME like 'MY%'
    • good
    • 0

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