Post

(Oracle) 오라클 개요 및 정리

DBGuide.net 오라클

oracle 장점? 왜 기업에서 오라클을 선호하는가?

  • 성능이 좋고 다양한 옵션이나 기능을 제공한다는 장점도 있긴 하지만, 가장 큰 이유 중 하나는 안정성.
  • 어떤 관점에서 안정성이 좋은가? RAC를 통한 고가용성 =>DB 이중화 / 클러스터링
    • 간단히 정리하면, 스토리지와 오라클 인스턴스를 분리해서 인스턴스에 장애가 나더라도 유실 없이 다른 인스턴스에서 곧바로 Active로 서비스 할 수 있다는 것.

타입 관련 팁

  • 숫자 타입은 NUMBER를 쓰는 것이 좋다.
    • NUMBER(<정수자리 길이제한>, <소수자리 길이제한>)로, 가변길이 타입이다
  • 문자열은 CHAR || VARCHAR2
  • 날짜 저장은 DATE를 사용하는 것이 좋다.
  • 키는 보통 VARCHAR2 or LONG으로 한다. 단, VARCHAR2는 공백이 들어갈 수 있다는 점 감안해야 한다.
  • 핸드폰 번호 같은건 “-“를 떼고 문자 타입으로.
    • ”-“가 포함 되어 있으면 데이터 정합성에 좋지 않음
    • 속도에도 좋지 않음
      • 010-1234-567이나 010-123-4567이나 모두 같은 번호인데 중복 체크하려면 함수를 써야한다.
      • 이렇게 함수를 쓰면 인덱스가 안걸려 느리다
  • 어떤 타입을 쓰든, 들어와야 하는 형식을 제약해야 하는 경우 CONSTRAINT를 적극 사용할 것.
NOT IN 할 때, null인 컬럼은 조회 결과에 포함되지 않는다.

주의 해야 할 점. NOT IN (1, 2, 3) 이면, (1, 2, 3, null)이 아닌 항목들만 조회 결과에 포함된다.

DB Query Pool

  • SELECT \* FROM TRAD WHERE TID=?
  • DB는 쿼리가 들어오면 다음 과정을 수행한다.
    • 문법에 맞는지 체크
    • TRAD, TID 등이 있는 테이블인지, 있는 컬럼인지 체크
    • 파라미터 바인딩
    • 쿼리 수행
  • 여기서 문법에 맞는지 체크, 있는 테이블인지 체크 하는 부분을 매번 수행하지 않기 위해 일종의 Pool에 쿼리를 위와 같은 형태로 저장해둔다. 이 때 SQL마다 유니크한 ID를 부여한다.
  • SQL ID는 통계를 낼 때 사용한다.
  • 통계 시 보기 편하게 하기 위해, 다음과 같은 형식으로 주석을 달기도 한다.
    • SELECT /\* UserMapper.selectUserList \*/

FK 걸 때 주의해야 할 점?

Oracle CONSTRAINT clause

  • FK의 ON DELETE 기본 옵션은 NO ACTION
    • 삭제하고자 하는 항목이 참조되는 중이라면 삭제 불가.
  • NO ACTIONRESTRICT의 차이?
    • NO ACTION means to allow the change if the new value in the child table is still valid after statement and all the triggers are completed (i.e. still found in the parent table of the relationship),
      • 즉, 일단 query를 실행해본 다음, trigger 하기 전에 실행 결과 상태에서 무결성 체크하고, 위배 시 statement를 거절하는 방식.
    • while RESTRICT means that changing the value is not allowed at all (no change or delete is allowed if there are child records).

      • 트랜잭션 내에서 무결성 제약조건 위배하는 순간 rollback.
      • 쿼리 실행 결과가 정상적일지라도, 레코드가 참조되고 있으면 변경을 아예 허용하지 않음.

오라클 버전 관련

This post is licensed under CC BY 4.0 by the author.