본문 바로가기

나 어제 배웠다/Database

오라클 테이블스페이스에 대하여 ... Part 2

Oracle 테이블 스페이스
Oracle 테이블 스페이스
======================================================================
▣▣▣             테이블 스페이스 관리   DATE:2006.02.09   ▣▣▣
======================================================================
♣   LOCALLY MANAGED TABLESPACE
   - AUTOALLOCATE 방식과 UNIFORM 방식이 존재.

   ☞ AUTOLLOCATION 방식
   1. AUTOLLOCATION 방식은 TABLESPACE 내의 각 EXTENT SIZE를 SYSTEM이 관리하며 USER가 EXTENT 의 SIZE 를 지정할 수 없슴.
   2. AUTOALLOCATE 방식의 기본적인 EXTENT SIZE 는 64K 이며 EXTENT 가 할당됨에 따라서 SYSTEM 이 자동으로 EXTENT SIZE 를 지정.
   3. LOCAL 절을 사용하면서 AUTOALLOCATE 또는 UNIFORM을 명시하지 않는다면 DEFAULT 로 AUTOALLOCATE가 사용됨.
   ☞ UNIFORM ALLOCATE 방식
   1. UNIFORM ALLOCATE 는 TABLESPACE 내의 각 EXTENT SIZE 가 USER 가 지정한 일정한 SIZE로만 생성됨.
   2. UNIFORM SIZE 를 지정하지 않는다면 해당 EXTENT SIZE 는 DEFAULT 로 1M 가 설정된다.  
   3. UNIFORM SIZE 로 사용하실 경우에는 생성 후에 UNIFORM SIZE를 변경하지 못하기 때문에 SIZE를 적절하게 고려 하여야 한다.
    예를 들어 100M 의 SIZE 로 UNIFORM SIZE 를 잡아 놓았는데 해당 TABLESPACE 에 작은 양의 OBJECT가 저장되고 있다면
    이는 DISK 의 낭비를 가져올수있기때문이다.            

♣   DBMS_SPACE_ADMIN PACKAGE
   1. dictionary-managed tablespace 에 bitmap 정보를 추가할 수 있게 하기 위해서는
     DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL을 사용.
   2. 제약사항으로는 SYSTEM TABLESPACE는 MIGRATION을 할 수 없으며,오프라인 상태의 TABLESPACE 나,
     LOCALLY MANAGED TABLESPACE 또는 TEMPORARY TABLESPACE는 변경할 수가 없슴.
   3. 따라서 TEMPORARY TABLESPACE를 LOCALLY MANAGEMENT 방식으로 바꾸기 위해서는 TABLESPACE를 DROP 시키고,
     CREATE TEMPORARY TABLESPACE COMMAND 를 이용하여 TABLESPACE 를 재생성하면 된다.
     또한 변경 대상 테이블스페이스에는 비트맵 정보를 추가할 만큼의 여유 공간이 있어야 한다.
   4. 또한 반대의 경우로 변경하고자 하는 경우에는 DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_FROM_LOCAL PACKAGE를 이용할 수 있슴.  
   5. DBMS_SPACE_ADMIN PACKAGE를 이용하여 DICTIONARY-MANAGED TABLESPACE 에서 LOCALLY MANAGED TABLESPACE 로 변경이 되게 되면
     LOCALLY MANAGED TABLESPACE 의 ALLOCATION_TYPE 은 USER TYPE으로 생성이 된다.
   6. begin
     dbms_space_admin.tablespace_migrate_to_local
     (tablespace_name=> 'USERS', rfno=>5);
    end;
    begin
     dbms_space_admin.tablespace_migrate_from_local
     (tablespace_name=>'TEST2');
    end ;

SQL>SELECT TABLESPACE_NAME,EXTENT_MANAGEMENT,ALLOCATION_TYPE,PLUGGED_IN
  2 FROM DBA_TABLESPACES;

