
お世話になります。オラクルのSQLについて教えて下さい。
データサイズについて調査したく、下の条件でデータを抽出したいと考えています
-------------------------------------------------所有者はSQLPlusで最初にログインしたユーザの
頭文字が "MY" で始まるオブジェクト全て(テーブル・インデックスなど)のデータサイズ
を知りたいと考えているのですが・・・
-------------------------------------------------
全てのオブジェクトでなくとも、テーブルやインデックスごとのデータサイズを抽出でも
良いのですが、どなたかご教授下さい。
宜しくお願い致します。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.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でログイン後に
@関数のファイル名;
以上です
No.1
- 回答日時:
「データサイズ」というのは、割り当てられた容量・ブロック数という意味で良いのでしょうか?
こんな感じでいかがですか?
svrmgrl
connect internal
select SEGMENT_NAME, SEGMENT_TYPE, BYTES, BLOCKS
from dba_segments
where SEGMENT_NAME like 'MY%'
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SELECTで1件のみ取得するには?
-
oracleのinsert select性能
-
SQL>UPDATEと同時にその件数を...
-
異なるDB間でのJOINやVIEWについて
-
SQL文が浮かびません。
-
Date型にNULLをセットしたい V...
-
SQLでのレコード抽出について、...
-
sqlplusの処理が途中でとまる
-
OracleのSQL*PLUSで、デー...
-
Oracleでの文字列連結サイズの上限
-
GROUP BYを行った後に結合した...
-
ADO VBA 実行時エラー3021
-
Accessで別テーブルの値をフォ...
-
ワードの差込印刷で教えて下さ...
-
"カレントレコードがありません...
-
固有レコード識別子の選択とは
-
実績累計の求め方と意味を教え...
-
SQL文で右から1文字だけ削除す...
-
unionでマージした副問合せを結合
-
SET句内で複数の条件を指定して...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Date型にNULLをセットしたい V...
-
SELECTで1件のみ取得するには?
-
sqlplusの処理が途中でとまる
-
SQL>UPDATEと同時にその件数を...
-
☆☆☆☆SQL Olacle 3つ以上の文字...
-
oracleのinsert select性能
-
文字列を連結した後に1つの変...
-
ORDER BY 半角カナ
-
Accessでテーブル名の変更
-
異なるDB間でのJOINやVIEWについて
-
プロシージャで変数をテーブル...
-
マクロの編集方法を教えて下さい。
-
PostgreSQLで小数点以下を処理...
-
存在するデータの一覧を出すには?
-
AccessVBAでリンクテーブルの参...
-
ACCESSのSQLの書き方
-
PLSQLで変数に格納されたSQL文...
-
時間集計につて
-
オラクル オブジェクトのデー...
-
SELECTについて
おすすめ情報