MODUAL 4. DATABASE STRUCTURE
TEMPORARY TABLESPACE
- Temporary Segment만 포함, 할당 해제 후 재사용
PERMANENT TABLESPACE
- 일반 SEGMENT와 함께 Temporary Segment 포함
- SMON(조각모음)에 의해 할당해제
- 영구 테이블 스페이스
ALTER TABLESPACE 테이블스페이스명 PERMANENT[TEMPORARY]
데이터가 없다면 바꿀 수 있다.
LOCAL MANAGEMENT TEMPORARY 테이블 스페이스 생성
CREATE TEMPORARY TABLESPACE TEMP2
TEMPFILE ‘C:\TEMP02.DBF’ SIZE 1M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 10K;
-
- LOCAL - TEMPORARY : Temporary Segment
- UNDO : Undo Segment
- DICTIONARY –
- TEMPORARY : Temporary segment
9iR2 부터는 LOCAL 만 허용한다.
DEFAULT TEMPORARY TABLESPACE 생성
지정해 주지 않으면 SYSTEM TABLESPACE를 사용하게 되므로 성능 저하를 초래한다.
Locally Management 방식으로 생성한다.
DEFAULT TEMPORY TABLESPACE default_temp
TEMPFILE ‘C:\temp01.dbf’ SIZE 200K
CREATE USER TEST IDENTFIED BY TEST
TEMPORARY TABLESPACE default_temp
Default Temporary Tablespace 는 Offlline으로 만들 수 없다.
ALTER TABLESPACE 테이블스페이스명
ONLINE | OFFLINE[
- NORMAL : CHECKPOINT 수행
- TEMPORARY : 기존의 파일이 offline 상태일때 사용, 매체 복구를 필요로 한다.
- IMMEDIATE : CHECKPOINT 수행하지 않고 바로 Offline
- FOR RECOVER : 특정 시점으로 복수시 사용
TABLESPACE를 OFFLINE으로 전환 하지 못 할 경우
- SYSTEM TABLESPACE
- 활성화중인 UNDO SEGMENT
- DEFAULT TEMPORARY TABLESPACE
ALTER TABLESPACE 테이블스페이스명 READ[ONLY|WRITE]
REDO-ONLY TABLESPACE 만들 때 주의점
- TABLESPACE는 ONLINE
- TABLESPACE에 활성화된 UNDO SEGMENT가 있어서는 안 됨
- TABLESPACE가 현재 ONLINE BACKUP을 해서는 안 됨
DROP TABLESPACE 테이블스페이스명
[INCLUDING CONTENTS [AND DATAFILES] [CASECADE CONSTRAINTS]]
- CASECADE CONSTRAINT : 참고 무결성 제약조건 삭제(부모 자식 관계를 끊는다)
[UNIT 2] TABLESPACE 공간 관리
테이블 스페이스는 데이터 파일만 따로 삭제하는 방법이 없다.
DATA FILE을 추가하는 방법
- TABLESPACE에 DATA FILE 추가
ADD DATAFILE ‘파일 경로’
- TABLESPACE에 AUTOEXTEND옵션으로 DATA FILE 추가
ADD DATAFILE ‘파일 경로’ SIZE [AUTOEXTEND ON]
ALTER DATABASE [데이터베이스명]
DATAFILE ‘파일명’
RESIZE 크기
기존의 파일을 autoextend로 변경하기
AUTOEXTEND ON NEXT 사이즈
데이터 파일 이동하기
a. ALTER TABLESPACE USER2 OFFLINE
b. OS상에서 이동
c. ALTER TABLESPACE USER2 RENAME ‘원래 경로’ TO ‘옮긴 경로’
d. ALTER TABLESPACE USER2 ONLINE
[UNIT 3] SEGMENT
SEGMENT는 TABLESPACE에 특정 유형의 논리적 저장 구조로 할당된 영역
종류
- TABLE SEGMENT
단일 ROW 저장, 가장 일반적
- TABLE PARTITION SEGMENT
대용량 데이터 처리시 조각으로 나누어 관리
- CLUSTER SEGMENT
대용량이고 빈번한 조인이 일어나는 테이블에 사용
-
ROWID+COLUMN 값을 쌍으로 저장
-
-
- TEMPORARY SEGMENT
JOIN,GROUP BY,ORDER BY 등과 가은 작업이 발생시 정렬
- UNDO SEGMENT
변경 전 이미지 저장
- LOB SEGMENT
LOB타입을 별도의 SEGMENT에 저장
- LOB
LOB SEGMENT가 생성 될 때 자동 생성
- BOOTSTRAP SEGMENT
DICTIONARY CACHE 초기화에 사용, CACHE SEGMENT라고도 함
- NESTED TABLE SEGMENT
테이블 내에 테이블
[UNIT 4] EXTENTS
최초의 SEGMENT 크기 = INITIAL * MINEXTENTS
우선순위 규칙
SEGMENT > TABLESPACE > ORACLE 기본값
EXTENT의 할당
- SEGMENT가 생성되는 경우
- SEGMENT가 증가되는 경우
EXTENT의 해제
- SEGMENT나 CLUSTER가 삭제되는 경우
- TABLE을 변경(컬럼 제거)
- TRUNCATE되는 경우
- OPTIMAL
단편화 정도 확인
SELECT TABLESPACE_NAME,TOTAL_EXTENTS,PERCENT_EXTENTS_COALESCED
FROM DBA_FREE_SPACE_COALESCED;
단편화 제거하기 – 여러 번 해야 100에 가깝게 된다.
ALTER TABLESPACE 테이블스페이스명 COALESCE
[UNIT 5] DATABASE BLOCK
TABLESPACE 생성시에도 설정 가능하다 (MULTI BLOCK TABLESPACE)
PCTFREE
- 더 큰 값으로 UPDATE를 위해 준비해 놓은 공간 PARAMETER
- 작게 설정할 경우 ROW MIGRATION이 발생
- 기본값은 10%
PCTUSED
- INSERT가 시작되는 시점을 결정하기 위한 PARAMETER
- 작게 설정할 경우 공간 활용도가 낮아짐
- 크게 설정하면 서버에 부하가 걸린다.
- 추가 삽입 가능 여부를 FREELIST가 결정
- 기본값은 40%
- 잦은 FREELIST 체크에 대한 작업을 줄이므로 서버에 부하를 줄일 수 있다.
AUTOMETIC SEGMENT SPACE 관리
- LOCALLY MANAGED방식의 테이블 스페이스에선 가능
- LOB형태의 타입에는 사용 될 수 없다.
멀티 블록 테이블스페이스 생성
a. 서버 SHUTDOWN
b. 파라메터값에 db_16k_cache_size=16m 추가
c. CREATE TABLESPACE IMSI
DATAFILE ‘C:\IMSI.DBF’ SIZE 200K
BLOCKSIZE 16K
e. 테이블을 만들고 확인
select * from dba_extents
where segment_name = ‘생성한 테이블 명’
CHAINING
- ROW가 하나의 블록에 저장 될 수 없어서 여러 블록에 걸쳐 저장 되는 현상
단편화 제거
EMP테이블에 단편화가 심할 경우 임시로 복사해 두었다가 TRUNCATE해서 깨끗이
만들고 다시 채워 넣는다.
a. create table emp2 as select * from emp
b. truncate table emp
c. insert into emp select * from emp2
d. drop table emp2
MODULE 5. UNDO SEGMENT와 TEMPORARY SEGMENT
[UNIT 1] UNDO SEGMENT
하나의 UNDO SEGMENT는 여러 개의 TRANSACTION이 공유하여 사용가능한데, 이 때 저장되는 기본 단위는 블록 단위이다.
UNDO SEGMENT의 기능
- TRANSACTION ROLLBACK
- TRANSACTION RECOVERY
TRANSACTION을 ROLLBACK하기 위해 UNDO SEGMENT를 사용
- READ-CONSISTENCY
STATEMENT LEVEL
- SET TRANSACTION ISOLATION LEVEL READ COMMITTED
- COMMIT 되어진 정보만 읽는다.
TRANSACTION LEVEL
- SET TANSACTION ISOLATION LEVEL SERIALIZABLE
- 다른 값을 보려면 트렌젝션을 새로 시작하면 COMMIT된 정보를 읽는다.
* SET TRANSACTION 명령은 반드시 첫 번째 문장이어야 한다
댓글