database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Tutorials 11951 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 11951
테이블 관리
작성자
정재익(advance)
작성일
2002-09-07 21:35
조회수
12,986

Table 관리(1)

--------------

1. Table을 만들 위치지정

- 올바른 권한과 TableSpace의 할당량이 있으면 현재 Online인

TableSpace에 새 Table을 생성 할수 있습니다.

- 저장할 TableSpace를 지정하려면 Create Table명령에 TableSpace

Option을 줘야합니다.

- 만약 TableSpace를 지정하지 않으면 사용자계정의 Default TableSpace에

생성되는데, 만약 Oracle 사용자를 create할때 default tablespace를

지정하지 않았다면 System TableSpace에 해당 Table이 생기게 된다.

이렇게 되면 Data Dictionary와 사용자개체가 동일한 데이터 파일에서

충돌이 나므로 시스템 Performance가 저하될수 있다.

- 만약 응용프로그램과 관련된 Table이 다양한 TableSpace에 임의로 저장된다면

응용프로그램의 BackUp이나 복구같은 Data 관리 작업을 완료하는데 필요한

시간이 증가 될수있다.

 

2. Table Size및 Storage Parmeter의 설정

- 예를들어 Table생성전에 Table의 최대크기를 측정한다고 할때 Table을

생성한후 Storage Parameter를 설정하면 Table의 Data Segment에

더작은 확장영역이 할당되며 모든 Table의 Data는 어느정도 연속적인

디스크 공간에 저장된다. 이렇게함으로서 당연히 Table과 관련된 디스크의

입출력 시간은 줄어들게 된다. 만약 Table의 Size를 구하고자 하면 Oracle

Tip에 Table및 Index Size 구하는 Tip을 참조하기 바랍니다.

 

3. 대규모 Table계획

- Maxextents에 unlimited를 사용하면 큰 Table을 계획하는것을 단순히

만들수 있고, 낭비되는 영역의 단편화를 줄일수 있으며, 영역을 효과적으로

재사용할수 있으나 확장영역 수가 무제한으로 커진다면 Table에 어떤 작업을

할때 성능에 영향을 미치게 되므로 unlimied는 잘사용하지 않는것이 바람직할것

같다.

- 인덱스는 Table이 있는 Disk와 분리하는게 좋다. 매우 큰 Table에서

Constraints를 활성화 또는 비활성화 할때 또는 Table을 재생성할때

인덱스를 삭제하거나 재생성하면 별도의 TableSpace로 분리된 Index는

다른 개체를 포함하는 Table Index보다 쉽게 연속적인 영영을 찾을수 있다.

- 매우 큰 Table의 데이터에 엑세스하는 응용프로그램이 대규모 정렬(Sort)을

이용한다고 할때 임시 Segment에 대한 충분한 영역이 있어야 한다.

즉 select~ order by등의 Query를 사용하면 정렬이 필요하게 되겠죠.

 

4. Table생성시 사용되는 Storage Parameter

 

4. Table생성시 참조되는 Storage Parameter

-INITIAL

초기 테이블이 생성될 때 차지하는 크기를 정한다.

미리 데이타가 저장될 사이즈 만큼의 값을 계산하여 사용하는 것이 제일 좋다.

테이블이나 인덱스 마다 값이 다르다.

-NEXT

initial 에서 정한 만큼의 공간이 다 사용되었을 때 다음 번으로 추가되는 공간의 크기를 정한다.

테이블이 달라도 가능한 동일한 값을 통일하여 사용하면 테이블이 삭제되고 다시 생성하는 과정에서 발생하는 공간의 활용도를 최대한 높일 수 있다.

-PCTINCREASE = 0

next 값이 사용될 때 증분되는 비율값을 설정한다.

디폴트 값은 50 으로 설정되어있으나 꼭 0 으로 셋팅하여 사용하기를 권한다.

-FREELIST

insert 작업 시 미리 사용 가능한 블럭을 리스트하고 있다가 할당하는 곳이다.

insert 작업이 많이 발생하는 테이블이나 인덱스에서는 이 값을 증가시켜 빈 블럭을 할당받기 위해 대기하는 일이 없도록 한다.

-PCTFREE

수정 시 늘어나는 데이타를 수용하기 위한 공간이다.

디풀트는 10 이나 빈번히 수정이 되면서 null 이었다가 데이타가 채워지는 경우는 이 값을 약 20 혹은 30 까지 크게 설정한다.

-PCTUSED

