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;
|