TABLESPACE_NAME EXTENT_MAN ALLOCATIO PLU
----------------------------------------------------
SYSTEM     DICTIONARY USER NO
RBS      DICTIONARY USER NO
TEMP     DICTIONARY USER NO
TOOLS     DICTIONARY USER NO
USERS     LOCAL   USER NO <--MIGRATED
IDX      DICTIONARY USER NO
MRFACTDATA   LOCAL   USER NO <--MIGRATED
LOCAL_AUTO   LOCAL   SYSTEM NO <--NOT MIGRATED
LOCALLY_MANAGED LOCAL   UNIFORM NO <--NOT MIGRATED

이와 같이 생성된 USER TYPE의 LOCALLY MANAGED TABLESPACE 의 경우는 기존의 DICTIONARY MANAGED TALESPACE 에서
생성되었던 EXTENT 들이 존재하기 때문에 UNIFORM/AUTOALLOCATE 등의 EXTENT MANAGEDMENT 정책을 따르지 않고
단지 BITMAP 정보를 만들어 ST ENQUEUE CONTENTION 이나 DICTIONARY TABLE 의 CONTENTION을 줄일 수 있기 때문에
PERFORMANCE 에 효과가 있다.

♣ TABLESPACE 의 TYPE
    1. SYSTEM, UNDO, TEMPORARY ,DATA 영역 등의 4가지...
   2. SYSTEM TABLESPACE 에는 DICTIONARY TABLE 등이 존재하며 SYSTEM UNDO SEGMENT 가 존재합니다.
   3. 9I 에서부터 존재하는 UNDO TABLESPACE 는 과거의DATA TABLESPACE 에 ROLLBACK SEGMENT 를 생성하는 방식과 다르게
    UNDO SEGMENT 만을위해서 생성이 되게 되며 TEMPORARY TABLESPACE 의 경우 TEMPFILE 을 생성하게 됩니다.
  4. 10G 에서는 새로운 NEW FEATURE 로 BIG FILE 을 제공하는 BIG FILE TABLESPACE 라는 개념이도입되었습니다.
   - 기존에는 하나의 TABLESPACE 에 여러 DATAFILE 이 포함되어 사용이 되었으나 BFT 에서는 하나의 TABLESPACE 에 하나의 DATAFILE이
    MAPPING이 됩니다.  

♣ UNDO TABLESPACE
   1. UNDO_MANAGEMENT 와 UNDO_TABLESPACE, UNDO_RETENTION PARAMETER를 제공
   2. UNDO_MANAGEMENT PARAMETER 는 AUTO /MANUAL 의 두가지 형태로 설정이 가능하며 DYNAMIC 하게 변경이 되지는 않습니다.
    - AUTO 의 경우는 undo segment 자체를 ORACLE 에서 자동관리가 되며 각 transaction 에 의해 undo segment 가 자동으로 생성이 되며
     자동으로 offline이 되는 방법입니다.
    - MANUAL 로 설정하는 경우에는 과거의 rollback segment 를 사용하는 방법과 같습니다.
   3. 만약 RAC 와 같이 여러 instance 를 하나의 database에 사용한다면 UNDO tablespace 는 각 instance 마다 하나씩 만들어
    해당 node 에 할당이 되어야 합니다.
   4. UNDO TABLESPACE 는 database가 생성되는 시점에서 생성이 되며 추후 create undo tablespace command를 통해서 생성이 가능합니다.
   5. Database 가 사용할 수 있는 undo tablespace 는 여러 undo tablespace 가 있을지라도 하나만을 사용할 수 있습니다.
    이를 변경하고자 하는 경우에는 UNDO_TABLESPACE 를 동적 및 parameter file 에서 변경하여 사용이 가능합니다.
   6. UNDO_RETENTION PARAMETER 는 UNDO IMAGE 를 보존하고 있어야 하는 특정시간을 의미합니다. 따라서 undo_retention parameter 를
    큰 값으로 assign 하는 경우에는 undo tablespace 의 양이 많이 필요하게 됩니다.

