테이블 종류#

힙 테이블#

일반적인 형태의 테이블

생성

SQL> create table subjects(
  2  subject_id number not null,
  3  subject_name varchar2(20not null
  4  )
  5  tablespace users
  6  ;

테이블이 생성되었습니다.

제약조건 추가

SQL> alter table subjects
  2  add constraint pk_subjects
  3  primary key(subject_id)
  4  ;

테이블이 변경되었습니다.

SQL> alter table courses
  2  add constraint fk_courses_subjects
  3  foreign key(subject_idreferences subjects(subject_id)
  4  ;

테이블이 변경되었습니다.

외부 테이블#

<div class="information"> Oracle 9i 이후부터 사용가능 </div>

외부의 파일 시스템에 저장된 읽기-전용 테이블

인덱스 구성 테이블#

쿼리의 성능을 높이도록 인덱스와 같은 구조로 데이터를 보관하는 테이블 삽입이나 갱신 작업에 효율이 떨어지는 대신 쿼리 성능은 상당히 높다.

SQL> create table states(
  2  state_id varchar2(2),
  3  state_name varchar2(20),
  4  constraint states_pk
  5  primary key(state_id)
  6  )
  7  organization index
  8  ;

테이블이 생성되었습니다.

organization index 라는 구문은 이 테이블이 인덱스 구성 테이블임을 나타낸다.

인덱스 구성 테이블을 생성하는 명령어에는 compress(또는 nocompress), overflow, including, pctthreshold 등의 옵션을 사용할수 있다.

임시 테이블#

하나의 트랜잭션이나 세션이 실행되는 동안 유지될 데이터를 보관하는 용도로 사용된다. 그래서 한 트랜잭션이나 세션내 생성된 데이터는 트랜잭션이나 세션이 종료됨과 동시에 사라진다. 기본적인 힙 테이블과 임시 테이블은 구조적으로 다르지만 다음과 같은 사항에서 비슷한 점이 있다.
  1. 특정 세션의 임시 테이블을 잘라낼수 있다.
  2. 임시 테이블에 인덱스를 만들수 있다.
  3. 임시 테이블에 뷰를 만들수 있다.
  4. 임시 테이블에 트리거를 만들수 있다.

오라클은 다음의 사항으로 임시 테이블을 처리한다.

  1. 임시 테이블에는 리두로그를 만들지 않는다.
  2. 임시 테이블을 대상으로 insert구문을 실행할때는 데이터 세그먼트를 생성하지 않는다.
  3. truncate table 명령은 해당 세션에서 생성한 데이터만을 대상으로 한다.
  4. 임시 테이블의 인덱스는 임시 테이블과 동일한 유효범위를 가진다.
  5. 임시 테이블에는 DML 락이 적용되지 않는다.

SQL> create global temporary table session_tab
  2  on commit preserve rows
  3  as select *
  4  from emp
  5  ;

테이블이 생성되었습니다.

on commit preserve rows 는 커밋이 이루어지더라도 테이블의 데이터가 그대로 유지되도록 하는 옵션이다.

SQL> create global temporary table transaction_tab
  2  on commit delete rows
  3  as select *
  4  from emp
  5  where 1=0
  6  ;

테이블이 생성되었습니다.

on commit delete rows 는 커밋이 이루어지면 임시 테이블내 모든 데이터를 없애도록 하는 옵션이다.

분할테이블(partitioned table)#

매우 큰 테이블을 작은 파티션으로 나누어서 만든 테이블.

클러스터 테이블(clustered table)#

두개 이상의 테이블을 물리적으로 함께 저장하는 형태. 테이블들이 각각 자신의 데이터 블럭이 아닌 동일한 데이터 블럭에 저장되는 것은 두 테이블이 항상 거의 동시에 쿼리가 되기 때문이다.

해시 클러스터 테이블(hash clustered table)#

두개 이상의 테이블이 물리적으로 디스크에 함께 저장되는 형태라서 클러스터 테이블과 같으나 클러스터 테이블의 경우 분리된 인덱스 내에 보관된 키값을 이용해서 레코드를 얻는데 반해 해시 클러스터 테이블은 레코드를 보관하는 데이터 블럭의 위치를 알아내기 위해 해시 함수를 사용한다.

테이블 제어시 사용되는 다양한 속성#

tablespace 절#

SQL> create table subjects(
  2  subject_id number not null,
  3  subject_name varchar2(20not null
  4  )
  5  tablespace users
  6  ;

테이블이 생성되었습니다.

logging, nologging#

리두 로깅 작업을 수행할것인지 말것인지를 설정한다. nologging의 경우 리두 로깅 작업의 일부 이루어지지 않는다. nologging일때 다음과 같은 작업에만 리두로깅 작업이 수행되지 않는다.
  1. create table as select
  2. sql*loader 직접 경로 로드
  3. 직접 경로 추가(/*+ append */ 힌트를 통해)

storage 절#

사용되는 파라미터는 다음과 같다
  1. initial
  2. next
  3. pctincrease
  4. minextents
  5. maxextents

cache, nocache#

테이블 변경#

테이블내 칼럼 변경하기#

SQL> alter table courses
  2  add (
  3  memo varchar2(20)
  4  );

테이블이 변경되었습니다.

SQL> alter table courses
  2  modify (
  3  memo varchar2(30)
  4  );

테이블이 변경되었습니다.

칼럼 삭제#

SQL> desc courses
 이름                                      널?      유형
 ----------------------------------------- -------- ----------------------------
 COURSE_ID                                 NOT NULL NUMBER
 COURSE_NAME                               NOT NULL VARCHAR2(50)
 SUBJECT_ID                                NOT NULL NUMBER
 MEMO                                               VARCHAR2(30)

SQL> alter table courses
  2  drop (
  3  memo
  4  );

테이블이 변경되었습니다.

SQL> desc courses;
 이름                                      널?      유형
 ----------------------------------------- -------- ----------------------------
 COURSE_ID                                 NOT NULL NUMBER
 COURSE_NAME                               NOT NULL VARCHAR2(50)
 SUBJECT_ID                                NOT NULL NUMBER

테이블 이름 변경#

SQL> alter table courses
  2  rename to courses_temp;

테이블이 변경되었습니다.

테이블 스페이스 변경#

SQL> alter table courses
  2  move tablespace system;

테이블이 변경되었습니다.

테이블 삭제#

SQL> drop table courses;

테이블이 삭제되었습니다.

여기서 외부키 제약으로 인해 테이블이 삭제되지 않을 경우 cascade constraints 옵션을 사용하면 된다.

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-2) was last changed on 10-Jan-2008 23:36 by DongGukLee