[ORACLE] 휴지통(recyclebin)에 있는 테이블은 테이블스페이스 사용량에 포함될까?



    오라클은 테이블 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.
    

    댓글