Как отобразить размер схемы Oracle с SQL-запросом?

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

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

Ответ 1

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

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

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

SELECT SUM(bytes)
  FROM user_segments

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

Ответ 3

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

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

Для всех схем

select
   sum(bytes)/1024/1024 as size_in_mega, owner
from
   dba_segments
group by
  owner;

Ответ 4

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 (включая размер столбца лока) конкретного пользователя.