마이그레이션 : 데이터를 이전하는 작업
 
OS같고, 오라클 버전 같으면 파일 넘겨도 상관없다.
OS같고, 오라클 버전 다르면 전문적으로 방법 따로 있다.
 
AS-Is에 있는 자료를 file로 → export
file에 있는 자료를 To-BE로 → import
 
Ex)
밑바탕 :
A컬럼에 제약조건 Not Null 걸려있다.
A컬럼에 100만건 입력하고 싶다 = 100만번 검사를 해야 한다.
건당 Null 값 유무 검사해서 넘긴다.(=100만건일 경우 100만번)
 
상황 :
구DB(AS-Is)의 고객테이블-A컬럼에 제약조건N/N, 데이터100만건 이다.
                                  → 상식적으로 A컬럼엔 Null값이없다.
 
신DB(To-BE)의 고객2 테이블의 A컬럼(N/N제약조건 걸려있는..)에 복사하려고한다.
기존데이터가 Null값이 없는게 확실하므로 검사없이 그대로 입력하면 된다.
대상테이블의 제약조건 N/N을 사용안함으로 해놓고
(Null없는게 확실해서 쓸데없이 검사 할 필요없으니..)
고객테이블 A컬럼(N/N 제약조건 걸려있어서 자료들 Null없음)의 데이터를 옮긴다.
 
할일 : 제약조건을 일시적으로 사용안함으로 해놓고 자료 옮기고 다시 사용함으로 만들기
→ 제약조건이 걸려있을때, 일시적으로 사용안함으로 만드는 방법(2가지)
   작업이 끝나면 사용함으로 만드는 방법(2가지)
 
 
 
 
98-1 데이터 무결성 Data Integrity
틀린 데이터 못 들어오게 하고 맞는 데이터만 들어오게 하는 것
 
- 트리거
- 제약조건
 
 
 
 
98-2
제약조건 5가지
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
 

1. 의미알고있기
2. 설정해서 사용하는법 알기
① 테이블 만들때 어떻게 설정하는가?
② 만들어진 테이블에 추가하는법
 
 
 



 


☆- 이장의 핵심
98-3 제약조건 - 필요에 따라 사용안함 사용함 설정하는 법
 
1. 제약조건 사용안함 (DISABLE)
  - DISABLE NOVALIDATE : constraint 없는것과 동일 = 데이터 마구 들어온다.
    (기본값)
  - DISABLE VALIDATE : 데이터 못 들어옴
                       ※ = 해당 테이블만 읽기전용
                            : 특정 테이블에 constraint걸어두고, 그 테이블을 DISABLE VALIDATE로 바꾸면 데이터 변경이 안된다.
기억
① 전체다 : KB 테이블스페이스 안에 테이블 100개 읽기전용(select만)
  SQL> alter tablespace KB read only;     (다시읽기쓰기하게 : read write)
2. 테이블 단위로 읽기 전용 : 대출 테이블만 읽기 전용 = ?
 
  
DISABLE로 데이터 입력 완료후 다시 ENABLE로 만들어야 한다.
 
 
2. 제약조건 사용함 (ENABLE)
 
Ex) 고객테이블 제약조건 DISABLE시켜두고 데이터 100만건 입력완료후 ENABLE 시킴
→ A컬럼에 제약조건 N/N DISABLE시키고 데이터 100만건 입력완료후
   ENABLE 시킬때 - ⓐ ENABLE NOVALIDATE 로 ENABLE 시키면 들어온 데이터 Null여부 검사안함, 앞으로 새로 들어온 데이터만 검사한다.
                 - ⓑ ENABLE VALIDATE로 ENABLE 시키면 들어온 데이터 Null여부 검사하고, 앞으로 새로 들어오는 데이터도 검사한다.
 
ⓐ ENABLE NOVALIDATE : 지금 들어와 있는 데이터는 검사안하고, 새로운 데이터만 검사함
 
ⓐ 기존테이블에 락 안 건다 → 기존 테이블 바꿀수 있다.
이유 :  기존데이터 검사 할 필요 없으니까..
 SQL> ALTER TABLE hr.departmnets
   2  ENABLE NOVALIDATE CONSTRAINT dept_pk;
 
 
ⓑ ENABLE VALIDATE : 둘다 검사
   (기본값)
 
