2009년 9월 10일 목요일

ORACLE_017. Managing Tablespace _ Part 1

Managing Tablespace : Part 1


CREATING TABLESPACE

 어떠한 데이터베이스라도 처음 만들어지는 테이블 스페이스는 SYSTEM 테이블 스페이스 이며, 최초로 만들어지는 데이터파일은 SYSTEM 테이블 스페이스에 자동으로 기록됩니다.

 테이블 스페이스를 만드는 방법은 사용하는 OS에 따라 그 방법이 다양합니다. 하지만 OS명령을 통하여 데이터 파일이 위치할 디렉토리 구조를 만들어 주어야 하는 것은 공통적인 요구사항 입니다. 모든 OS에서 테이블 스페이스를 만들거나 테이블 스페이스에 데이터 파일을 추가할때 그 용량과 파일 이름을 지정해 주어야 합니다. 그러면 오라클은 지정된 정보에 의거하여 데이터 파일을 만들고 오라클에서 사용할 수 있게 그 파일을 포맷합니다.

 테이블 스페이스를 작성하기 위해서는 CREATE TABLESPACE 혹은 CREATE TEMPORARY TABLESPACE 라는 SQL 구문을 이용합니다. 이는 CREATE TABLESPACE 시스템 권한이 요구됩니다. 후에 테이블 스페이스를 변경하기 위해서 ALTER TABLESPACE 혹은 ALTER DATABASE 구문을 이용하면 됩니다. 역시 ALTER TABLESPACE, ALTER DATABASE 시스템 권한이 필요합니다.

 오라클 8i 이전에는 Dictionary-managed 방식으로 테이블 스페이스를 만들었습니다. Dictionary-Managed tablespaces(DMT)는 공간 사용을 추적하기 위한 정보가 Data Dictionary table(DDT) 에 저장됩니다. 8i 부터 Locally-managed tablespace(LMT) 방식을 사용하는데, 이 방식은 비어있는 공간과 사용된 공간에 대한 정보를 추적하기 위해 비트맵(Bitmaps)을 사용합니다. 이러한 LMT는 좀더 빠른 성능과 관리의 편리함을 제공합니다.

 Undo tablespace 라고 하는 특별한 테이블 스페이스를 생성할 수도 있습니다. 이 테이블 스페이스는 언두 기록을 저장하기 위한 테이블 스페이스 입니다. 이 테이블 스페이스는 롤백(Roll back), 언두(Undo), 복구를 위한 데이터베이스 변환, 읽기 일관성, 혹은 ROLLBACK 구문을 수행하기 위해 오라클이 생성합니다.



 Locally Managed Tablespace (LMT)
 LMT는 자신의 테이블 스페이스 안에 익스텐트(extent)에 관련한 정보를 비트맵을 이용하여 보관하고 있습니다. 이는 다음의 이익을 가져다 줍니다.

 - 동시 사용성과 공관에 관한 작업속도를 향상시킵니다. 공간의 할당과 해제가 헤더파일에 저장되어
  있는 비트맵을 이용하여 로컬에서 수행되기 때문에 Enqueues같은 중앙 집중형 자원 관리에 비해 뛰
  어납니다.
 - 성능이 향상됩니다. DDT에 요청하여 공간을 조작하는 시간이 사라졌습니다.
 - 읽기가능 대기 데이터베이스가 가능합니다. LMT의 임시 테이블스페이스(예를 들어 정렬에 사용하
   는) 다른 어떠한 Undo나 Redo 를 생산해 내지 않습니다.
 - 간단한 공간 할당 - AUTOALLOCATE 단서를 사용하면 자동으로 EXTENT 크기가 결정됩니다.
 - 사용자가 DDT에 의존성이 감소합니다. 필요한 정보가 비트맵 블록과 파일 헤더에 저장되어 있기
   때문입니다.

 SYSTEM TABLESPACE를 포함한 모든 테이블 스페이스가 LMT로 관리될 수 있습니다. 게다가
