네이버클라우드 캠프 5기/학습내용 정리

17. ORACLE - Object

박세류 2023. 5. 2. 09:54

1. 객체

1. 객체란

  1. 오라클의 객체는 데이터 보관 및 관리를 용이하게 하기 위한 저장 공간 및 기능을 제공하는 역할을 한다.
  2. 객체의 종류로는 데이터 사전, 인덱스, 테이블, 뷰, 시퀀스, 동의어 등 다양한 종류의 객체가 존재한다.

2. 데이터 사전(Data Dictionary)

  1. 오라클의 데이터 저장공간은 사용자 정의 테이블과 데이터 사전으로 나뉘게 된다.
  2. 데이터 사전은 데이터베이스를 구축하고 구성/운영하는 데 필요한 모든 정보를 저장하는 특수한 테이블. 데이터베이스 서버를 구축하는 순간 그 시점에 자동으로 생성.
  3. 데이터 사전은 메모리, 성능, 권한, 객체, 사용자 등 데이터베이스 운영에 필요한 전반적인 정보들을 저장하고 있다. 이런 데이터들에 문제가 생기면 데이터베이스 자체를 사용하지 못할 수도 있다.
  4. 데이터 사전에 사용자가 직접 접근해서 데이터조작을 하지 못하도록 설정되어 있다. SELECT 구문으로 정보들만 확인할 수 있는 데이터 사전뷰를 제공한다.
  5. 데이터 사전 뷰
    • USER_xxxx : 현재 데이터베이스 접속한 사용자가 소유한 객체들의 정보를 제공
    • ALL_xxxx : 현재 데이터 베이스에 접속한 사용자가 소유한 객체들 또는 다른 사용자가 소유한 객체 중 권한을 가지고 있는 객체의 정보들을 제공. 현재 데이터베이스에 접속한 사용자가 사용할 수 있는 모든 객체의 정보를 제공.
    • DBA_xxxx : 데이터베이스 관리를 위한 정보를 제공(SYS 계정으로만 사용가능)
    • V$_xxxx : 데이터베이스의 성능 관련 정보를 제공

3. INDEX

  1. 인덱스는 색인을 테이블에 추가하는 것을 의미
  2. 테이블의 검색속도를 향상시키기 위해 열에 색인을 추가하는 객체
  3. 일반적으로 인덱스가 추가되지 않은 테이블에서는 데이터 저장이 저장순서와 무관하게 입력되고 검색할 때 테이블을 풀 스캔하여 검색. 따라서 검색속도가 느려진다.
  4. 인덱스를 지정한 테이블에서는 인덱스로 지정된 컬럼만 따로 시스템 테이블에서 관리. 인덱스를 기준으로 데이터가 정렬돼서 저장되고 검색할 때도 인덱스 기준으로 검색되기 떄문에 검색속도가 향상된다.
  5. 인덱스의 종류는 고유 인덱스(UNIQUE INDEX)와 비 고유 인덱스(NON UNIQUE INDEX)로 분류할 수 있다.
    • 고유 인덱스(UNIQUE INDEX)
      • 중복 값이 허용되지 않는 인덱스
      • 제약조건 중 PK(Primary Key), UK(Unique Key)로 지정된 컬럼은 자동으로 고유 인덱스로 지정됨
    • 비 고유 인덱스(NO UNIQUE INDEX)
      • 중복 값이 허용되는 인덱스
      • 무조건 수동으로 인덱스를 생성해줘야 함
  6. 인덱스 생성 조건
    • 적어도 데이터가 수천만건 이상되는 테이블에 생성
    • 테이블의 크기가 작으면 인덱스의 효율이 떨어짐
    • 조건구문이나 조인절, 서브쿼리절에 자주 사용되는 컬럼에 지정
    • 검색하는 데이터의 양이 전체 데잍너의 5% 미만일 때
      ex) 데이터가 10,000,000건 -> 검색 데이터가 500,000건
    • FK(Foreign Key) 컬럼은 반드시 인덱스를 생성
  7. 인덱스 생성 방법
    • 자동 생성 방법
      • PK, UK 지정된 컬럼은 인덱스가 자동으로 생성됨
      • 고유 인덱스로 생성됨
    • 수동 생성 방법
      • CREATE INDEX 인덱스명
        ON 테이블명 (컬럼 or 함수 or 수식);
  8. 인덱스 삭제 방법
    • DROP 인덱스명;