재사용되기 위해 필요한 블럭의 충진도 값을 설정한다.

디폴트는 60이나 입력, 삭제가 자주 발생하지 않는 경우는 90 정도로 큰 값을 설정하고, 수정작업이 자주 발생하면서 로우 사이즈가 증가할 때에는 40 정도로 낮은 값을 설정한다.

 

Storage Paramter에 대한 설명은 강좌의 앞부분에도 자세히 나와있다.

 

5. Table Create 예제

CREATE TABLE info (

nm VARCHAR2(20) NOT NULL,

pyoung NUMBER(5) NOT NULL,

from_ho NUMBER(5) NULL,

to_ho NUMBER(5) NULL,

price NUMBER(12) NOT NULL,

underground VARCHAR2(1) NOT NULL,

regi_ilsi date NULL,

CONSTRAINT PK_INFO

PRIMARY KEY(nm)

USING INDEX TABLESPACE users_idx

STORAGE(INITIAL 1M NEXT 500K)

) TABLESPACE users

STORAGE(INITIAL 2M NEXT 1M);

 

위의 예제에서는 Table을 만들면서 Primary Constraints도

생성을 하였는데, 물론 Table만 먼저 만들고 Primary Key Constraints는

나중에 만들어도 된다.

Primary Key를 만들면서 이를 Index로 이용하겠다는 의미이며

Index는 Table이 생성된 Device(Disk)가 아닌 다른 Disk에 저장하는 예제이다.

 

 

아래의 예를 보자

CREATE TABLE info (

nm VARCHAR2(20) NOT NULL,

pyoung NUMBER(5) NOT NULL,

from_ho NUMBER(5) NULL,

to_ho NUMBER(5) NULL,

price NUMBER(12) NOT NULL,

underground VARCHAR2(1) NOT NULL,

regi_ilsi date NULL

) TABLESPACE users

STORAGE(INITIAL 2M NEXT 1M);

 

alter table info add (constraints primary key pk_info (nm)

using index tablespace user_idx

storage(initial 1m next 500k));

 

이 경우엔 Table만 먼저만들고 나중에 Primary Key를 추가하였다.

 

6. Table변경시는 Alter Table 명령을 이용한다.

아래는 사용예이다.

 

- 하나의 Column을 추가 하는예(맨뒤에 추가된가._

alter table info add (test_cilumn varchar2(2) null);

 

- next값을 바꾸는 예

alter table info storage (next 2m);

 

- 참고로 Table의 이름을 바꾸고자 할때는 아래와 같이 한다.

rename info to myInfo;

myInfo로 Table의 이름을 변경하였다.

 

7. Table의 삭제

- Drop Table명령을 사용한다.

- Cascade Constraints Option을 이용하면 관련된 Constraints를

조건을 삭제한다. 예를들면 삭제할 Table이 다른 Table의 외래키로

언급되는 Primary Key등을 포함하거나 자식 Table의 Foreugn Key

제약 조건등이 삭제된다.

- Table삭제되면 관련된 Index및 Trigger도 같이 삭제된다.

- 동의어(Synonym)은 남아 있으나 사용하면 오류가 나겠죠.

- 삭제된 Table에 대한 종속된 View나 PL/SQL 프로그램 등은 남지만

사용할수가 없겠죠.

- 삭제된 Cluster화되지 않은 Table에 할당된 모든 확장 영역은

TableSpace의 빈영역으로 되돌려지며 새 확장영역이나 개체가 필요한

개체에의해 사용할수 있게 된다.

- Cluster화된 Table인 경우 Table에 해당되는 모든 행은 클러스터 블록에서

삭제된다.

- 예

drop table info cascade constraints;

drop table info;

[Top]
No.
제목
작성자
작성일
조회
12063Oralce 9iR1, R2 을 Redhat 7.x, Advanced Server에 설치할 경우 생기는 에러에 대한 처리 방법
문태준
2002-09-26
10982
12031오라클 클라이언트 설치 가이드
정재익
2002-09-22
12351
11952TNS and TNS Listener
정재익
2002-09-07
16873
11951테이블 관리
정재익
2002-09-07
12986
11950데이타 딕셔너리 (Data Dictionary)
정재익
2002-09-07
11502
11949제어파일(Control File) 관리
정재익
2002-09-07
9394
11948IMPORT and EXPORT
정재익
2002-09-07
13152
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2020 DSN, All rights reserved.
작업시간: 0.012초, 이곳 서비스는
	PostgreSQL v13.1으로 자료를 관리합니다