DBMS 1

DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!

DBMS_SPACE

DBMS 1
Tibero 가이드
Tibero System Package Guide
DBMS_SPACE
작성자
dataonair
작성일
2021-02-18 10:38
조회
1571




제19장DBMS_SPACE




내용 목차






19.1. 개요

19.2. 프로시저


19.2.1. SPACE_USAGE

19.2.2. UNUSED_SPACE





19.1. 개요




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




19.2. 프로시저




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




19.2.1. SPACE_USAGE




세그먼트의 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_blocks 0%와 25% 사이에 free space를 갖는 블록의 개수이다.
    fs1_bytes 0%와 25% 사이에 free space를 갖는 블록의 양(in bytes)이다.
    fs2_blocks 25%와 50% 사이에 free space를 갖는 블록의 개수이다.
    fs2_bytes 25%와 50% 사이에 free space를 갖는 블록의 양(in bytes)이다.
    fs3_blocks 50%와 75% 사이에 free space를 갖는 블록의 개수이다.
    fs3_bytes 50%와 75% 사이에 free space를 갖는 블록의 양(in bytes)이다.
    fs4_blocks 75%와 100% 사이에 free space를 갖는 블록의 개수이다.
    fs4_bytes 75%와 100% 사이에 free space를 갖는 블록의 양(in bytes)이다.
    full_blocks full로 marking된 블록의 개수이다.
    full_bytes full로 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;





19.2.2. UNUSED_SPACE




세그먼트의 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;





R