Oracle TableSpace 조회


Oracle DB의 TableSpace 조회 쿼리 입니다.

DBA 권한이 부여된 계정에서 실행이 필요합니다.

단위는 MB입니다.

만약 GB 단위로 필요하시다면 / 1024 / 1024 부분에

/1024를 추가 해주시면 됩니다.


SELECT A.TABLESPACE_NAME
,ROUND(A.BYTES_ALLOC / 1024 / 1024, 0) CURRENT_SIZE
,ROUND(NVL(B.BYTES_FREE, 0) / 1024 / 1024, 0) FREE_SIZE
,ROUND((A.BYTES_ALLOC - NVL(B.BYTES_FREE, 0)) / 1024 / 1024, 0) USED_SIZE
,ROUND((NVL(B.BYTES_FREE, 0) / A.BYTES_ALLOC) * 100, 0) FREE_RATE
,100 - ROUND((NVL(B.BYTES_FREE, 0) / A.BYTES_ALLOC) * 100, 0) USED_RATE
,ROUND(MAXBYTES / 1024 / 1024, 0) MAX_SIZE

FROM   
( SELECT F.TABLESPACE_NAME
,SUM(F.BYTES) BYTES_ALLOC
,SUM(DECODE(F.AUTOEXTENSIBLE, 'YES',F.MAXBYTES,'NO', F.BYTES)) MAXBYTES
FROM DBA_DATA_FILES F
GROUP BY TABLESPACE_NAME) A,

( SELECT F.TABLESPACE_NAME
,SUM(F.BYTES)  BYTES_FREE
FROM DBA_FREE_SPACE F
GROUP BY TABLESPACE_NAME) B

WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME (+)

UNION

SELECT TABLESPACE_NAME
,ROUND(SUM(BYTES_USED + BYTES_FREE) / 1024 / 1024, 0)
,ROUND(SUM(BYTES_FREE) / 1024 / 1024, 0)
,ROUND(SUM(BYTES_USED) / 1024 / 1024, 0)
,ROUND((SUM(BYTES_FREE) / SUM(BYTES_USED + BYTES_FREE)) * 100, 0) FREE_RATE
,100 - ROUND((SUM(BYTES_FREE) / SUM(BYTES_USED + BYTES_FREE)) * 100, 0) USED_RATE
,ROUND(MAX(BYTES_USED + BYTES_FREE) / 1024 / 1024, 0)

FROM   SYS.V_$TEMP_SPACE_HEADER
GROUP BY TABLESPACE_NAME
ORDER BY 1

CURRENT_SIZE는 뒤에 나오는 FREE_SIZE와 USED_SIZE의 합과 같으며

FREE_RATE, USED_RATE는 비율이므로 총 합은 100입니다.

마지막으로 MAX_SIZE는 최대 바이트 수입니다.