Oracle Admin 강좌 (Oracle9i)
Locally Managed Tablespaces 10 2 99,999+

by 구루비 AUTOALLOCATE EXTENT MANAGEMENT LOCAL UNIFORM DBMS_SPACE_ADMIN LMT DMT [2005.04.01]


LOCALLY MANAGED TABLESPACES란?

  오라클 8버전까지의 테이블스페이스내의 저장공간 할당에 관련된 정보를 Data Dictionary 내에 저장하고 관리 하였습니다. 하지만 이 방법은 때때로 I/O Bottleneck의 원인이 되기도 하죠.

  Oracle 8i에서 부터는 이러한 단점을 해소하기 위해서 새로운 개념의 Local Managed Tablespace 가 나왔습니다. 그렇다면 두가지의 테이블스페이스의 특징과 장, 단점에 대해서 알아 보겠습니다.

DICTIONARY MANAGED TABLESPACE

  지금까지 사용하여 왔던 전통적인 테이블스페이스 관리방식 입니다. 즉, 각 Objects(테이블,인덱스,…)의 Extents를 Data Dictionary Table들을 사용하여 관리하는 방식이죠.

  만약, 어떤 테이블에 하나의 새로운 Extent가 필요할 때에는 해당 Data Dictionary Table을 참조하기 위한 여러 개의 Recursive SQL이 내부적으로 수행되어 집니다. 이것은 때때로 Performance의 저하를 초래하기도 합니다.

  Extent의 크기를 아주 유연하게 할 수 있는 장점이 있습니다. 즉, 하나의 Tablespace내의 서로 다른 Object는 서로 다른 Extent의 크기를 가질 수 있습니다. 하지만, 대부분의 경우에는 Fragment를 방지하기 위해서 동일한 크기의 Extent를 할당하여 사용하고 있습니다.

LOCALLY MANAGED TABLESPACES

  테이블스페이스 내의 Free space, 또는 Extent를 관리하기 위해서 Data Dictionary Table을 사용하지 않습니다.

  대신에 해당 테이블스페이스 내에서 Bitmap을 이용하여 해당 테이블스페이스내의 모든 Free space, 사용된 Extent의 할당 정보를 관리 합니다.

  Locally Managed Tablespace는, 자체 extent에 대한 관리를 각각의 데이터파일에 비트맵 형식으로 저장하여 관리하는 테이블스페이스로, 데이터파일을 구성하는 블럭이 비어 있는지, 사용 중인지에 대한 정보를 관리 합니다.

  비트맵의 각각의 비트는, 하나의 블럭 또는 블럭의 그룹에 해당하는 정보를 나타 냅니다.

  익스텐트가 할당되거나, 비워지거나, 재사용될 때, 오라클에서는 블럭의 새로운 상태를 나타내기 위해 비트맵의 값을 변경 합니다.

  이렇게 함으로써 Data Dictionary Table을 참조하기 위한 Recursive SQL을 사용하지 않아도 됩니다.

LOCALLY MANAGED TABLESPACES의 특징

  1) 공간정보 관리를 위한 내부작업이 감소 합니다.

  2) 데이터 딕셔너리 테이블에 대한 경합이 감소 됩니다.

  3) 익스텐트 관리와 관련된 관련 rollback 생성이 되지 않습니다.

  4) Tablespace에 대한 주기적인 Coalesce 작업을 하지 않아도 됩니다. 이것은 해당 테이블스페이스내의 모든 Extent에 대한 정보를 Bit로 표현하기 때문에 가능합니다.

  5) 해당 테이블스페이스 내의 모든 Extent는 동일한 크기의 Extent를 할당하게 됩니다.

LOCALLY MANAGED TABLESPACE 테이블스페이스의 공간 관리

  1) 사용되지 않는 익스텐트 정보가 비트맵에 의해 관리 됩니다. 따라서, 테이블스페이스의 일부분이 비트맵 정보를 저장하는데 사용 됩니다.

  2) 각 비트는, 블럭이나, 블럭의 그룹의 정보를 나타냅니다.

  3) 비트 정보는, 사용 중인지, 그렇지 않은지를 나타냅니다.

  4) DBA_EXTENTSDBA_FREE_SPACE 등의 뷰는 동일하게 사용 합니다.

LOCALLY MANAGED TABLESPACES의 생성

