Oracle 11G可用空间

时间:2017-09-27 11:43:17

标签: database oracle oracle11g

所以我在Linux服务器上运行了一个Oracle 11G实例。如何验证数据库可以包含多少数据?

问题有一个转折点。

我正在对应用程序运行负载测试。数据库服务器开始耗尽其中一个/ u0X /文件系统(数据库本身位于其中)的可用空间。 40GB的剩余电量仅为93MB。我指示我的应用程序删除数据库上的大部分数据,但确实如此。但/ u0X /上的可用空间保持不变 - 93MB。

asktom解释说,一旦数据被删除,它就不会被标记为“自由空间”本身,并且“自由空间”不会在表空间上增加。相反,数据库重用已经占用的BUT标记为删除空间(或类似的smth)

再次......我如何关注我的数据库可以包含多少数据?我怎么知道是否应该考虑让应用程序再次清除其数据,然后再开始查看带有异常的日志并返回HTTP:500s?

编辑:回复Cyrille的回答

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

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

2 个答案:

答案 0 :(得分:1)

自由空间不会返回给操作系统,但并不意味着您的数据库中没有可用空间。您必须查看表空间使用情况,表空间是数据所在的逻辑空间,如果删除了表空间中的所有内容,则可以通过调整数据文件大小来回收操作系统级别的空间。

这是一个可用于检查表空间使用情况的脚本:

https://www.dba-scripts.com/scripts/administration/tablespace-usage-script/

您可以使用此报告通过调整数据库数据文件大小来验证您可以在操作系统级别回收多少空间:

https://www.dba-scripts.com/scripts/administration/datafile-space-reclaimable/

答案 1 :(得分:0)

表空间已使用和可用的空间

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;

Oracle ASM磁盘组的已用和可用空间

SELECT name, free_mb, total_mb, round(free_mb/total_mb*100) as pct_free FROM v$asm_diskgroup order by TOTAL_MB desc;