오라클은 테이블 DROP 시 PURGE 옵션을 주지 않으면 세그먼트가 휴지통이라는 공간에 그대로 남아있습니다.
테이블스페이스 사용량 체크 시 휴지통에 있는 세그먼트의 사이즈는 어떻게 되는지 테스트 입니다.
삭제 전
삭제 전 테이블스페이스 사용량 체크
USERS 테이블스페이스의 사용량은 49MB
SELECT D.STATUS, D.TABLESPACE_NAME NAME, D.CONTENTS TYPE,
ROUND(NVL(A.BYTES / 1024 / 1024, 0)) as SIZE_MB,
ROUND(NVL(A.BYTES - NVL(F.BYTES, 0), 0)/1024/1024) as USED_MB,
ROUND(NVL(NVL(F.BYTES, 0), 0)/1024/1024) as FREE_MB,
ROUND(NVL((A.BYTES - NVL(F.BYTES, 0)) / A.BYTES * 100, 0),2) as "USED_%"
FROM SYS.DBA_TABLESPACES D,
(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME) A,
(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME = A.TABLESPACE_NAME(+)
AND D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
AND NOT (D.EXTENT_MANAGEMENT LIKE 'LOCAL'
AND D.CONTENTS LIKE 'TEMPORARY')
STATUS|NAME |TYPE |SIZE_MB|USED_MB|FREE_MB|USED_%|
------+--------+---------+-------+-------+-------+------+
ONLINE|SYSTEM |PERMANENT| 1080| 1080| 0| 99.99|
ONLINE|UNDOTBS2|UNDO | 300| 285| 15| 95|
ONLINE|SYSAUX |PERMANENT| 1160| 961| 199| 82.81|
ONLINE|UNDOTBS1|UNDO | 335| 40| 295| 12.03|
ONLINE|USERS |PERMANENT| 100| 49| 51| 48.69|
5 row(s) fetched.
drop table 실행(휴지통으로 간다)
T1테이블 삭제 후 사용량 체크
삭제된 테이블 사이즈만큼 free 공간이 확보됨
> DROP TABLE SK.T1
0 row(s) modified.
-- 삭제 후, free size 바로 반영됨
SELECT D.STATUS, D.TABLESPACE_NAME NAME, D.CONTENTS TYPE,
ROUND(NVL(A.BYTES / 1024 / 1024, 0)) as SIZE_MB,
ROUND(NVL(A.BYTES - NVL(F.BYTES, 0), 0)/1024/1024) as USED_MB,
ROUND(NVL(NVL(F.BYTES, 0), 0)/1024/1024) as FREE_MB,
ROUND(NVL((A.BYTES - NVL(F.BYTES, 0)) / A.BYTES * 100, 0),2) as "USED_%"
FROM SYS.DBA_TABLESPACES D,
(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME) A,
(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME = A.TABLESPACE_NAME(+)
AND D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
AND NOT (D.EXTENT_MANAGEMENT LIKE 'LOCAL'
AND D.CONTENTS LIKE 'TEMPORARY')
STATUS|NAME |TYPE |SIZE_MB|USED_MB|FREE_MB|USED_%|
------+--------+---------+-------+-------+-------+------+
ONLINE|SYSTEM |PERMANENT| 1080| 1080| 0| 99.99|
ONLINE|UNDOTBS2|UNDO | 300| 285| 15| 95|
ONLINE|SYSAUX |PERMANENT| 1160| 961| 199| 82.81|
ONLINE|UNDOTBS1|UNDO | 335| 40| 295| 12.03|
ONLINE|USERS |PERMANENT| 100| 3| 97| 2.69|
5 row(s) fetched.
-- 휴지통에서도 확인됨
> SELECT * FROM dba_recyclebin
OWNER|OBJECT_NAME |ORIGINAL_NAME|OPERATION|TYPE |TS_NAME|CREATETIME |DROPTIME |DROPSCN |PARTITION_NAME|CAN_UNDROP|CAN_PURGE|RELATED|BASE_OBJECT|PURGE_OBJECT|SPACE|
-----+------------------------------+-------------+---------+-----+-------+-------------------+-------------------+--------+--------------+----------+---------+-------+-----------+------------+-----+
SK |BIN$NkHDlXVsQfvgYz04qMBkow==$0|T1 |DROP |TABLE|USERS |2025-05-29:16:16:40|2025-05-29:16:17:49|20878712| |YES |YES | 77435| 77435| 77435| 5888|
1 row(s) fetched.
휴지통에서 삭제
drop 하면 바로 free size에 반영되어 보여지고 휴지통에서 purge 여부와 상관없이 동일한 사이즈를 보인다
> purge dba_recyclebin
0 row(s) modified.
-- 휴지통에서 삭제 후 사이즈 동일함
SELECT D.STATUS, D.TABLESPACE_NAME NAME, D.CONTENTS TYPE,
ROUND(NVL(A.BYTES / 1024 / 1024, 0)) as SIZE_MB,
ROUND(NVL(A.BYTES - NVL(F.BYTES, 0), 0)/1024/1024) as USED_MB,
ROUND(NVL(NVL(F.BYTES, 0), 0)/1024/1024) as FREE_MB,
ROUND(NVL((A.BYTES - NVL(F.BYTES, 0)) / A.BYTES * 100, 0),2) as "USED_%"
FROM SYS.DBA_TABLESPACES D,
(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME) A,
(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME = A.TABLESPACE_NAME(+)
AND D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
AND NOT (D.EXTENT_MANAGEMENT LIKE 'LOCAL'
AND D.CONTENTS LIKE 'TEMPORARY')
STATUS|NAME |TYPE |SIZE_MB|USED_MB|FREE_MB|USED_%|
------+--------+---------+-------+-------+-------+------+
ONLINE|SYSTEM |PERMANENT| 1080| 1080| 0| 99.99|
ONLINE|UNDOTBS2|UNDO | 300| 285| 15| 95|
ONLINE|SYSAUX |PERMANENT| 1160| 961| 199| 82.81|
ONLINE|UNDOTBS1|UNDO | 335| 40| 295| 12.03|
ONLINE|USERS |PERMANENT| 100| 3| 97| 2.69|
5 row(s) fetched.
댓글
댓글 쓰기