DBMS_SPACE_ADMIN 패키지는 LMT를 위한 유지, 관리 기능을 제공합니다.



 Creating Locally Managed Tablespace
 LMT로 생성하기 위해서 CREATE TABLESPACE 구문에서 EXTENT MANAGEMENT LOCAL 로 정의합니다. 그러면 두가지 옵션을 선택 할 수 있습니다. 하나는 AUTOALLOCATE(기본값)를 이용하여 오라클이 직접 Extent를 관리하게 하는 방법과 UNIFORM SIZE 를 이용하여 사용자가 Extent를 직접 관리하는 방법이 있습니다.

 테이블 스페이스가 다양하고 많은 수의 extent를 가진 오브젝트로 구성이 될 것이라 예상된다면 AUTOALLOCATE 옵션이 좋습니다. 공간 할당과 해제가 그리 중요하지 않다면 AUTOALLOCATE 는 테이블 스페이스를 관리하는 가장 간단한 방법입니다. 약간의 공간이 낭비될 수도 있습니다만 오라클이 공간을 관리하게 하면 크게 문제가 되지 않습니다.

 반면에 사용하지 않는 공간을 정확히 제어하고 싶거나, 오브젝트에 얼마만큼의 공간이 할당되는지나 오브젝트의 수, extnets의 사이즈를 확실히 에측할 수 있다면 UNIFORM 이 좋은 선택이 될 것 입니다. 이는 테이블 스페이스안에 사용하지 않는 공간이 생기는 것을 방지하겠다는 뜻 입니다.

 다음은 AUTOALLOCATE를 사용하여 LMTBSB라는 LMT 방식의 테이블 스페이스를 작성하는 방법 입니다.

 CREATE TABLESPACE lmtbsb DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M
   EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

 AUTOALLOCATE 는 테이블 스페이스가 가장 작은 Extent 사이즈인 64K로 생성하고 시스템이 관리하게 합니다.

 UNIFORM 단서를 이용하여 테이블 스페이스를 생성할 수도 있습니다. UNIFORM SIZE 를 정의하면 테이블 스페이스는 SIZE 에서 정의된 UNIFORM 크기로 관리 됩니다. 기본 SIZE 값은 1M 입니다.

 다음 예제는 Extent의 크기가 128K로 지정되어 있습니다. 각각의 128K Extent는 (만약 테이블 스페이스 블록 크기가 2K라면 64개의 오라클 블록과 같습니다) extent bitmap에 비트값으로 표현되어 집니다.

  CREATE TABLESPACE lmtbsb DATAFILE'/u02/oracle/data/lmtbsb01.dbf' SIZE 50M
    EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;

 EXTENT MANAGEMENT LOCAL 을 정의하지 않으면 DEFAULT, MINIMUM EXTENT, TEMPORARY 단서를 사용할 수 없습니다. LMT 방식의 TEMPORARY 테이블 스페이스를 작성하고자 한다면 CREATE TEMPORARY TABLESPACE 구문을 사용하시기 바랍니다.



 Specifying Segment Space Management in Locally Managed TAblespaces
 CREATE TABLESPACE 구문을 이용하여 LMT를 생성할때 SEGMENT SPACE MANAGEMENT 단서는 관리되는 세그먼트에서 얼마나 공간에 여유를 둘 것인지와 공간을 사용할 것인지를 정의할 수 있게 합니다.

  - MANUAL
    세그먼트 안의 여유공관 관리를 FREE LISTS로 하겠음으로 선언하는 것
   입니다. Free lists는 데이터 블록에 얼만큼의 여유 공간을 블록에 두고 행을 삽입할 것인지를 선언해
   놓은 목록 입니다. 세그먼트에서 공간을 관리하는 형식을 manual segment-space management라고
   합니다. 이는 테이블 스페이스에 있는 스키마 오브젝트의 PCTUSED, FREELISTS, FREELISTS GROUP
  
