제33장 DBMS_SPACE

내용 목차

33.1. 개요
33.2. 프러시저
33.2.1. SPACE_USAGE
33.2.2. UNUSED_SPACE

본 장에서는 DBMS_SPACE 패키지의 기본 개념과 패키지 내의 프러시저를 사용하는 방법을 설명한다.

DBMS_SPACE는 세그먼트의 크기와 공간 사용에 대한 정보를 제공하는 패키지이다.

본 절에서는 DBMS_SPACE 패키지에서 제공하는 프러시저를 알파벳 순으로 설명한다.

세그먼트의 High Water Mark(이하 HWM) 아래의 공간(즉, 현재 사용하는 공간)에 대한 사용 정보를 제공한다. 단, 비트맵 블록(bitmap block), 세그먼트 헤더(segment header), 익스텐트 맵 블록(extent map block)의 정보는 포함되지 않는다.

참고

High Water Mark란 테이블, 인덱스, 클러스터가 생성되고 한 번도 사용되지 않은 공간을 의미한다.

SPACE_USAGE 프러시저의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_SPACE.SPACE_USAGE
    (
        segment_owner       IN  VARCHAR2,
        segment_name        IN  VARCHAR2,
        segment_type        IN  VARCHAR2,
        unformatted_blocks  OUT NUMBER,
        unformatted_bytes   OUT NUMBER,
        fs1_blocks          OUT NUMBER,
        fs1_bytes           OUT NUMBER,
        fs2_blocks          OUT NUMBER,
        fs2_bytes           OUT NUMBER,
        fs3_blocks          OUT NUMBER,
        fs3_bytes           OUT NUMBER,
        fs4_blocks          OUT NUMBER,
        fs4_bytes           OUT NUMBER,
        full_blocks         OUT NUMBER,
        full_bytes          OUT NUMBER,
        partition_name      IN  VARCHAR2 DEFAULT NULL
    );       
  • 파라미터

    파라미터설명
    segment_owner스키마 객체를 소유한 사용자의 이름이다.
    segment_name스키마 객체의 이름이다.
    segment_type

    스키마 객체의 종류로, 다음 중 하나의 값을 갖는다.

    • TABLE

    • TABLE PARTITION

    • TABLE SUBPATITION

    • INDEX

    • INDEX PARTITION

    • INDEX SUBPATITION

    • CLUSTER

    • LOB

    • LOB PARTITION

    • LOB SUBPATITION

    unformatted_blocks세그먼트의 HWM 아래에서 포맷되지 않은 블록의 개수이다.
    unformatted_bytes세그먼트의 HWM 아래에서 포맷되지 않은 블록의 양(in bytes)이다.
    fs1_blocks0%와 25% 사이에 free space를 갖는 블록의 개수이다.
    fs1_bytes0%와 25% 사이에 free space를 갖는 블록의 양(in bytes)이다.
    fs2_blocks25%와 50% 사이에 free space를 갖는 블록의 개수이다.
    fs2_bytes25%와 50% 사이에 free space를 갖는 블록의 양(in bytes)이다.
    fs3_blocks50%와 75% 사이에 free space를 갖는 블록의 개수이다.
    fs3_bytes50%와 75% 사이에 free space를 갖는 블록의 양(in bytes)이다.
    fs4_blocks75%와 100% 사이에 free space를 갖는 블록의 개수이다.
    fs4_bytes75%와 100% 사이에 free space를 갖는 블록의 양(in bytes)이다.
    full_blocksfull로 marking된 블록의 개수이다.
    full_bytesfull로 marking된 블록의 양(in bytes)이다.
    partition_name

    다음의 경우에 따라 다르게 정의된다.

    • 파티션이면 파티션의 이름이다.

    • 파티션이 compose 방식이라면 서브파티션(subpartition)의 이름이다.

  • 예제

    set serveroutput on;
    
    DECLARE
      unformatted_blocks NUMBER;
      unformatted_bytes  NUMBER;
      fs1_blocks NUMBER;
      fs1_bytes NUMBER;
      fs2_blocks NUMBER;
      fs2_bytes NUMBER;
      fs3_blocks NUMBER;
      fs3_bytes NUMBER;
      fs4_blocks NUMBER;
      fs4_bytes NUMBER;
      full_blocks NUMBER;
      full_bytes NUMBER;
    
    BEGIN
      DBMS_SPACE.SPACE_USAGE('SYS', 'EMP', 'TABLE'
                             ,unformatted_blocks
                             ,unformatted_bytes
                             ,fs1_blocks
                             ,fs1_bytes
                             ,fs2_blocks
                             ,fs2_bytes
                             ,fs3_blocks
                             ,fs3_bytes
                             ,fs4_blocks
                             ,fs4_bytes
                             ,full_blocks
                             ,full_bytes);
      DBMS_OUTPUT.PUT_LINE('Space utilization (TABLES) ');
      DBMS_OUTPUT.PUT_LINE('unformatted_blocks: '|| TO_CHAR(unformatted_blocks) );
      DBMS_OUTPUT.PUT_LINE('unformatted_bytes: '|| TO_CHAR(unformatted_bytes) );
      DBMS_OUTPUT.PUT_LINE('fs1_blocks: '|| TO_CHAR(fs1_blocks) );
      DBMS_OUTPUT.PUT_LINE('fs1_bytes: '|| TO_CHAR(fs1_bytes) );
      DBMS_OUTPUT.PUT_LINE('fs2_blocks: '|| TO_CHAR(fs2_blocks) );
      DBMS_OUTPUT.PUT_LINE('fs2_bytes: '|| TO_CHAR(fs2_bytes) );
      DBMS_OUTPUT.PUT_LINE('fs3_blocks: '|| TO_CHAR(fs3_blocks) );
      DBMS_OUTPUT.PUT_LINE('fs3_bytes: '|| TO_CHAR(fs3_bytes) );
      DBMS_OUTPUT.PUT_LINE('fs4_blocks: '|| TO_CHAR(fs4_blocks) );
      DBMS_OUTPUT.PUT_LINE('fs4_bytes: '|| TO_CHAR(fs4_bytes) );
      DBMS_OUTPUT.PUT_LINE('full_blocks: '|| TO_CHAR(full_blocks) );
      DBMS_OUTPUT.PUT_LINE('full_bytes: '|| TO_CHAR(full_bytes) );
    END;        

