UNDO TABLESPACE 的真实占用量不应该查 DBA_FREE_SPACE,要查 DBA_UNDO_EXTENTS。
SELECT STATUS, SUM(NVL(BYTES, 0)/1024/1024/1024) AS GB
FROM DBA_UNDO_EXTENTS
GROUP BY STATUS
ORDER BY 1;
STATUS 有三个值:
- ACTIVE - 事务使用中。
- UNEXPIRED - 事务使用完但还未过 undo retention, 暂时不能使用。
- EXPIRED - 事务使用完已过 undo retention, 可以再次使用。
UNDO TABLESPACE 的真实占用量是ACTIVE+UNEXPIRED, 而 DBA_FREE_SPACE 中占用量是三者相加。