![]() |
Oracle 테이블 스페이스 |
![](http://sql.or.kr/skin/window/images/line.gif)
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 에서 확인이 가능. |
'나 어제 배웠다 > Database' 카테고리의 다른 글
ORA-01654 : INDEX SEGMENT (0) | 2008.05.13 |
---|---|
오라클 테이블스페이스 용량 확인 (0) | 2008.05.13 |
오라클 테이블스페이스 대하여..Part 1 (0) | 2008.05.13 |
오라클 트리거에 대하여... (0) | 2008.05.07 |
오라클 SQL*PLUS 명령어 모음 (0) | 2008.04.28 |