행위

오라클 테이블 생성

DB CAFE

thumb_up 추천메뉴 바로가기


1 오라클 테이블 생성 , CREATE TABLE[편집]

The syntax to create a table is:

CREATE TABLE [table name]
       ( [column name] [datatype], ... );

For 예시:

CREATE TABLE employee
       (id int, name varchar(20));

1.1 BLOCK SIZE[편집]

  1. 8K
    • 기본 사이즈
  2. 32K
    • 평균 row size가 커서 8K사용중인 테이블에서 row migration , row chaining이 자주발생할경우
    • 한번에 대량 i/o가 발생 하는 테이블인 경우

1.2 PCTFREE[편집]

  1. 10
    • 기본
  2. 0
    • DML이 발생되지 않는 테이블, 백업용 압축테이블
  3. 20
    • Update/Delete 가 빈번하게 발생되는 테이블
  4. 90
    • 채번 테이블

1.3 INITRANS 와 MAXTRANS[편집]

  1. INITRANS
    1. 데이터 블록에 동시에 접근 가능한 트랜잭션의 초기 수를 의미
    2. 트랜잭션이 많이 발생하는 경우 MAXTRANS 까지 늘어나며, PCTFREE 로 확보된 영역에 추가 확장 됨
  2. MAXTRANS
    1. 데이터 블록에 접근 가능한 최대 트랜잭션 수를 의미
    2. 접근하는 트랜잭션 수가 MAXTRNAS 값을 초과하는 경우, 앞의 트랜잭션이 COMMIT 혹은 ROLLBACK 을 해야 다음 트랜잭션이 접근 가능


assignment INITRANS 를 크게 설정 하면?
  • INITRANS 을 위한 슬롯도 블록에 공간을 차지하며, 트랜잭션이 많지 않은 경우 낭비를 하게 되므로 굳이 크게 설정할 필요 없음
2       -- 기본
10 ~ 20 -- 트랜잭션이 빈번하게 발생할것으로 예상되는 테이블
15      -- 로그성 테이블
30      -- 채번테이블


1.4 INITRANS 와 MAXTRANS[편집]

  1. Update시 SQL처리과정은 Parse와 Execute 단계로 실행 (parse는 select와 동일)
  2. execute는 데이터블럭과 언두블럭 read -> row level lock -> redo entry -> undo발생 -> 데이터 수정의 과정을 거치게 된다.
  3. 이때 일어나는 트랜잭션처리 과정
    1. 언두 세그먼트 바인딩
    2. 언두 세그먼트 할당
    3. 트랜잭션 테이블 슬롯 할당 (트랜잭션 테이블 슬롯 중 가장 오래 전에 커밋된 트랜잭션 테이블이 재사용)
    4. 할당된 트랜잭션 ID로 exclusive TX lock 획득.
    5. 언두 블록 할당.
    6. 데이터 블록 변경 발생
      - 변경된 블럭은 Dirty 상태가 된다. 또한 변경된 데이터 블럭에 대한 CR블럭이 버퍼캐시에 생성된다.
    7. 커밋. 트랜잭션에 SCN을 할당.
  4. 여기서 블럭을 변경하기전 블럭 헤더의 ITL(Interested Transaction List)에 엔트리를 등록해야 한다.
    1. ITL이란? 데이터 블록 내에 있는 슬롯으로 블럭을 변경하고자 하는 트랜잭션들의 List이다.


  • 초기값은 INITRANS의 값으로 정의되며 미리 확보할 ITL entry수를 의미한다.
  • 최대값은 MAXTRANS 값으로 ITL Entry의 최대 수를 의미한다. (기본 255)
  • 만약 모든 가용한 ITL이 사용중이고 새로운 ITL 슬롯을 동적으로 할당하기위한 PCTFREE 영역의 공간이 충분하지 않을때는 엔트리를 할당받지 못하여 TX Lock 경합이 발생하게 된다.
    • 이때는 ITL entry를 차지한 다른 트랜잭션이 커밋이나 롤백을 수행하여 ITL 슬롯을 재사용할 수 있을때까지 대기한다.
  • 오라클은 row단위의 lock을 걸지만 일단 데이터의 Access시 블럭 단위로 엑세스 하므로 결국 block 단위의 lock이 필요하다.