4. 뷰(View)

  1. 뷰는 가상 테이블의 역할을 하는 객체로 SELECT 구문의 결과를 저장하는 테이블.

  2. 물리적인 데이터를 저장하는 게 아니고 SELECT 구문의 결과인 논리적인 데이터 테이블을 저장하여 사용하는 목적을 가진 객체.
    SELECT 구문의 원본 테이블의 데이터가 변경되면 VIEW의 데이터도 영향을 받아서 자동 변경됨.

  3. 뷰의 사용 목적

    • 편리성 : SELECT 구문이 복잡해지면 작성하기 까다로워지는 데 복잡한 SELECT 구문을 분리해서 VIEW로 생성할 경우 SELECT 구문의 복잡성을 낮출 수 있다.
    • 보안성 : SELECT 구문의 원천 테이블에 접근하지 않고 해당 데이터들을 조회만 할 수 있기 때문에 원천 테이블의 데이터를 조작 할 수 없다. 별칭을 사용해서 원천테이블의 컬럼명을 숨길수도 있기 때문에 원천 테이블의 정보를 노출하지 않는다.
  4. 뷰의 종류

    • 단순 뷰 (SIMPLE VIEW)
      • 단일 테이블로 만들어진 뷰
      • 함수나 수식은 포함되지 않고 단순 컬럼의 데이터만 조회해서 만들어진 뷰
      • DML(INSERT, DELETE, UPDATE)의 사용이 가능
      • 단순 뷰는 많이 사용되지 않음
    • 복합 뷰 (COMPLEX VIEW)
      • 다중 테이블이 조인돼서 만들어진 뷰
      • 일반적으로 뷰라고 부르는 테이블의 형태가 복합뷰이다.
      • 함수나 수식을 포함한 쿼리로 생성
      • 여러 개의 테이블이 조인된 형태이기 때문이 DML(INSERT, DELETE, UPDATE)의 사용이 불가능
      • 거의 모든 뷰는 복합뷰의 형ㅌ내로 생성
  5. 뷰의 생성 방법

    • CREATE (OR REPLACE) (FORCE or NOFORCE) VIEW 뷰이름 (
      컬럼1,
      컬럼2,
      컬럼3,
      ....,
      컬럼N
      ) AS (SELECT 구문)
      [WITH CHECK OPTION CONTRAINT 제약조건명]
      [WITH READ ONLY CONSTRAINT 제약조건명];
    • OR REPLACE : 이미 뷰이름으로 생성된 뷰가 존재하면 지금 생성하는 뷰로 대체한다.
    • FORCE : 원천 테이블이 존재하지 않아도 뷰를 생성. 지정하지 않았을때의 기본값은 NOFORCE
    • WITH CHECK OPTION : 뷰에 의해서 검색가능한 행만 DML 구문의 사용이 가능하도록 설정
    • WITH READ ONLY : 뷰를 통해서는 SELECT 구문만 사용가능하도록 설정
  6. 인라인 뷰

    • 인라인 뷰는 FROM절에 사용된 서브쿼리
    • 뷰를 따로 생성하지 않고 SELECT 구문으로 된 가상 테이블을 사용하는 것이기 때문에 뷰라고 볼 수 있다.
    • 조인이나 조건 검색할 때 자주 사용, 그룹함수를 써야할 경우 주로 사용된다.
  7. 뷰의 삭제 방법

    • DROP VIEW 뷰이름;
  8. ORACLE의 ROWNUM

    • ROWNUM은 행번호를 붙여주는 기능
    • 인라인 뷰랑 합쳐졌을 때 최상위 데이터를 조회하는데 유용하게 사용할 수 있다.
    • 인라인 뷰에서 지정컬럼으로 정렬돼있는 데이터에 ROWNUM을 지정하고 조건절에서 ROWNUM에 제한을 걸면 최상위 N데이터를 조회할 수 있다.

5. 시퀀스(Sequence)

  1. 시퀀스는 유일한 숫자를 만들어서 제공해주는 객체
  2. 시퀀스는 게시글 번호와 같이 중복되서는 안되는 컬럼에 지정해서 게시글번호를 시퀀스에서 받아서 사용하는 방식으로 설정을 할 수 있다.
  3. 시퀀스 생성 방법
    • CREATE SEQUENCE 시퀀스명
      START WITH 시작값
      INCREMENT BY 다음값이 될 때 증가할 값
      MAXVALUE 상한값 or NOMAXVALUE
      MINVALUE 하한값 or NOMINVALUE
      CYCLE or NOCYCLE
      CACHE 캐시메모리 생성개수 or NOCACHE;
    • START WITH : 시퀀스를 만들 때 지정할 시작값 설정
    • INCREMENT BY : 현재 값에서 다음 값이 될 때 증가할 증가값
    • MAXVALUE/MINVALUE : 상/하한값지정. 지정 안할 시 기본은 NOMAXVALUE/NOMINVALUE
    • CYCLE : 상한 값까지 도달했을 때 다시 처음 시작 값부터 재생성할지의 여부를 결정. 지정 안할시 NOCYCLE이 기본값
    • CACHE : 캐시메모리 생성 개수를 지정하는 옵션. 기본 값은 NOCACHE. NOCACHE로 지정 시 추가적인 캐시메모리 생성없이 20개로 캐시메모리 지정
  4. 시퀀스의 사용
    • 시퀀스명.NEXTVAL : 시퀀스로부터 다음 값을 할당받음
    • 시퀀스명.CURRVAL : 시퀀스로부터 마지막에 할당받은 값을 재할당받음
  5. 시퀀스의 수정
    • ALTER SEQUENCE 시퀀스명
      INCREMENT BY 증가값
      MAXVALUE
      MINVALUE
      CYCLE
      CACHE;
    • 위에 표기된 옵션들은 수정가능하고 시작번호는 수정이 불가능
  6. 시퀀스 삭제
    • DROP SEQUENCE 시퀀스명;

6. Synonym(동의어)

  1. 오라클의 객체에 별칭을 달아주는 역할을 하는 객체.
  2. Synonym 생성 방법
    • CREATE [PUBLIC] SYNONYM 동의어이름(별칭)
      FOR [사용자.]객체이름;
  3. Synonym 삭제 방법
    • DROP [PUBLIC] SYNONYM 동의어이름(별칭);
728x90

'네이버클라우드 캠프 5기 > 학습내용 정리' 카테고리의 다른 글

19. ORACLE - PL_SQL  (0) 2023.05.02
18. ORACLE - Constraint  (0) 2023.05.02
16. ORACLE - DDL  (0) 2023.05.02
15. ORACLE - DML  (0) 2023.05.02
14. ORACLE - Join & SubQuery  (0) 2023.04.13