85-1 데이터를 저장하는 용도로 만들어진 테이블
 
일반테이블 - 데이터가 들어오는 순서 대로 저장
파티션테이블 - 테이블이 너무 클 경우 여러 조각으로 나눔. 종류,쓰는방법 - 9가지 (밖에서 무조건 쓴다.)
IOT(Index-organized table) - 많이씀
 
 
 
85-3 ROWID
 : 오라클 데이터의 주소
오라클의 모든 데이터도 주소를 다 가지고 있다.
주소를 알면 데이터를 금방 찾아낼 수 있다.
 
ex)
select * from dept;
select rowid,deptno,dname,log from dept;
 
80bit = 10byte
Extended rowid 순서
테이블스페이스번호 / 파일번호 / 블락번호 / 로우번호
 
※  인덱스(키값/로우아이디) = rowid를 별도로 관리 하는 테이블
 
 
85-4
Row 구조
DB block
Row header / 컬럼길이 / 실제값 / 컬럼길이 / 실제값
 
 
 
 
 
86-2
테이블을 만들때 가이드라인
 
테이블스페이스 1개 → 여러테이블
Ex) 은행 → 각 은행 테이블 한꺼번에
테이블스페이스 여러개 → 여러테이블 : 따로만들어서 분리
Ex) A은행,B은행,C은행 → 해당테이블스페이스에 각 은행 테이블
 
- 테이블스페이스를 분리해서 집어 넣어라.(성능상좋음)
- LMT사용
- 블락 사이즈 적절히
 
 
 
 
 
86-3 Temporary Tables (잘안씀)
 : 트렌젝션이나 세션이 있는 동안에만 유지 - 끄면 테이블 없어짐
Ex) 개발자들이 원본(고객) 테이블을 바꿀수 없으니 (고객1), (고객2)...(고객10) 으로 만들어두고 안지움.
    DB가 쓸데없는 테이블들로 복잡해진다.
용도 : 개발용으로 임시적으로 생성해서 사용
       작업 끝나면 이름만 남아있고 데이터 자동 지워짐
단점 : 개발기간이 길어서 쉬기위해 컴퓨터 끄거나 닫으면 테이블 없어짐
 
 
 
 
 
87-1
Row migration : 업데이트 일어났을때 하나의 row에 저장 못 되어서 이동
Row chaining : 데이터가 너무커서 여러개의 블락에 데이터가 같이 저장되는 현상
 
Ex)char : 최대 2000byte, varchar2 : 최대 4000byte
그보다 더 큰 자료 - LOB(Large Objection) : 컬럼 하나에 다 저장되는 대량자료(책한권, 연극대본,국회도서관)
 
 
Row migration많다 = 데이터100건 중 Row migration 60건 = 데이터 읽으려면 첫번째 블락 100번읽고 두번째 블락 60번 더읽음
                 → 처음부터 2번째 블락으로 오게 만들어주기 (DBA업무)
 
 

 

 
87-3 익스텐트 할당
테이블에 익스텐트 미리 할당 = 하드디스크에서 해당 테이블의 데이터가 모여서 들어갈수 있게 미리 공간을 할당
(= 식당예약)
→ 10g 이상에서는 안해줘도 크게 상관은 없음
※ 왜 할당하는가? : 같은 테이블끼리는 데이터를 모아두기 위해서
 
SQL> alter table hr.employees
  2  allocate extent (size 500k
  3  datafile '/disk3/data01.dbf');
 
 
 
 
 
 


☆ 이번장의 핵심 = 리오그
87-4 Reorganization
(리오그 - 재구성)
 
 
Ex) KB 테이블 스페이스 - 고객테이블 100만건 (용량 100M) → delete 로 1만건 남김 (용량 100M)
                                                           = 1M로 만드는 방법 : 리오그
KB2 테이블 스페이스 - 이쪽으로 옮기면 1만건 옮겨가고 (용량 1M) 된다. -②
 
테이블 용량 줄이는 방법은? (리오그 하는 방법은?)
 
① export / import 이용
② 테이블 스페이스 이동시키면 된다.
  ※ 하고나서 주의사항 : 인덱스까지 재생성 or Rebuild
     이유 : 테이블 스페이스가 바뀌었기 때문에(인덱스안의 RowID에는 테이블스페이스번호 맨앞부분에 포함되어있음)

 
SQL> Alter table hr.employees
     move tablespace data1;


 
 
 
 
 
88-1 Truncating a table
 
SQL> truncate table hr.employees;
 
인덱스도 다 지워진다.
 
 
88-2
 
SQL> drop table hr.department cascade constraints;
 
 
 
 
88-3 dropping a column
 
SQL> ALTER TABLE hr.employees
  2  DROP COLUMN comments
  3  CASCADE CONSTRAINTS CHECKPOINT 1000;
 
CASCADE CONSTRAINTS : 제약조건까지 지워라 (제약조건중 FK 걸린것)
CHECKPOINT 1000 : 데이터가 많을 경우 바로 반영해라. 1000건 지우면 바로 반영해라.
※ 참고 : ALTER (rollback 안됨. DDL명령어 = 수행되고 commit이 됨)
 
Ex) 100억건 지우라고 명령 → 작업 끝나고 commit떨어진다.
    50억개 지우는 중간에 다른사용자는 원래 100억건 조회가능
    (오라클입장:전부 다 지워지기 전에 100억건 다 가지고 있어야 함)
    100억건 중 90억건 지운상태에서 서버 꺼짐 → 다시켜면 롤백되어서 남아있음
 
 
 
 
88-4
밖에서 : 함부로 치지 않아야 하는 대표적인 명령어 → ALTER
ALTER 명령어 : 우선순위라 select 사용자 뒤로 밀림(= 부하를 많이줌 = DB느려짐)
 
 
업무시간에 ALTER함부로 할수 없다.
 
1. 나중에 지울 것이라고 체크해두기
SQL> ALTER TABLE hr.employees
  2  SET UNUSED COLUMN comments CASCADE
  3  CONSTRAINTS;
 
 
2. 위에서 체크해둔 컬럼 한번에 다 지워짐
SQL> ALTER TABLE hr.employees
  2  DROP UNUSED COLUMNS CHECKPOINT 1000;
 
※ 사용안함 : SET UNUSED COLUMN으로 걸어 놓은것은 취소가 안된다.
 
 
 
※ 업무 특성상 잘 알고 있을것들
 : 컬럼 추가, 테이블이름 바꾸기, 컬럼지우기, 컬럼이름 바꾸기, 옮기기
Posted by 딩구르
,