본문 바로가기

카테고리 없음

ORACLE create tablespace v1.1

이번엔 테이블스페이스 생성에 대해 알아보겠다.

우선 이 장에서는 local 방식에 대해서만 이야기 하겠다.

문법적인 구문은

create tablespace tablespace_name
datafile 'file_path/file_name' size number(양의정수)[m/k] [REUSE],
datafile 'file_path/file_name' size number(양의정수)[m/k] [REUSE],
...
[minimum extent number[m/k]]
[blocksize  number[m/k]]
[online | offline]
[logging | nologging]
[extent management dictionary | local [ autoallocate | uniform size number[m/k]]]
[segment space management manual | auto]

위와 같다.
(아래쪽 파란색으로 마킹한 부분 online, logging, local, manual 은 default 값이다)

가장 기본적인 것만 사용하면

SQL>create tablespace tablespace_name
datafile 'file_path/file_name' size number(양의정수)[m/k] [REUSE];

로 만들수도 있다.
(reuse는 옵션이며 해당 위치에 동일한 파일이 있는 경우 재사용을 한다라는 옵션이다.)

m/k 는 megabyte kilobyte 의 의미로 사용한 것이다.

실질적으로 생성한 스크립트의 예를 보이면

create tablespace test
datafile '/opt/oracle/oradata/PROD/disk3/test01.dbf' size 4m
online
logging
extent management local uniform size 20k
segment space management auto
/

위의 내용을 간단히 이야기 하면 test 라는 tablespace를 생성하고
4m의 datafile을 /opt/oracle/oradata/PROD/disk3 에 생성하고 그곳에 test01.dbf 파일을 생성한다.
생성된 테이블 스페이스는 online 상태이고 logging 모드를 사용한다.
logging 모드라는 것은 DML에 대해 REDO를 생성한다는 뜻이다.
extent 할당은 local방식으로 할당하고 할당단위는 항상 동일한 크기의 20k 이다.
segment 관리 방법은 auto로 주며 이는 권장사항이다.
auto로 준 경우 oracle이 pctfree pctused 값을 조정한다.


extent 를 특정사이즈로 할당할 때 아래와 같은 에러가 날때가 있다.

ORA-03249: Uniform size for auto segment space managed tablespace should have atleast 5 blocks

위의 에러는 db_block_size 즉 DB의 default block size와 관계있다.
위 메시지에선 extent 는 최소 다섯블록 이상이어야 한다고 이야기 하고 있다.

SQL> show parameter block_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_block_size                        integer     4096
SQL> get del
  1  create tablespace show
  2  datafile '/opt/oracle/oradata/PROD/data3/show01.dbf' size 10m
  3  autoextend on next 10m maxsize unlimited
  4  extent management local uniform size 8k  <--  default 가 4k 이므로 두 블럭 사이즈밖에 되지 않는다.
  5* segment space management auto
SQL> /
create tablespace show
*
ERROR at line 1:
ORA-03249: Uniform size for auto segment space managed tablespace should have
atleast 5 blocks

SQL> ed

SQL> get del
  1  create tablespace show
  2  datafile '/opt/oracle/oradata/PROD/data3/show01.dbf' size 10m
  3  autoextend on next 10m maxsize unlimited
  4  extent management local uniform size 20k <-- 다섯 블럭 사이즈로 조정하였다.
  5* segment space management auto
SQL> @del

Tablespace created.

테이블이 이상없이 생성되었다.