| 12345678910111213141516171819202122232425262728293031323334353637383940 | 
							- CREATE OR REPLACE PROCEDURE SHRINK_TABLE_AND_REPORT(p_table_name IN VARCHAR2) IS
 
-   v_pre_size_mb     NUMBER;
 
-   v_post_size_mb    NUMBER;
 
-   v_saved_mb        NUMBER;
 
- BEGIN
 
-   -- 리로그 전 사이즈 측정
 
- SELECT ROUND(SUM(BYTES) / 1024 / 1024, 2)
 
- INTO v_pre_size_mb
 
- FROM USER_SEGMENTS
 
- WHERE SEGMENT_NAME = UPPER(p_table_name)
 
-   AND SEGMENT_TYPE = 'TABLE';
 
- DBMS_OUTPUT.PUT_LINE('리로그 전 사이즈: ' || v_pre_size_mb || ' MB');
 
-   -- 행 이동 허용 설정
 
- EXECUTE IMMEDIATE 'ALTER TABLE ' || p_table_name || ' ENABLE ROW MOVEMENT';
 
- -- SHRINK SPACE 실행
 
- EXECUTE IMMEDIATE 'ALTER TABLE ' || p_table_name || ' SHRINK SPACE';
 
- -- 행 이동 설정 복구
 
- EXECUTE IMMEDIATE 'ALTER TABLE ' || p_table_name || ' DISABLE ROW MOVEMENT';
 
- -- 리로그 후 사이즈 측정
 
- SELECT ROUND(SUM(BYTES) / 1024 / 1024, 2)
 
- INTO v_post_size_mb
 
- FROM USER_SEGMENTS
 
- WHERE SEGMENT_NAME = UPPER(p_table_name)
 
-   AND SEGMENT_TYPE = 'TABLE';
 
- DBMS_OUTPUT.PUT_LINE('📉 리로그 후 사이즈: ' || v_post_size_mb || ' MB');
 
-   -- 절감된 공간 계산
 
-   v_saved_mb := v_pre_size_mb - v_post_size_mb;
 
-   DBMS_OUTPUT.PUT_LINE('절감된 공간: ' || ROUND(v_saved_mb, 2) || ' MB');
 
- EXCEPTION
 
-   WHEN OTHERS THEN
 
-     DBMS_OUTPUT.PUT_LINE('오류 발생: ' || SQLERRM);
 
- END;
 
- /
 
 
  |