- 締切済み
オラクル オブジェクトのデータサイズ抽出SQLについて
お世話になります。オラクルのSQLについて教えて下さい。 データサイズについて調査したく、下の条件でデータを抽出したいと考えています -------------------------------------------------所有者はSQLPlusで最初にログインしたユーザの 頭文字が "MY" で始まるオブジェクト全て(テーブル・インデックスなど)のデータサイズ を知りたいと考えているのですが・・・ ------------------------------------------------- 全てのオブジェクトでなくとも、テーブルやインデックスごとのデータサイズを抽出でも 良いのですが、どなたかご教授下さい。 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- mebun
- ベストアンサー率45% (10/22)
これを参考にして下さい。 テーブルの場合 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でログイン後に @関数のファイル名; 以上です