Database Oracle 11G可用空间
因此,我在Linux服务器上运行了一个Oracle 11G实例。如何验证数据库还可以包含多少数据 这个问题有点曲折 我正在应用程序上运行负载测试。数据库服务器开始在数据库所在的/u0X/文件系统中耗尽可用空间。40GB中只剩下93MB可用空间。我指示我的应用程序删除数据库中的大部分数据,结果它删除了。但是/u0X/上的可用空间保持不变-93MB asktom解释说,一旦数据被删除,它本身就不会被标记为“空闲空间”,表空间上的“空闲空间”也不会增加。相反,数据库重用已经占用但标记为删除空间或smth之类的内容 所以再一次。。。我如何关注我的数据库可以包含多少数据?我如何知道我是否应该考虑应用程序在它开始在有异常的日志中运行并返回http:500 s?< /p>之前再次清除它的数据。 编辑:对西里尔答案的回复Database Oracle 11G可用空间,database,oracle,oracle11g,Database,Oracle,Oracle11g,因此,我在Linux服务器上运行了一个Oracle 11G实例。如何验证数据库还可以包含多少数据 这个问题有点曲折 我正在应用程序上运行负载测试。数据库服务器开始在数据库所在的/u0X/文件系统中耗尽可用空间。40GB中只剩下93MB可用空间。我指示我的应用程序删除数据库中的大部分数据,结果它删除了。但是/u0X/上的可用空间保持不变-93MB asktom解释说,一旦数据被删除,它本身就不会被标记为“空闲空间”,表空间上的“空闲空间”也不会增加。相反,数据库重用已经占用但标记为删除空间或smt
TABLESPACE_NAME MEGS_ALLOC MEGS_FREE MEGS_USED PCT_FREE PCT_USED MAX
------------------------------ ---------- ---------- ---------- ---------- ---------- ----------
APP01 34920 27 34893 0 100 65536
SIGNSERVER 10 7 3 70 30 32768
SYSAUX 1120 63 1057 6 94 32768
SYSTEM 4290 1 4289 0 100 32768
TEMP 1345 1343 2 100 0 32768
UNDOTBS1 1090 759 331 70 30 32768
USERS 5 4 1 74 26 32768
7 rows selected.
编辑2
自由空间不会返回给操作系统,但这并不意味着数据库中没有自由空间。您必须查看表空间的使用情况,表空间是数据所在的逻辑空间,如果您删除了表空间中的所有内容,则可以通过调整数据文件的大小在操作系统级别回收空间 以下是可用于检查表空间使用情况的脚本: 您可以使用此报告来验证通过调整数据库数据文件的大小可以在操作系统级别回收多少空间: 表空间使用和释放的空间 Oracle ASM磁盘组使用和释放的空间
我已经用查询的输出编辑了我的问题。我很确定我还有超过27MB的剩余空间:而且我对将这些空间回收回操作系统不感兴趣。我很想知道当前数据库的状态空间是什么?您是否可以执行以下查询:从dba_段中选择segment_type,sumbytes/power1024,2作为大小MB,其中tablespace_name='APP01'按segment_type分组;见编辑2。粘贴输出,因为它是多行数据。如果您的表空间中有数据,您的应用程序没有正确删除数据。我没有说我已经删除了所有数据。我删除了其中一些>50%并重新启动了负载测试。这是否意味着32 GB的blob已经占用了数据库?
SQL> select segment_type,sum(bytes/power(1024,2)) as "Size MB" from dba_segments where tablespace_name='APP01' group by segment_type;
SEGMENT_TYPE Size MB
------------------ ----------
LOBINDEX 92,5625
LOBSEGMENT 31702,5625
TABLE 1857
INDEX 1241,125
SELECT tablespace_name,
size_mb,
free_mb,
max_size_mb,
max_free_mb,
TRUNC((max_free_mb/max_size_mb) * 100) AS free_pct,
RPAD(' '|| RPAD('X',ROUND((max_size_mb-max_free_mb)/max_size_mb*10,0), 'X'),11,'-') AS used_pct
FROM (
SELECT a.tablespace_name,
b.size_mb,
a.free_mb,
b.max_size_mb,
a.free_mb + (b.max_size_mb - b.size_mb) AS max_free_mb
FROM (SELECT tablespace_name,
TRUNC(SUM(bytes)/1024/1024) AS free_mb
FROM dba_free_space
GROUP BY tablespace_name) a,
(SELECT tablespace_name,
TRUNC(SUM(bytes)/1024/1024) AS size_mb,
TRUNC(SUM(GREATEST(bytes,maxbytes))/1024/1024) AS max_size_mb
FROM dba_data_files
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name
)
ORDER BY size_mb desc;
SELECT name, free_mb, total_mb, round(free_mb/total_mb*100) as pct_free FROM v$asm_diskgroup order by TOTAL_MB desc;