학습자료(~2017)/오라클

9. 오라클 - 테이블 관리 및 활용

단세포소년 2011. 3. 15. 19:14
반응형


예 ) CREATE TABLE emp_family(
                                                emp NUMBER(4) NOT NULL,
                                                fam_name VARCHAR2(10) NOT NULL,
                                                ....
                                                CONSTRAINT emp_family_pk PRIMARY KEY(empno,fam_name)
                                               );



테이블 변경
1) ALTER TABLE emp_family ADD (job VARCHAR2(30));
2) ALTER TABLE emp_family MODIFY (job VARCHAR(40) NOT NULL);

테이블 삭제
1) DROP TABLE table;
2) DROP TABLE emp CASCADE CONSTRAINT;    // FOREIGN KEY도 다 함께 삭제 된다. (foreign key 란 다른 테이블의 primary key 를 참조하는 키 입니다.)



컬럼제거
1) ALTER TABLE table DROP COLUMN age;
2) ALTER TABLE table SET UNUSED COLUMN age;
1,2 의 차이점 : DROP COLUMN은 물리적으로 삭제 SET UNUSED COLUMN은 논리적으로 사용안함
3) ALTER TABLE table DROP UNUSED COLUMNS ; 
 - > unused 컬럼들을 물리적으로 삭제





ROW CHAINING(행 연결)


- 행 데이타가 정상적으로 INSERT된 후 삭제작업이 발생하여 하나의 행이 삭제되고 해당블록에는
삭제된 행 크기만큼의 빈 공간이 생김
- 새로운 행 데이타가 입력되면 빈 공간이 존재하는 블록에 데이타가 입력되고 공간부족 현상이 발
생 되면 나머지 데이타가 새로운 블록에 입력된다.

==> SELECT 문에 의한 데이타 검색시 성능 저하현상 발생.





ROW MIGRATION (행 이주)




행 데이타영역에 사용자가 입력한 데이타들이 모두 입력되어 저장공간이 없는 경우
기존 데이타의 변경작업이 일어나면 변경에 의해 저장할 수 있는 공간이 없게된다.
이런 경우 오라클 서버는 변경할 수 없었던 행들을 모구 새로운 블록으로 이동시킨 후 변경작업 수행
==> 행이주(Row-Migration)

- 주로 VARCHAR2 타입을 가진 컬럼에서 발생.
- Row_Migration이 발생한 테이블릐 해당 행을 검색하면 오라클서버는 처음에 데이카가 저장되어
있는 블록을 먼저 검색하고 해당 행이 다른 블록으로 이주되어 있으면 이주된 블록을 다시 읽어
데이타를 검색
- 하나의 행을 검색하기 위해 여러개의 블록을 읽어야 데이타를 가져올 수 있기때문에
검색속도 저하. ( SELECT문 처리시 데이타 검색속도 저하)




PTCTREE 파라메터



ex)
PTRFREE=10 <== 테이블이 생성될 때 할당된 블록의 행 데이터 영역의 크기에서 10% 공간을
INSERT문 실행시 사용하지 말고 블록 내에 데이타 변경(UPDATE)시만 사용하기 위해
미리 확보.
- 행들의 변경이 발생하면 같은 블록내에 변경된 정보를 저장할 수 있기 때문에
한번의 블록 읽기를 통해 원하는 행 참조 가능.
- PTCFREE크기 산정시 평균행의 크기와 초기 행의 크기는 DBA_TABLES 자료사전에서
해당 테이블 정보 참조.

ANALYZE TABLE [table_name] COMPUTE STATISTICS



PCTUSED

PCTUSED


PCTUSED ?


오라클 서버가 테이블의 각 데이터 블록에 대해 유지하려는 사용 공간의 최소 백분율로써
데이터 세그먼트에 대해 지정합니다


ex) PCTUSED 40

-->테이블의 데이터 세그먼트에 사용된 데이터 블록의 사용영역이 39%보다 적어지지 않으면
새로운 행을 삽입할 수 없음을 의미 합니다.


◈ PCTUSED의 기본값은 40% 입니다.


◈ PCTUSED값이 적을 경우

- 블록이 재사용되는 일이 적어질 수 있으므로 처리 비용이 감소 합니다.

- 데이터베이스에서 사용되지 않은 공간이 증가 합니다.


◈ PCTUSED값이 클 경우

- 블록이 재사용되는 일이 많아질 수 있으므로 처리 비용이 증가 합니다.

- 공간 사용도를 향상 시킵니다.


PCTFREE와 PCTUSED값을 선택하는 예

UPDATE시 ROW의 크기가 증가 될 때
- PCTFREE = 20
- PCTUSED = 40

② Insert, Delete가 자주 발생하지만 Update시 ROW의 크기가 증가 되지 않을 때
- PCTFREE = 5
- PCTUSED = 60

③ 테이블이 매우 크지만 대부분 Read Only Transaction 일 때
- PCTFREE = 5
- PCTUSED = 90

 

 




 

 


반응형