質問: oracleにて、MySQLで言うところの以下のSQLを作りたいです。 SELECT SUM(FLOOR((INDEX_LENGTH)/1024/1024)) FROM INFORMATION_SCHEMA.TABLES; インデックス領域の使用率を出したいのですが、 oracleにはINFORMATION_SCHEMAがないとのことで困ってます。 ご教示のほど宜しくお願い致します。
回答: 最近Oracleを触ってない上、手元に実行環境がないのでうまく行かなかったらすみません。 Oracleではデータ・ディクショナリを使用して確認することができます。 まず、インデックス用に表領域を作っていますか? 作った覚えがないのであればデフォルトなので作っていない(下記2)を参考にしてください。 1.上記がYes(インデックス専用の表領域を作っている) 確かDBA_TABLESPACE_USAGE_METRICSビューに対してSELECT文を発行してみてください。該当する表領域の使用状況を確認することができたと思います。 2.上記がNo(インデックス専用の表領域を作っていない) このケースは1つの表領域内にテーブルオブジェクトやインデックスオブジェクトが含まれますので、少し面倒です。 なのでセグメント(テーブルやインデックス)単位で使用率を確認する必要があります。※SQLPlus等を使ってsysdbaでログインして実行して下さい。 ``` -- この辺は必要に応じて修正してください SET pagesize 1000 SET linesize 300 COL tablespace_name for a20 COL owner for a10 COL segment_cnt for 999999 COL mb for 999999 -- メイン SELECT sg.tablespace_name, sg.owner, sg.segment_type, COUNT(segment_name) segment_cnt, round(SUM(bytes)/1024/1024) mb FROM dba_segments sg, dba_tablespaces ts WHERE sg.tablespace_name = ts.tablespace_name GROUP BY sg.tablespace_name, sg.owner, sg.segment_type; ``` 以上です。