Syntax

  - DICTIONARY : 테이블스페이스에 대해 Dictionary Table을 사용하여 공간 정보를 관리함.

  - LOCAL : 테이블스페이스가에 대해 비트맵을 사용하여 Locally Managed 방식으로 공간 정보를 관리함.

  - AUTOALLOCATE : 테이블스페이스에 대한 익스텐트 관리를 시스템에서 관장하도록 함. (사용자는 익스텐트의 크기를 수동으로 지정할 수 없음)

  - UNIFORM : 테이블스페이스가 동일한 크기의 익스텐트로 구성되도록 지정함. 크기는 기본적으로 바이트 단위로 지정 ( 익스텐트 크기를 KB 또는 MB 단위로 지정하기 위해서는 K 또는 M 을 사용하여 지정)
    이 옵션을 사용하게 되면, DEFAULT Storage 절, MINIMUM EXTENT 또는 TEMPORARY 옵션을 사용할 수 없습니다.

예제
 
-- SYSDBA권한으로 접속
SQL> CONN / AS SYSDBA


-- 모든 extent의 크기를 128K인 Locally Managed Tablespace를 생성
SQL> CREATE TABLESPACE local_storm
     DATAFILE 'D:\oracle\oradata\oracle\local_storm01.dbf' SIZE 50M
     EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;


-- 정보조회
SQL> SELECT initial_extent, next_extent, pct_increase,
            extent_management, allocation_type
     FROM DBA_TABLESPACES
     WHERE tablespace_name='LOCAL_STORM';

INITIAL_EXTENT NEXT_EXTENT PCT_INCREASE EXTENT_MAN ALLOCATIO
-------------- ----------- ------------ ---------- ---------
        131072      131072            0 LOCAL      UNIFORM
    

Locally Managed SYSTEM tablespace

  Oracle 9.2 이전 버젼에서는, EXTENT MANAGEMENT 절을 SYSTEM 테이블스페이스를 제외한 permanent tablespace나, temporary tablespace 생성시 지정할 수 있었습니다.

  Oracle 9.2부터는 SYSTEM 테이블스페이스를 포함한 모든 테이블스페이스를 Locally managed 방식으로 생성 할 수 있습니다.

  CREATE DATABASE에서 EXTENT MANAGEMENT LOCAL 절을 사용하게 되면, 오라클에서는 SYSTEM 테이블스페이스를 Locally Managed Tablespace로 생성하며, 익스텐트의 크기는 오라클에서 결정하게 됩니다.

  이 기능을 사용하기 위해서는, COMPATIBLE 옵션이 9.2 또는 그 이상으로 지정되어 있어야 합니다.

  Locally Managed SYSTEM tablespace는 기본적으로 AUTOALLOCATE 방식을 사용하게 되며, Locally Managed 방식으로 SYSTEM 테이블스페이스를 생성할 때, UNIFORM extent 크기를 지정할 수 없습니다.

DICTIONARY MANAGED TABLESPACE를 LOCALLY MANAGED TABLESPACE로 전환

  Oracle 8.1.6 부터 Dictionary Managed Tablespace를 Locally Managed Tablespace로 마이그레이션 할 수 있습니다.

  비트맵 헤더는 파일 내의 첫번째 free extent의 시작 부분에 기록되게 할 수 있는데, 이와 같은 작업을 수행하기 위해서는 DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL을 사용하여야 합니다.

제약사항

  SYSTEM 테이블스페이스는 마이그레이션을 할 수 없으며, 오프라인 상태의 테이블스페이스나, Locally Managed Tablespace 또는 Temporary Tablespace는 변경할 수 없습니다. (ORA-3245).

  Temporary Tablespace를 Locally Management 방식으로 바꾸기 위해서는, 테이블스페이스를 drop 시키고, CREATE TEMPORARY TABLESPACE 으로 테이블스페이스를 재생성하면 됩니다.

  테이블스페이스는 이미 존재하는 것이어야 하고 (ORA-959), 문제가 없는 상태이어야 합니다.

  변경 대상 테이블스페이스에는 비트맵 정보를 추가할 만큼의 여유 공간이 있어야 합니다.

 
-- Dictionary Mnaged Tblespace를 Locally Managed Tablespace로 변경
SQL> EXECUTE SYS.DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL('TBS_NAME');


-- Locally Managed Tablespace를 Dictionary Managed Tablespace 로 변경  
SQL> EXECUTE SYS.DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_FROM_LOCAL('TBS_NAME');
    

참고링크

- 강좌 URL : http://www.gurubee.net/lecture/1867

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 정성진 [2005.04.12 09:37:18]
오라클 9i부터는 Local Managed Tablespace가 기본값을 바뀌었습니다^^

by Nalra [2012.09.09 15:58:23]

자료감사합니다~

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입