web-dev-qa-db-ja.com

SQLクエリでOracleスキーマサイズを表示する方法は?

70以上のテーブルを持つOracleスキーマがあります。テーブルが占有するHDDスペースを表示できるシンプルなページを作成したい。 SQLクエリでこの値を取得するにはどうすればよいですか?

P.Sそして、どのようにOracleアーキテクチャバージョンを入手できますか?

20
Peter Penzov

あなたはおそらく欲しい

SELECT sum(bytes)
  FROM dba_segments
 WHERE owner = <<owner of schema>>

スキーマ所有者としてログインしている場合は、次のこともできます。

SELECT SUM(bytes)
  FROM user_segments

これにより、ユーザーが所有するオブジェクトに割り当てられたスペースが、どのテーブルスペースにあるかがわかります。これらのクエリによって割り当てられたものとしてカウントされるテーブルに割り当てられた空のスペースがある場合があります。

44
Justin Cave

テーブルスペースの空き領域とインデックスなしでスキーマサイズを計算したいだけの場合:

select
   sum(bytes)/1024/1024 as size_in_mega,
   segment_type
from
   dba_segments
where
   owner='<schema's owner>'
group by
   segment_type;

すべてのスキーマ用

select
   sum(bytes)/1024/1024 as size_in_mega, owner
from
   dba_segments
group by
  owner;
9
biology.info
select T.TABLE_NAME, T.TABLESPACE_NAME, t.avg_row_len*t.num_rows from dba_tables t
order by T.TABLE_NAME asc

例参照 http://www.dba-Oracle.com/t_script_Oracle_table_size.htm その他のオプション

4
Rostislav Matl
SELECT table_name as Table_Name, row_cnt as Row_Count, SUM(mb) as Size_MB
FROM
  (SELECT in_tbl.table_name,   to_number(extractvalue(xmltype(dbms_xmlgen.getxml('select count(*) c from ' ||ut.table_name)),'/ROWSET/ROW/C')) AS row_cnt , mb
FROM
(SELECT CASE WHEN lob_tables IS NULL THEN table_name WHEN lob_tables IS NOT NULL THEN lob_tables END AS table_name , mb
FROM (SELECT ul.table_name AS lob_tables, us.segment_name AS table_name , us.bytes/1024/1024 MB FROM user_segments us
LEFT JOIN user_lobs ul ON us.segment_name = ul.segment_name ) ) in_tbl INNER JOIN user_tables ut ON in_tbl.table_name = ut.table_name ) GROUP BY table_name, row_cnt ORDER BY 3 DESC;``

上記のクエリは、特定のユーザーのTable_name、Row_count、Size_in_MB(lob列サイズを含む)を提供します。

3
Bhaskar
SELECT DS.TABLESPACE_NAME, SEGMENT_NAME, ROUND(SUM(DS.BYTES) / (1024 * 1024)) AS MB
    FROM DBA_SEGMENTS DS
    WHERE SEGMENT_NAME IN (SELECT TABLE_NAME FROM DBA_TABLES) AND SEGMENT_NAME='YOUR_TABLE_NAME'
    GROUP BY DS.TABLESPACE_NAME, SEGMENT_NAME;
0
Dilip Paudel