2013-10-08 3 views
7

Как я могу получить информацию обо всех табличных пространствах в моей базе данных в следующем формате.Как получить все имя табличного пространства, выделенный размер, свободный размер, емкость от одного запроса?

TABLESPACE_NAME | FILE_NAME | ALLOCATED_MB | FREE_MB | CAPACITY | 

Есть ли способ сохранить ежедневный размер всего табличного пространства в другой таблице автоматически?. На самом деле мне нужно ежедневно составлять контрольный список в отношении табличного пространства. Поэтому я wan't создать передний конец, который по электронной почте мне детали размера табличного пространства автоматически на основании этой таблицы, которые хранят информацию о размере табличного пространства на ежедневной основе ..

+0

возможно дубликат [Как рассчитать размер таблицы в Oracle] (http://stackoverflow.com/questions/264914/how-do-i-calculate-tables-size-in-oracle) – bgs

+0

Не путайте, я ищу табличные пространства не для размера таблицы. – Regon

ответ

17

Попробуйте выполнить нижеследующий запрос, чтобы получить все данные табличного пространства в oracle. Предполагая, что у вас есть необходимые привилегии для доступа к таблицам dba.

SELECT a.file_name, 
     substr(A.tablespace_name,1,14) tablespace_name, 
     trunc(decode(A.autoextensible,'YES',A.MAXSIZE-A.bytes+b.free,'NO',b.free)/1024/1024) free_mb, 
     trunc(a.bytes/1024/1024) allocated_mb, 
     trunc(A.MAXSIZE/1024/1024) capacity, 
     a.autoextensible ae 
FROM (
    SELECT file_id, file_name, 
      tablespace_name, 
      autoextensible, 
      bytes, 
      decode(autoextensible,'YES',maxbytes,bytes) maxsize 
    FROM dba_data_files 
    GROUP BY file_id, file_name, 
       tablespace_name, 
       autoextensible, 
       bytes, 
       decode(autoextensible,'YES',maxbytes,bytes) 
    ) a, 
    (SELECT file_id, 
      tablespace_name, 
      sum(bytes) free 
     FROM dba_free_space 
     GROUP BY file_id, 
       tablespace_name 
    ) b 
WHERE a.file_id=b.file_id(+) 
AND A.tablespace_name=b.tablespace_name(+) 
ORDER BY A.tablespace_name ASC; 
+0

С некоторой модификацией этот запрос работает отлично, но есть ли способ сохранить эту информацию в другой таблице, а затем автоматически запускает «Вставить запрос». – Regon

+0

В настоящее время я не думаю, что есть возможность сохранить информацию автоматически. – Dba

+0

Вместо этого вы можете создать процедуру для сравнения разницы в размере табличного пространства и запускать ее ежедневно, используя 'dbms_scheduler'. – Dba

1

В Oracle см ниже ссылке:

How do I calculate tables size in Oracle

https://forums.oracle.com/thread/2160787

COLUMN TABLE_NAME FORMAT A32 
COLUMN OBJECT_NAME FORMAT A32 
COLUMN OWNER FORMAT A10 

SELECT 
    owner, table_name, TRUNC(sum(bytes)/1024/1024) Meg 
FROM 
(SELECT segment_name table_name, owner, bytes 
FROM dba_segments 
WHERE segment_type = 'TABLE' 
UNION ALL 
SELECT i.table_name, i.owner, s.bytes 
FROM dba_indexes i, dba_segments s 
WHERE s.segment_name = i.index_name 
AND s.owner = i.owner 
AND s.segment_type = 'INDEX' 
UNION ALL 
SELECT l.table_name, l.owner, s.bytes 
FROM dba_lobs l, dba_segments s 
WHERE s.segment_name = l.segment_name 
AND s.owner = l.owner 
AND s.segment_type = 'LOBSEGMENT' 
UNION ALL 
SELECT l.table_name, l.owner, s.bytes 
FROM dba_lobs l, dba_segments s 
WHERE s.segment_name = l.index_name 
AND s.owner = l.owner 
AND s.segment_type = 'LOBINDEX') 
WHERE owner in UPPER('&owner') 
GROUP BY table_name, owner 
HAVING SUM(bytes)/1024/1024 > 10 /* Ignore really small tables */ 
ORDER BY SUM(bytes) desc 
; 

В SQL см ниже

Get size of all tables in database

+0

Спасибо, Это точно я ищу, но я не буду перечислять все табличные пространства, а не пространство таблиц. – Regon

0
Select a.tablespace_name,a.file_name,a.bytes/1024/1024 TABLESPACE_SIZE_MB, 
Sum(b.bytes)/1024/1024 FREE_IN_MB from dba_free_space b,dba_data_files a 
Where a.tablespace_name = b.tablespace_name 
AND a.file_id = b.file_id 
GROUP by a.tablespace_name, a.file_name,a.bytes/1024/1024 
Order by a.tablespace_name, a.file_name; 

вы можете запустить этот запрос, это может помочь.

0

Выше являются полезными. Надеюсь, что это может также полезно здесь:

https://ora-data.blogspot.in/2016/12/how-to-find-details-of-tablespace.html

Проверьте детали TABLESPACE с различной командой, выше команды может не работать:

SQL>select round((bytes/1024)/1024,0) "Used Space(MB)", 
round(total,0) "Allocated size(MB)", 
round(max,0) "Maximum allowable(MB)", 
round(max-(BYTES/1024)/1024,0) "Effective free(MB)", 
round(((max-(BYTES/1024)/1024)/max)*100,2) "FREE(%)" 
from SYS.SM$TS_USED, 
(select sum((BYTES/1024)/1024) total, sum((decode(MAXBYTES,0,bytes,maxbytes)/1024)/1024) max 
from dba_data_files where tablespace_name='&1') where tablespace_name='&1'; 
Смежные вопросы