DBA_TABLES テーブル一覧
基本的にはDBA_TABLESを参照すれば良いです。注意点としてそのまま一覧出力した場合、マテリアライズド・ビュー(マテビュー本体に加え、マテビュー用ログテーブルも)が含まれる点です。またテーブル毎の表領域を調べたい場合、パーティションテーブルについてはDBA_TAB_PARTITIONSと結合しないと取得できません。そのためテーブル一覧といえど要求によっていろいろ求め方が変わってきます。以下4パターン用意してみました。
No. | 一覧名 | 表示条件 |
---|---|---|
1 | 一般テーブル | マテビュー、マテビューログテーブル、パーティションテーブルを除く一覧。 |
2 | テーブル(パーティションテーブル含む) | マテビュー、マテビューログテーブルを除く一覧。パーティションテーブルについては、パーティション毎のサイズ合計、代表(max値)パーティションの表領域を出力 |
3 | パーティション | パーティション毎の一覧 |
4 | 全てのテーブル | マテビュー、マテビューログテーブル、パーティションテーブルを含む全てのテーブル一覧。(パーティションテーブルについてはパーティション毎のサイズ合計、代表(max値)パーティションの表領域を出力 |
DBA_TABLESを参照する際に注意する事
- DBA_TABLES単体では通常のテーブルとマテビューの区別がつかない
- マテビューログテーブルも含まれるため求める
- マテビュー、マテビューログを除くテーブル一覧を求める場合DBA_MVIEWS、DBA_MVIEW_LOGSと結合する必要がある。
- パーティションテーブルの表領域は保持しないため求める場合DBA_TAB_PARTITIONSをさらに結合する必要がある。
一般テーブル一覧
一般テーブル一覧出力SQL
マテビュー、マテビューログテーブル、パーティションテーブルを除くテーブル一覧を出力します。以下は’DABADA’スキーマに絞っていますが、適宜変更して使ってください。
select t.OWNER,t.TABLE_NAME,c.COMMENTS,t.LOGGING ,t.TEMPORARY ,s.BYTES/1024/1024 M_BYTE -- サイズ from DBA_TABLES t left outer join DBA_TAB_COMMENTS c on t.OWNER = c.OWNER and t.TABLE_NAME = c.TABLE_NAME and c.TABLE_TYPE ='TABLE' left outer join DBA_SEGMENTS s on t.OWNER = s.OWNER and t.TABLE_NAME = s.SEGMENT_NAME and s.SEGMENT_TYPE = 'TABLE' where t.OWNER='DABADA' and not exists -- マテビューを除く (select 'X' from DBA_MVIEWS v where t.OWNER = v.OWNER and t.TABLE_NAME = v.MVIEW_NAME) and not exists -- マテビューログテーブルを除く (select 'X' from DBA_MVIEW_LOGS l where t.OWNER = l.LOG_OWNER and t.TABLE_NAME = l.LOG_TABLE) and t.PARTITIONED='NO' -- パーティションテーブルを除く order by t.OWNER,t.TABLE_NAME ;
一般テーブル一覧出力例
サイズが表示されていないテーブルはCREATE TABLE後一度もセグメント作成(エクステント割り当て)が行われていない(遅延セグメント作成と呼ばれる機能によるもの)ためです。
LOGG TEMPO
OWNER TABLE_NAME COMMENTS ING RARY M_BYTE
-------- ---------------- -------------------------------- ---- ----- ----------
DABADA OY_PREFECTURE 都道府県マスタ NO N .0625
DABADA OY_REGION 地域マスタ NO N .0625
DABADA TABINF テーブル情報 NO Y
DABADA TBL26 テーブル26 NO N 176
DABADA TBL29 一般テーブルサンプルデータ無 NO N
DABADA TBL304 一般テーブルサンプル304 YES N
DABADA TEMP100 一時表サンプル NO Y
7行が選択されました。
SQL>
SQL*Plus表示用
set lin 300 set pages 100 COLUMN OWNER FORMAT A8 COLUMN TABLE_NAME FORMAT A16 COLUMN COMMENTS FORMAT A32 COLUMN TABLESPACE_NAME FORMAT A12 COLUMN TEMPORARY FORMAT A5 COLUMN TEMPORARY HEADING 'TEMPO|RARY' COLUMN LOGGING FORMAT A4 COLUMN LOGGING HEADING 'LOGG|ING'
テーブル一覧(パーティションテーブル含む)
テーブル一覧出力(パーティションテーブル含む)SQL
マテビュー、マテビューログテーブル、パーティションテーブルを除くテーブル一覧を出力します。以下は’DABADA’スキーマに絞っていますが、適宜変更して使ってください。
select t.OWNER,t.TABLE_NAME,c.COMMENTS ,decode(t.PARTITIONED,'YES',p.LOGGING,t.LOGGING) LOGGING ,t.TEMPORARY,t.PARTITIONED,b.PARTITIONING_TYPE,b.SUBPARTITIONING_TYPE ,decode(t.PARTITIONED,'YES',p.M_BYTE,s.BYTES/1024/1024) M_BYTE from dba_tables t left outer join dba_tab_comments c on t.OWNER = c.OWNER and t.TABLE_NAME = c.TABLE_NAME and c.TABLE_TYPE ='TABLE' left outer join dba_segments s on t.OWNER = s.OWNER and t.TABLE_NAME = s.SEGMENT_NAME and s.SEGMENT_TYPE = 'TABLE' left outer join ( select w.TABLE_OWNER,w.TABLE_NAME,max(w.TABLESPACE_NAME) TABLESPACE_NAME ,sum(w.BYTES) / 1024/1024 M_BYTE,max(w.LOGGING) logging from ( select t.TABLE_OWNER,t.TABLE_NAME,t.PARTITION_NAME,t.HIGH_VALUE ,t.PARTITION_POSITION,t.TABLESPACE_NAME,t.LOGGING,s.BYTES from DBA_TAB_PARTITIONS t left outer join dba_segments s on t.TABLE_OWNER = s.OWNER and t.PARTITION_NAME = s.PARTITION_NAME where t.TABLE_OWNER ='DABADA' ) w group by w.TABLE_OWNER,w.TABLE_NAME ) p on t.OWNER = p.TABLE_OWNER and t.TABLE_NAME = p.TABLE_NAME left outer join DBA_PART_TABLES b on t.OWNER = b.OWNER and t.TABLE_NAME = b.TABLE_NAME where t.OWNER='DABADA' and not exists -- マテビューを除く (select 'X' from DBA_MVIEWS v where t.OWNER = v.OWNER and t.TABLE_NAME = v.MVIEW_NAME) and not exists -- マテビューログテーブルを除く (select 'X' from DBA_MVIEW_LOGS l where t.OWNER = l.LOG_OWNER and t.TABLE_NAME = l.LOG_TABLE) order by t.OWNER,t.TABLE_NAME ;
一覧出力例
LOGG TEMPO PARTI PART. SUBPART.
OWNER TABLE_NAME COMMENTS ING RARY TIONED TYPE TYPE M_BYTE
-------- ---------------- -------------------------------- ---- ----- ------ -------- -------- ----------
DABADA EX02_LIST エリア別実績 NO N YES LIST NONE 16
DABADA OY_PREFECTURE 都道府県マスタ NO N NO .0625
DABADA OY_REGION 地域マスタ NO N NO .0625
DABADA PTRENGEEX01 レンジパーティションサンプル NO N YES RANGE NONE 224
DABADA TABINF テーブル情報 NO Y NO
DABADA TBL26 テーブル26 NO N NO 176
DABADA TBL29 一般テーブルサンプルデータ無 NO N NO
DABADA TBL304 一般テーブルサンプル304 YES N NO
DABADA TEMP100 一時表サンプル NO Y NO
9行が選択されました。
SQL>
SQL*Plus表示用
set lin 300 set pages 100 COLUMN OWNER FORMAT A8 COLUMN TABLE_NAME FORMAT A16 COLUMN COMMENTS FORMAT A32 COLUMN TABLESPACE_NAME FORMAT A12 COLUMN TEMPORARY FORMAT A5 COLUMN TEMPORARY HEADING 'TEMPO|RARY' COLUMN LOGGING FORMAT A4 COLUMN LOGGING HEADING 'LOGG|ING' COLUMN COMMENTS FORMAT A32 COLUMN PARTITIONED FORMAT A6 COLUMN PARTITIONED HEADING 'PARTI|TIONED' COLUMN PARTITIONING_TYPE FORMAT A8 COLUMN PARTITIONING_TYPE HEADING 'PART.|TYPE' COLUMN SUBPARTITIONING_TYPE FORMAT A8 COLUMN SUBPARTITIONING_TYPE HEADING 'SUBPART.|TYPE'
パーティション一覧
パーティション毎の一覧出力SQL
select t.TABLE_OWNER,t.TABLE_NAME,t.PARTITION_POSITION,t.PARTITION_NAME --,t.HIGH_VALUE ,t.TABLESPACE_NAME,t.LOGGING ,s.BYTES/1024/1024 M_BYTE from DBA_TAB_PARTITIONS t left outer join dba_segments s on t.TABLE_OWNER = s.OWNER and t.TABLE_NAME = s.SEGMENT_NAME and t.PARTITION_NAME = s.PARTITION_NAME and s.SEGMENT_TYPE='TABLE PARTITION' where t.TABLE_OWNER='DABADA' order by t.TABLE_OWNER,t.TABLE_NAME,t.PARTITION_POSITION ;
一覧出力例
PARTITION PARTITION TABLESPACE
TABLE_OW TABLE_NAME POSITION NAME NAME LOGGING M_BYTE
-------- ---------------- --------- ---------- ---------- -------------- ----------
DABADA EX02_LIST 1 AREA_01 TBS02 NO
DABADA EX02_LIST 2 AREA_02 TBS02 NO 8
DABADA EX02_LIST 3 AREA_03 TBS02 NO 8
DABADA EX02_LIST 4 AREA_04 TBS02 NO
DABADA EX02_LIST 5 AREA_05 TBS02 NO
DABADA EX02_LIST 6 AREA_06 TBS02 NO
DABADA EX02_LIST 7 AREA_07 TBS02 NO
DABADA EX02_LIST 8 AREA_08 TBS02 NO
DABADA PTRENGEEX01 1 DAY1 TBS02 NO
DABADA PTRENGEEX01 2 DAY2 TBS02 NO 48
DABADA PTRENGEEX01 3 DAY3 TBS02 NO
DABADA PTRENGEEX01 4 DAY4 TBS02 NO 176
12行が選択されました。
SQL>
SQL*Plus表示用
set lin 300 set pages 100 COLUMN TABLE_OWNER FORMAT A8 COLUMN TABLE_NAME FORMAT A16 COLUMN PARTITION_POSITION FORMAT 99 COLUMN PARTITION_POSITION HEADING 'PARTITION|POSITION' COLUMN PARTITION_NAME FORMAT A10 COLUMN PARTITION_NAME HEADING 'PARTITION|NAME' COLUMN TABLESPACE_NAME FORMAT A10 COLUMN TABLESPACE_NAME HEADING 'TABLESPACE|NAME'
全てのテーブル一覧
全てのテーブル一覧出力SQL
以下はDABADAスキーマが持つ、マテビュー、マテビューログテーブル、パーティションテーブルを含む全てのテーブル一覧。(パーティションテーブルについてはパーティション毎のサイズ合計、代表(max値)パーティションの表領域を出力。いくつものディクショナリビューを結合するので少し重くなります。
select t.OWNER,t.TABLE_NAME ,decode(t.PARTITIONED,'YES',p.TABLESPACE_NAME,t.TABLESPACE_NAME) TABLESPACE_NAME ,decode(v.MVIEW_NAME,null,c.COMMENTS,mc.COMMENTS) comments ,decode(v.MVIEW_NAME,null,'TABLE','MVIEW') TYPE ,t.PARTITIONED ,decode(t.PARTITIONED,'YES',p.LOGGING,t.LOGGING) LOGGING ,t.TEMPORARY ,decode(t.PARTITIONED,'YES',p.M_BYTE,s.BYTES/1024/1024) M_BYTE from DBA_TABLES t left outer join DBA_TAB_COMMENTS c on t.OWNER = c.OWNER and t.TABLE_NAME = c.TABLE_NAME and c.TABLE_TYPE ='TABLE' left outer join DBA_MVIEW_COMMENTS mc on t.OWNER = mc.OWNER and t.TABLE_NAME = mc.MVIEW_NAME left outer join DBA_SEGMENTS s on t.OWNER = s.OWNER and t.TABLE_NAME = s.SEGMENT_NAME and s.SEGMENT_TYPE='TABLE' left outer join DBA_MVIEWS v on t.OWNER = v.OWNER and t.TABLE_NAME = v.MVIEW_NAME left outer join ( select w.TABLE_OWNER,w.TABLE_NAME,max(w.TABLESPACE_NAME) TABLESPACE_NAME ,sum(w.BYTES) / 1024/1024 M_BYTE,max(w.LOGGING) logging from ( select t.TABLE_OWNER,t.TABLE_NAME,t.PARTITION_NAME,t.HIGH_VALUE ,t.PARTITION_POSITION,t.TABLESPACE_NAME,t.LOGGING,s.BYTES from DBA_TAB_PARTITIONS t left outer join dba_segments s on t.TABLE_OWNER = s.OWNER and t.PARTITION_NAME = s.PARTITION_NAME where t.TABLE_OWNER ='DABADA' ) w group by w.TABLE_OWNER,w.TABLE_NAME ) p on t.OWNER = p.TABLE_OWNER and t.TABLE_NAME = p.TABLE_NAME where t.OWNER ='DABADA' order by t.OWNER,t.TABLE_NAME ;
一覧出力例
TABLESPACE PARTI LOGG TEMPO
OWNER TABLE_NAME NAME COMMENTS TYPE TIONED ING RARY M_BYTE
-------- -------------------- ---------- -------------------------------- ------ ------ ---- ----- ----------
DABADA EX02_LIST TBS02 エリア別実績 TABLE YES NO N 16
DABADA MLOG$_OY_PREFECTURE TBS02 OY_PREFECTUREログ TABLE NO NO N .0625
DABADA MLOG$_OY_REGION TBS02 OY_REGIONログ TABLE NO NO N .0625
DABADA OY_PREFECTURE TBS02 都道府県マスタ TABLE NO NO N .0625
DABADA OY_REGION TBS02 地域マスタ TABLE NO NO N .0625
DABADA PREFECTURE_F_MMV TBS02 都道府県マスタON COMMIT版 MVIEW NO NO N .0625
DABADA PREFECTURE_MMV TBS02 都道府県MMV MVIEW NO NO N .0625
DABADA PTRENGEEX01 TBS02 レンジパーティションサンプル TABLE YES NO N 224
DABADA TABINF テーブル情報 TABLE NO NO Y
DABADA TBL26 TBS02 テーブル26 TABLE NO NO N 176
DABADA TBL29 TBS02 一般テーブルサンプルデータ無 TABLE NO NO N
DABADA TBL304 TBS01 一般テーブルサンプル304 TABLE NO YES N
DABADA TEMP100 一時表サンプル TABLE NO NO Y
13行が選択されました。
SQL>
SQL*Plus表示用
set lin 300 set pages 100 COLUMN OWNER FORMAT A8 COLUMN TABLE_NAME FORMAT A20 COLUMN TABLESPACE_NAME FORMAT A10 COLUMN TABLESPACE_NAME HEADING 'TABLESPACE|NAME' COLUMN COMMENTS FORMAT A32 COLUMN TYPE FORMAT A6 COLUMN PARTITIONED FORMAT A3 COLUMN LOGGING FORMAT A3 COLUMN TEMPORARY FORMAT A3 COLUMN TABLE_OWNER FORMAT A8 COLUMN PARTITION_POSITION FORMAT 99 COLUMN PARTITION_POSITION HEADING 'PARTITION|POSITION' COLUMN PARTITION_NAME FORMAT A8 COLUMN HIGH_VALUE FORMAT A56 COLUMN PARTITIONING_TYPE FORMAT A8 COLUMN SUBPARTITIONING_TYPE FORMAT A8 COLUMN PARTITIONING_TYPE HEADING 'PART.|TYPE' COLUMN SUBPARTITIONING_TYPE HEADING 'SUBPART.|TYPE' COLUMN PARTITIONED FORMAT A6 COLUMN PARTITIONED HEADING 'PARTI|TIONED' COLUMN TEMPORARY FORMAT A5 COLUMN TEMPORARY HEADING 'TEMPO|RARY' COLUMN LOGGING FORMAT A4 COLUMN LOGGING HEADING 'LOGG|ING'