Domanda

Come dice sul Panoramica Oracle XE Pagina:

Oracle Database XE può essere installato su una macchina host di qualsiasi dimensione con qualsiasi numero di CPU (un database per macchina), ma XE archiverà fino a 4 GB di dati utente, Utilizzare fino a 1 GB di memoria e utilizzare una CPU sulla macchina host.

Ora se voglio monitorare il database per vedere quanti dati dell'utente sono in uso o quanta memoria utilizza il database, come lo farei? È possibile monitorare questi valori dall'applicazione Oracle Express, ma voglio monitorare il database da un sistema di monitoraggio centralizzato. Documentazione Oracle XE Presenta una query che restituisce l'utilizzo dell'area di recupero Flash, quindi immagino che ci sia una query simile anche per l'utilizzo dei dati degli utenti.

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;

Inoltre, cosa succede quando i dati dell'utente sono al di sopra del limite?

È stato utile?

Soluzione

Spudoratamente prelevato dal Oracle FAQ Sito Web, ecco una query che controlla lo spazio utilizzato da TableSpace:

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;

Per impostazione predefinita, i dati dell'utente sono lo spazio utilizzato in USERS tablespace.

Per quanto riguarda ciò che accade quando sei al limite, posso solo indovinare questo:

  • Ne otterrai un po ' pieno Errore quando si tenta di inserire dati (un messaggio di errore Oracle sembra sempre provenire pieno comunque ;-)
  • Potresti avere il più grande assegno della tua vita ...

Altri suggerimenti

Una questione strettamente correlata: uso del tablespace per utente (per scoprire dove sta andando lo spazio):

select owner,tablespace_name,
sum(bytes)/1024/1024 as mbytes
from dba_segments
group by owner,tablespace_name
order by mbytes desc;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top