♣ TEMPORARY TABLESPACE
   1. sort 작업에 대해 작업 공간을 효과적으로 사용할 수가 있습니다.
   2. 해당 sort segment는 여러 user가 공유할 수가 있습니다.
   3. tempfile 형식으로 생성이 되기 때문에 permanent 형식의 object 를 포함할 수가 없습니다.
   4. Temporary tablespace 로 tablespace 를 생성하게 되면 locally managed tablespace 로 생성이 되게 됩니다.
   5. 제약사항으로는 temporary file 은 항상 nologging 모드로 설정이 되며 read only로 설정할 수가 없습니다.
   6. rename 이 불가능하여 rename을 하고자 하는 경우에는 해당 datafile 을 drop 하고 새롭게 추가하는 과정을 거쳐야 합니다.
   7. media recovery 가 필요하지 않기 때문에 backup을 받으실 필요가 없습니다.
   8. 생성시 주의 사항으로는 ORACLE 9i 에서부터 제공되는 multi block size 를 사용할 수 있지만 temporary tablespace 를 생성할 때는
     db_block_size 와 다른 size 의 non-standard block size 를 지정할 수가 없습니다.
   9. temporary tablespace 생성시 autoallocate, extent management dictionary option 을 사용하게 되면 ora-25319 error 가 발생합니다.
   10. CREATE TEMPORARY TABLESPACE TEMP
        TEMPFILE '/DISK2/TEMP_01.DBF'
        SIZE 500M
        EXTENT MANAGEMENT LOCAL
        UNIFORM SIZE 10M;

♣   RESIZING A TABLESPACE
   - 3가지 방법 존재
   1.   자동 확장
     ALTER DATABASE DATAFILE '/DISK5/APP_DATA_03.DBF'
       AUTOEXTEND on NEXT 10M
     MAXSIZE 500M ;

   2.   수동으로 파일크기 조정
     ALTER DATABASE DATAFILE '/DISK5/APP_DATA_02.DBF' RESIZE 200M;

   3.   데이터 파일 추가
     ALTER TABLESPACE USER_DATA
     ADD DATAFILE '/DISK6/APP_DATA_04.DBF' SIZE 200M ;

♣   MOVE(RENAME) A DATAFILE
   - DISK 의 SPACE 에 관련하여 SPACE 를 늘리지 못하는 경우에는 DATAFILE 의 위치를 변경해야 하는 경우
   1. 첫째, 해당 TABLESPACE 에 대해서 OFFLINE으로 설정을 해야 합니다.
   2. 둘째, SOURCE DATAFILE 을 TARGET DATAFILE 로 COPY해야 하며,COMMAND 를 이용하여 TABLESPACE 의 DATAFILE 을 RENAME 합니다.
   3. 셋째, 이후 TABLESPACE 를 onLINE 하여 V$DBFILE 및 DBA_DATA_FILES VIEW 를 이용하여 FILE NAME 이 변경되어 있는 내용을
    확인 후 OS 상에서 기존의 DATAFILE 을 삭제할 수 있습니다.
   4. 주의해야 할 점이 있다면 SYSTEM TABLESPACE 의 경우에는 OFFLINE 이 될 수 없기 때문에 DATABASE 를 SHUTDOWN 후
    MOUNT 시점까지STARTUP 후 ALTER DATABASE COMMAND 를 통해서 가능할 수 있습니다.

   ☞ SYSTEM TABLESPACE ­ MOUNT MODE
    - ALTER DATABASE RENAME FILE '/U01/ORADATA/SYSTEM01.DBF' TO '/U02/ORADATA/SYSTEM01.DBF' ;
   ☞ USER TABLESPACE
   ALTER TABLESPACE USER_DATA OFFLINE ;
   ALTER TABLESPACE USER_DATA RENAME DATAFILE '/U01/ORADATA/OLDDATA01.DBF' TO '/U02/ORADATA/NEWDATA01.DBF' ;
   ALTER TABLESPACE USER_DATA onLINE ;

♣   TABLESPACE 정보
   1. TABLESPACE 에 대한 정보는 V$TABLESPACE 와 DBA_TABLESPACES 에서 확인이 가능.
   2. DATAFILE 에대한 정보는 V$DBFILE ,V$DATAFILE ,DBA_DATA_FILES 에서 확인이 가능.
   3. TEMPFILE 의 경우는 V$TEMPFILE ,DBA_TEMP_FILES 에서 확인이 가능.