Мониторинг использования табличного пространства в Oracle XE - PullRequest
4 голосов
/ 27 марта 2011

Как сказано на странице обзора Oracle XE :

Oracle Database XE можно установить на хост-компьютере любого размера с любым количеством процессоров (одна база данных на машину), но XE будет хранить до 4 ГБ пользовательских данных , использовать до 1 ГБ памяти, и использовать один процессор на хост-компьютере.

Теперь, если я хочу отслеживать базу данных, чтобы увидеть, сколько пользовательских данных используется или сколько памяти использует база данных, как бы я это сделал? Можно контролировать эти значения из Oracle Application Express, но я хочу отслеживать базу данных из централизованной системы мониторинга. Документация по Oracle XE представляет запрос, который возвращает использование Flash Recovery Area, поэтому я предполагаю, что существует аналогичный запрос и для использования пользовательских данных.

SELECT
NAME,
TO_CHAR(SPACE_LIMIT, '999,999,999,999') AS SPACE_LIMIT,
TO_CHAR(SPACE_LIMIT - SPACE_USED + SPACE_RECLAIMABLE,'999,999,999,999')
   AS SPACE_AVAILABLE,
ROUND((SPACE_USED - SPACE_RECLAIMABLE)/SPACE_LIMIT * 100, 1)
   AS PERCENT_FULL
FROM V$RECOVERY_FILE_DEST;

Кроме того, что происходит, когда пользовательские данные превышают лимит?

Ответы [ 2 ]

5 голосов
/ 27 марта 2011

Бесстыдно взято с веб-сайта Oracle FAQ . Вот запрос, проверяющий используемое пространство по табличному пространству:

SELECT /* + RULE */  df.tablespace_name "Tablespace",
       df.bytes / (1024 * 1024) "Size (MB)",
       SUM(fs.bytes) / (1024 * 1024) "Free (MB)",
       Nvl(Round(SUM(fs.bytes) * 100 / df.bytes),1) "% Free",
       Round((df.bytes - SUM(fs.bytes)) * 100 / df.bytes) "% Used"
  FROM dba_free_space fs,
       (SELECT tablespace_name,SUM(bytes) bytes
          FROM dba_data_files
         GROUP BY tablespace_name) df
 WHERE fs.tablespace_name (+)  = df.tablespace_name
 GROUP BY df.tablespace_name,df.bytes
UNION ALL
SELECT /* + RULE */ df.tablespace_name tspace,
       fs.bytes / (1024 * 1024),
       SUM(df.bytes_free) / (1024 * 1024),
       Nvl(Round((SUM(fs.bytes) - df.bytes_used) * 100 / fs.bytes), 1),
       Round((SUM(fs.bytes) - df.bytes_free) * 100 / fs.bytes)
  FROM dba_temp_files fs,
       (SELECT tablespace_name,bytes_free,bytes_used
          FROM v$temp_space_header
         GROUP BY tablespace_name,bytes_free,bytes_used) df
 WHERE fs.tablespace_name (+)  = df.tablespace_name
 GROUP BY df.tablespace_name,fs.bytes,df.bytes_free,df.bytes_used
 ORDER BY 4 DESC;

По умолчанию пользовательские данные - это пространство, используемое в USERS tablespace.

Что касается того, что происходит, когда вы находитесь на пределе, я могу только догадываться, что:

  • Вы получите ошибку out of space , когдапытаясь вставить данные (какое-то сообщение об ошибке Oracle всегда появляется из из-за нехватки в любом случае; -)
  • Возможно, вас ждет самая большая проверка в вашей жизни ...
1 голос
/ 28 апреля 2015

тесно связанный вопрос: использование табличного пространства пользователем (чтобы выяснить, куда оно направляется):

select owner,tablespace_name,
sum(bytes)/1024/1024 as mbytes
from dba_segments
group by owner,tablespace_name
order by mbytes desc;
...