세그먼트의 HWM 위의 공간(즉, 현재 사용하지 않는 공간)에 대한 사용 정보를 제공한다.

UNUSED_SPACE 프러시저의 세부 내용은 다음과 같다.

  • 프로토타입

    DBMS_SPACE.UNUSED_SPACE
    (
        segment_owner              IN  VARCHAR2,
        segment_name               IN  VARCHAR2,
        segment_type               IN  VARCHAR2,
        total_blocks               OUT NUMBER,
        total_bytes                OUT NUMBER,
        unused_blocks              OUT NUMBER,
        unused_bytes               OUT NUMBER,
        last_used_extent_file_id   OUT NUMBER,
        last_used_extent_block_id  OUT NUMBER,
        last_used_block            OUT NUMBER,
        partition_name             IN  VARCHAR2 DEFAULT NULL
    );
  • 파라미터

    파라미터설명
    segment_owner스키마 객체를 소유한 사용자의 이름이다.
    segment_name스키마 객체의 이름이다.
    segment_type

    스키마 객체의 종류로, 다음 중 하나의 값을 갖는다.

    • TABLE

    • TABLE PARTITION

    • TABLE SUBPATITION

    • INDEX

    • INDEX PARTITION

    • INDEX SUBPATITION

    • CLUSTER

    • LOB

    • LOB PARTITION

    • LOB SUBPATITION

    total_blocks세그먼트의 전체 블록의 개수이다.
    total_bytes세그먼트의 전체 블록의 양(in bytes)이다.
    unused_blocks세그먼트의 HWM 위의 블록의 개수이다.
    unused_bytes세그먼트의 HWM 위의 블록의 양(in bytes)이다.
    last_used_extent_file_id맨 마지막에 INSERT를 위해 사용된 익스텐트가 속한 파일 ID이다.
    last_used_extent_block_id맨 마지막에 INSERT를 위해 사용된 익스텐트가 속한 시작 블록(starting block)의 ID이다. 파일 ID와 같이 합하면 DBA가 된다.
    last_used_extent_block맨 마지막에 INSERT를 위해 사용된 블록의 숫자(익스텐트 내에서의 오프셋)이다.
    partition_name

    다음의 경우에 따라 다르게 정의된다.

    • 파티션이면 파티션의 이름이다.

    • 파티션이 compose 방식이라면 서브파티션(subpartition)의 이름이다.

  • 예제

    set serveroutput on;
    
    DECLARE
      total_blocks   NUMBER;
      total_bytes    NUMBER;
      unused_blocks  NUMBER;
      unused_bytes   NUMBER;
      last_used_extent_file_id   NUMBER;
      last_used_extent_block_id  NUMBER;
      last_used_block            NUMBER;
    
    BEGIN
      DBMS_SPACE.UNUSED_SPACE('SYS', 'EMP', 'TABLE'
                              ,total_blocks
                              ,total_bytes
                              ,unused_blocks
                              ,unused_bytes
                              ,last_used_extent_file_id
                              ,last_used_extent_block_id
                              ,last_used_block);
    
      DBMS_OUTPUT.PUT_LINE('Unused space utilization (TABLES) ');
      DBMS_OUTPUT.PUT_LINE('total_blocks: '|| TO_CHAR(total_blocks) );
      DBMS_OUTPUT.PUT_LINE('total_bytes: '|| TO_CHAR(total_bytes) );
      DBMS_OUTPUT.PUT_LINE('unused_blocks: '|| TO_CHAR(unused_blocks) );
      DBMS_OUTPUT.PUT_LINE('unused_bytes: '|| TO_CHAR(unused_bytes) );
      DBMS_OUTPUT.PUT_LINE('last_used_extent_file_id: '|| 
                            TO_CHAR(last_used_extent_file_id) );
      DBMS_OUTPUT.PUT_LINE('last_used_extent_block_id: '|| 
                            TO_CHAR(last_used_extent_block_id) );
      DBMS_OUTPUT.PUT_LINE('last_used_block: '|| TO_CHAR(last_used_block) );
    END;