Monitoraggio dell'utilizzo del tablespace in Oracle XE
-
12-11-2019 - |
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?
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;