Как отобразить размер схемы Oracle с помощью SQL-запроса? - PullRequest
20 голосов
/ 12 марта 2012

У меня есть схема Oracle с более чем 70 таблицами.Я хочу создать простую страницу, которая может отображать пространство жесткого диска, занимаемое таблицами.Как я могу получить это значение с помощью SQL-запроса?

PS И как я могу получить версию архитектуры Oracle?

Ответы [ 5 ]

44 голосов
/ 12 марта 2012

Вы, вероятно, хотите

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

Если вы вошли в систему как владелец схемы, вы также можете

SELECT SUM(bytes)
  FROM user_segments

Это даст вам пространство, выделенное объектам, принадлежащим пользователю, в любых табличных пространствах, в которых они находятся. Может быть пустое пространство, выделенное для таблиц, которое считается как выделенное этими запросами.

9 голосов
/ 28 июля 2016

Если вы просто хотите рассчитать размер схемы без свободного пространства табличного пространства и индексов:

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;
4 голосов
/ 12 марта 2012
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 для получения дополнительных параметров

3 голосов
/ 21 августа 2015
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) конкретного пользователя.

0 голосов
/ 12 февраля 2019
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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...