正如Oracle XE overview page上所述:
Oracle数据库XE可以安装在具有任意数量CPU的任何大小的主机上(每台机器一个数据库),但XE将存储最多4GB的用户数据,最多可使用1GB的内存,并在主机上使用一个CPU。
现在,如果我想监视数据库以查看正在使用的用户数据量或数据库使用的内存量,我该怎么做?可以从Oracle Application Express监视这些值,但我想从集中监视系统监视数据库。 Oracle XE documentation提供了一个返回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;
此外,当用户数据超出限制时会发生什么?
答案 0 :(得分:5)
从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
表空间中使用的空间。
至于你达到极限时会发生什么,我只能猜到:
答案 1 :(得分:1)
密切相关的问题:用户使用的表空间(以找出空间的去向):
select owner,tablespace_name,
sum(bytes)/1024/1024 as mbytes
from dba_segments
group by owner,tablespace_name
order by mbytes desc;