ⓑ 기존테이블에 락을 건다 → 기존 테이블을 못 바꾸게 한다.
이유 : 지금 들어와 있는 데이터가 이상 없나 검사해야 하기 때문에..
 SQL> ALTER TABLE hr.employees
   2  ENABLE VALIDATE CONSTRAINT emp_dept_pk;
 
ex) 은행 고객테이블에 ENABLE VALIDATE걸면 고객중 비번 바꾸고 싶을때 못바꾼다.(업무시간외에 사용권장)
 
※ ⓑ ENABLE VALIDATE 할때, 데이터에 문제가 있으면 죽는다.
      : 문제가 있을때는 내용을 어디에 적어라 → EXCEPTIONS
                                                : enable시킬때 문제있는 부분 적는 테이블
                                                  수동으로 만들어 놓아야 한다. → utlexcptl.sql
 
 
※ 참고 : 기본값
SQL> alter table emp disable constraint; → DISABLE NOVALIDATE
SQL> alter table emp enable constraint; → ENABLE VALIDATE
 
-☆
 
 Ex) 테이블 disable 시키고 데이터 10억건 부은후 enable시켰다.
     N/N 이 걸린 컬럼이어서 enable 시켰을때 ENABLE VALIDATE(디폴트)로 실행됨 → Null값 없어야 enable 성공된다.
     중간에 Null값 있어서 에러띄우고 죽어버림 : ※ 데이터를 넘길때 에러나면 찾아내서 고치는기술 연마하기
 
 
 



 


98-4 99-1 constraint checking
 
① DEFFERRED commit 들어오면 몰아서 한번에 체크 : 1번에 모아서 체크 - 부하 적게 걸림
② IMMEDIATE 각 테이터마다 한건한건 즉시체크 (기본값) : 컬럼 10개면 10번체크 - 부하 많이거림
 
 
ex) 회원가입할때 항목 넣기 - ① 전부 입력하고 완료 버튼 누를때 틀린항목 에러띄우고 다 지워짐
                             ② 한항목 입력하면 바로 틀렸는지 유무 알려줌
 
 
 
 
 
 
 
99-2
Foreign Key 걸려있을때 무시하고 parent table 지우기 옵션 : cascade constraints
 
 
 
99-3
유니크인덱스 : P.K와 UNIQUE 설정하면 오라클이 자동으로 유니크인덱스 만들어줌.
               테이블과 인덱스는 무조건 다른 테이블스페이스에 들어가야 한다.
               옵션에 USING INDEX절에 인덱스테이블 스페이스 지정해줘라.
                      TABLESPACE indx 유니크인덱스는 여기에 집어 넣어라.
               → USING INDEX tablespace indx
 
 
 
99-4
인덱스를 저장할 테이블스페이스를 별도로 적어 줘야 한다.
                → USING INDEX tablespace indx
 
 
 
 
 
100-1
기존 테이블에 락이 안걸린다.
 
ALTER TABLE hr.departmnets
ENABLE NOVALIDATE CONSTRAINT dept_pk;
 
 
 
 
100-2
 
기존테이블에 락을 건다 → 기존 테이블을 못 바꾸게 한다.
이유 : 지금 들어와 있는 데이터가 이상 없나 검사해야 하기 때문에..
※ 문제가 있으면 죽는다.
 → 문제가 있을때는 내용을 어디에 적어라 → EXCEPTIONS
ALTER TABLE hr.employees
ENABLE VALIDATE CONSTRAINT emp_dept_pk;
 
ex) 은행 고객테이블에 ENABLE VALIDATE걸면 고객중 비번 바꾸고 싶을때 못바꾼다.(업무시간외에 사용)
 
 
 
100-3 EXCEPTIONS : enable시킬때 문제있는 부분 적는 테이블
수동으로 만들어 놓아야 한다. → utlexcptl.sql
 
 
※ 이번장에서 알아야 할것
1. 제약조건 5가지 통달
2. disable, enable 할때 만약에 틀린데이터가 들어가 있을때, 어떻게 빨리 찾아서 수정을 하는가? → utlexcptl.sql 테이블 사용법
 

'Oracle > Oracle - Admin' 카테고리의 다른 글

admin 21 - user and security  (1) 2012.01.28
admin 20 - profiles  (0) 2012.01.27
admin 18 - index  (0) 2012.01.27
admin 17 - DATA 관리 - table, column  (0) 2012.01.26
admin 16 - undo data 관리  (0) 2012.01.26
Posted by 딩구르
,