SELECT
F.TABLESPACE_NAME AS "表空间名称" ,
ROUND((T.TOTAL_SPACE - F.FREE_SPACE) / 1024, 2)AS "已使用" ,
ROUND(F.FREE_SPACE / 1024, 2) AS "未使用" ,
ROUND(T.TOTAL_SPACE / 1024, 2) AS "已分配" ,
CASE WHEN T.TOTAL_SPACE == 0 THEN '' ELSE
(ROUND((F.FREE_SPACE / T.TOTAL_SPACE), 4)* 100) || '% ' END "空闲率",
CASE WHEN T.TOTAL_SPACE == 0 THEN '' ELSE
(ROUND((T.TOTAL_SPACE - F.FREE_SPACE) / T.TOTAL_SPACE, 4) * 100)||'%' END "使用率"
FROM
(
SELECT
TABLESPACE_NAME,
ROUND(SUM(BLOCKS *
(
SELECT PARA_VALUE / 1024 FROM V$DM_INI WHERE PARA_NAME = 'GLOBAL_PAGE_SIZE'
)
/ 1024)) FREE_SPACE
FROM
DBA_FREE_SPACE
GROUP BY
TABLESPACE_NAME
)
F,
(
SELECT
TABLESPACE_NAME,
ROUND(SUM(BYTES / 1048576)) TOTAL_SPACE
FROM
DBA_DATA_FILES
GROUP BY
TABLESPACE_NAME
)
T,
(
SELECT
TABLESPACE_NAME,
ROUND(SUM(MAXBYTES / 1048576)) TOTAL_MAX_SPACE
FROM
DBA_DATA_FILES
GROUP BY
TABLESPACE_NAME
)
H
WHERE
F.TABLESPACE_NAME = T.TABLESPACE_NAME
AND F.TABLESPACE_NAME =H.TABLESPACE_NAME;
SELECT SUBSTR(PATH, INSTR(PATH, '/', -1)+1) AS "文件路径" ,
TO_CHAR(TOTAL_SIZE*PAGE/1024/1024) AS "文件大小(MB)",
TO_CHAR(FREE_SIZE PAGE/1024/1024) AS "剩余大小(MB)",
(TO_CHAR(100 -FREE_SIZE100/TOTAL_SIZE)) AS "使用比例" ,
CASE AUTO_EXTEND WHEN '0' THEN '未开启' WHEN '1' THEN '已开启' END AS "自动扩展" ,
NEXT_SIZE AS "扩充尺寸(MB)",
MAX_SIZE AS "扩充上限(MB)"
FROM
V$DATAFILE;
从测试环境测试结果显示,DROP表时复用空间率最高,下来是TRUNCATE,接下来是DELETE操作;从已分配结果显示, DROP、TRUNCATE、DELETE操作不影响已分配大小,只影响已使用、未使用、空闲率和使用率。
从测试环境测试结果显示,只要老数据文件还有空闲就不会往新数据文件中去写,优先写有空闲的老数据文件。
如上情况供参考。
文章
阅读量
获赞