이라는 스토리지 파라미터를 튜닝하고 정의하는 일이 필요하기에 Manual 이라 합니다.

  - AUTO
    이 옵션은 세그먼트에서 비어있는 공간을 Bitmap을 이용해서 관리하겠다는 뜻 입니다. 이 경우
   비트맵은 세그먼트의 행을 삽입할 수 있는 블록의 공간 합계와 함께블록들에 대한 상태를
   나타냅니다. Bitmap은 오라클이 비어있는 공간을 좀더 자동으로 관리할 수 있게 합니다. 그러므로
   이 방법을 Automatic segment-space management(ASSM) 라 부릅니다.

 Automatic segment-space management 는 세그먼트 내의 공간을 좀더 효율적으로 관리할 수 있게 합니다. PCTUSED, FREELISTS, FEELISTS GROUP을 설정할 필요가 전혀 없습니다. 혹여나 이 파라메터들이 설정되어 있다고 하여도 오라클은 이들 값을 무시합니다.

 ASSM은 Manul 방식보다 좀더 좋은 공간 활용을 제공합니다. 그리고 사용자 수의 증가에 맞춰 인스턴스처럼 스스로 자신의 스케일을 조절합니다. Real Application Clusters 환경에서 ASSM은 인스턴스에게 적합한 공간을 동적으로 제공합니다. 따라서 free list group을 이용한 고유 공간 할당을 위해 하드 파티셔닝을 피할 수 있습니다.

 많은 일반적인 워크로드(workload)에서 어플리케이션은 ASSM에서 좀더 나은 수행 능력을 보여줍니다. 다음 예제는 ASSM을 이용한 lmtbsb 테이블 스페이스를 만드는 예제 입니다.

 CREATE TABLESPACE lmtbsb DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M
   EXTENT MANAGEMENT LOCAL
   SEGMENT SPACE MANAGEMENT AUTO;



 Altering a Locally Managed Tablespaces
 LMT를 LMT를 이용한 TEMPORARY TABLESPACE로 변환은 불가능하고 세그먼트 관리의 방식 역시 바꿀 수 없습니다. LMT 에서 ALTER TABLESPACE 구문을 사용하는 몇가지 이유는 다음과 같습니다.

  - 데이터 파일 추가
    ALTER TABLESPACE lmtbsb ADD DATAFILE '/u02/oracle/data/lmtbsb02.dbf' SIZE 1M;

  - 테이블스페이스의 상태 변화(online/offline)

  - Read-only 혹은 Read-Write 상태의 변화

  - 데이터 파일의 이름변경. 혹은 테이블 스페이스의 데이터 파일에 대한 자동확장기능 켬/끔

 LMT에서 빈 공간의 병합은 필요하지 않습니다.



 Dictionary-Managed Tablespaces (DMT)
 오라클 9i 부터 테이블 스페이스를 만들때 기본적인 Extent 관리는 LMT 방식 입니다. 하지만 몇개의 특정한 지정자를 사용하여 DMT로 만들 수 있습니다. DMT 를 사용하면 오라클은 DDT에 Extent를 할당하거나 재사용하기 위해 비어있는 공간에 대한 정보를 갱신 합니다.


 Creating a Dictionary-Managed Tablespace
 예제에서는 다음의 특징을 가지고 tbsa 라는 테이블 스페이스를 만들어 봅니다.

  - 새로운 테이블 스페이스는 50M의 한개의 데이터 파일을 가지게 됩니다.
  - EXTENT MANAGEMENT DICTIONARY로 정의하여 DMT방식으로 생성합니다.
  - 이 테이블스페이스에 생성된 세그먼트의 저장관련 파라메터는 기본값으로 설정됩니다.

 다음 구문을 이용하여 tbsa 테이블 스페이스를 만듭니다.
  CREATE TABLESPACE tbsb
    DATAFILE '/u02/oracle/data/tbsa01.dbf' SIZE 50M
    EXTENT MANAGEMENT DICTIONARY
    DEFAULT STORAGE (
         INITIAL 50K
         NEXT  50K
         MINEXTENTS 2
         MAXEXTNETS 50
         PCTINCREASE 0 );

 위 예제에서 사용된 파라미터들은 테이블스페이스에서 세그먼트 할당을 정의합니다. 이 파라메터들은 데이터베이스에 저장된 데이터에 접근하는데 얼마나 시간이 걸리는지와, 데이터베이스가 사용하는 공간이 효율적인지에 연관됩니다.

   INITIAL
         세그먼트 안의 익스텐트의 초기 크기를 지정합니다. (K or M)
   NEXT
         두번째 익스텐트의 크기를 지정합니다. (K or M)
   PCTINCREASE
         두번째 익스텐트 후 익스텐트가 확장되는 크기의 비율을 정합니다.
   MINEXTENTS
         테이블스페이스에 첫 세그먼트가 생성시 할당될 익스텐트의 갯수 입니다.
   MAXEXTENTS
         세그먼트가 가질 수 있는 익스텐트의 최대 값 입니다. UNLIMITED로 설정할 수도 있습니다.

 CREATE TABLESPACE 구문의 또다른 파라메터인 MINIMUM EXTENT는 세그먼트 할당에도 영향을 미칩니다. 이 값을 정의하면 테이블 스페이스의 모든 비어있거나 할당된 익스텐트는 최소한의 크기가 정의된 숫자의 바이트(K or M)의 배수만큼 크기가 결정됩니다. 이는 테이블 스패이스의 빈 공간이 단편화가 일어나는 것을 막는 의미를 뜻합니다.

 

 Altering a Dictionary-Managed Tablespace
 ALTER TABLESPACE 를 사용하는 이유중 하나는 데이터 파일의 추가 입니다.

  ALTER TABLESPACE tbsa
     ADD DATAFILE '/u02/oracle/data/tbsa02.dbf' SIZE 1M;

 또한 기본적인 저장관련된 파라메터 값을 바꾸길 원할 수 있습니다. 이러한 기본값들은 ALTER TABLESPACE 구문을 이용해 바꿀 수 있습니다.

  ALTER TABLESPACE users
      DEFAULT STORAGE (
          NEXT 100K
          MAXEXTENTS 20
          PCTINCREASE 0 );

 테이블스페이스의 새로운 기본 저장 파라메터는 미래에 생성될 새로운 오브젝트에 한하거나, 테이블 스페이스 내의 기 존재하는 세그먼트에 익스텐트를 할당할때 적용됩니다.

 ALTER TABLESPACE 구문을 사용하는 이뉴는 다음을 포함하나 이에 국한되지 않습니다.

  - 테이블 스페이스내 빈 공간 병합
  - ONLINE/OFFLINE 의 변환
  - Read-only / Read-write 변환
  - 데이터 파일의 추가 혹은 이름변경, 테이블 스페이스의 데이터파일 사이즈의 자동확장 켬/끔



 Temporary Tablespaces
 동시 다중 정렬 기능의 성능 향상, 오버헤드의 감소 혹은 오라클이 총체적인 공간관리를 피하기 위해 임시 테이블 스페이스(Temporary Tablespaces) 를 만듭니다. 임시 테이블 스페이스는 여러 사용자와 공유가 가능하고 CREATE USER 구문으로 사용자를 생성할때 사용자에게 직접 임시 테이블 스페이스를 지정해 줄 수 있습니다.

 임시 테이블스페이스에서 인스턴스와 테이블스페이스의 정렬 작업은 하나의 정렬 세그먼트(Sort Segment)를 공유합니다. 정렬 세그먼트는 주어진 테이블스페이스내에 정렬 작업을 수행하는 모든 인스턴스에 존재합니다. 정렬 세그먼트는 DB 시작후 임시 테이블스페이스를 정렬하기 위해 사용하는 구문에 의해 생성되고 DB가 shutdown 될시에만 할당이 해제됩니다. 익스텐트는 여러개의 트랜젝션과 공유되지 않습니다.

 V$SORT_SEGMENT 뷰를 통해 임시 테이블스페이스내의 정렬 세그먼트에 대한 할당과 해제에 관한 정보를 볼 수 있습니다. V$TEMPSEG_USAGE 뷰는 이 세그먼트에서 정렬을 수행하는 사용자를 확인할 수 있습니다.

 임시 테이블 스페이스에는 사용자 임의로 오브젝트를 만들 수 없습니다.



 Creating a Locally Managed Temporary Tablesapce
 LMT 방식의 임시 테이블스페이스로 만들면 훨씬 간단하고 좀더 효과적입니다. LMT 임시 테이블 스페이스는 임시파일(tempfiles) 을 사용하는데 임시 테이블 스페이스 외부에서 데이터를 조작하지 않고, 임시 테이블 스페이스와 관련된 어떠한 리두 파일도 생성하지 않습니다. 따라서 스텐바이 데이터베이스나, Read-only 데이터베이스에도 사용됩니다.

 V$TEMPFILE DBA_TEMP_FILES 뷰는 V$DATAFILE DBA_DATA_FILES 뷰와 유사합니다.

 LMT 방식으로 임시 테이블 스페이스를 생성하때 CREATE TEMPORARY TABLESPACE 구문을 사용하며 CREATE TABLESPACE 시스템 권한을 요구합니다. 다음 구문은 임시 테이블 스페이스를 16M의 익스텐트를 가진 임시 테이블 스페이스를 생성합니다.

  CREATE TEMPORARY TABLESPACE lmtemp TEMPFILE '/u02/oracle/data/lmtemp01.dbf'
       SIZE 20M REUSE
     EXTENT MANAGEMENT LOCAL UNIFORM SIZE 16M;

 SIZE 의 기본값은 1M 입니다. 하지만 위 예제에서 처럼 다른 값을 넣어 만들 수 있습니다.

 Altering a Locally Managed Temporary Tablespace
 임시 파일을 추가하는 것 이외에는 LMT 방식의 임시 테이블 스페이스에서 ALTER TABLESPACE 구문을 사용할 일은 없습니다.

  ALTER TABLESPACE lmtemp ADD TEMPFILE '/u02/oracle/data/lmtemp02.dbf' SIZE 2M REUSE;
  * 임시 테이블 스페이스를 만들때는 CREATE TEMPORARY TABLESPACE 이지만
     ALTER 구문에서는 그냥 ALTER TABLESPACE 로 명명합니다.

 하지만 ALTER DATABASE 구문은 다음의 경우에 사용할 수 있습니다.

  ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' OFFLINE;
  ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' ONLINE;

  ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' RESIZE 4M;

  ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' DROP INCLUDING DATAFILES;



 Creating a Dictionary-Managed Temporary Tablespaces
 다음 구문을 이용하여 DMT 방식의 임시 테이블스페이스를 작성할 수 있습니다.

  CREATE TABLESPACE sort
      DATAFILE '/u02/oracle/data/sort01.dbf' SIZE 50M
          DEFAULT STORAGE (
            INITIAL 2M
            NEXT 2M
            MINEXTENTS 1
            PCTINCREASE 0)
      EXTENT MANAGEMENT DICTIONARY
      TEMPORARY;



 Altering a Dictionary-Managed Temporary Tablespace
 이미 존재하는 DMT방식의 일반 테이블 스페이스를 임시 테이블 스페이스로 변환 할 수 있습니다.

  ALTER TABLESPACE tbsa TEMPORARY;




FIN.
REF) Oracle Documents.Server.920/a96521 Managing Tablespaces

댓글 없음:

댓글 쓰기