데이터베이스

뿌엑·2022년 4월 16일
0

정보처리기사

목록 보기
12/20

트랜잭션

  • 인가받지 않은 사용자로부터 데이터를 보장하기 위해 DBMS가 가져야 하는 특성
  • 데이터베이스 시스템에서 하나의 논리적 기능을 정상적으로 수행하기 위한 작업의 기본 단위

트랜잭션 특성

  • 원자성(Atomicity)
    • 분해 불가능한 작업의 최소 단위
    • 연산 전체가 성공 혹은 실패
    • 하나라도 실패한다면 전체가 취소돼야 함
    • Commit/Rollback, 회복성 보장
  • 일관성(Consistency)
    • 트랜잭션 실행 성공 후 항상 일관된 데이터베이스 상태를 보존해야 함
    • 무결성 제약조건, 동시성 제어
  • 격리성(Isolation)
    • 트랜잭션 실행 중 생성하는 연산의 중간 결과를 다른 트랜잭션이 접근 불가한 속성
    • Read Uncommited, Read Commited, Repeatable Read, Serializable
  • 영속성(Durability)
    • 성공 완료된 트랜잭션 결과는 영속적으로 데이터베이스에 저장됨
    • 회복기법

트랜잭션 제어

  • 트랜잭션 제어 언어는 TCL(Transaction Control Language)라고 하며, 트랜잭션의 결과를 허용하거나 취소하는 목적으로 사용되는 언어를 가리킨다.

트랜잭션 상태

  • 활동 상태(Actice)
    • 초기 상태, 트랜잭션이 실행 중일 때의 상태
  • 부분 완료 상태(Partially Committed)
    • 마지막 명령문이 실행된 이후의 상태
  • 완료 상태(Committed)
    • 트랜잭션이 성공적으로 완료된 이후의 상태
  • 실패 상태(Failed)
    • 정상적인 실행이 이뤄질 수 없을 때의 상태
  • 철회 상태(Aborted)
    • 트랜잭션이 취소되고 데이터베이스가 트랜잭션 시작 전 상태로 회귀한 상태

TCL 명령어

  • COMMIT
    • 트랜잭션을 메모리에 저장
  • ROLLBACK
    • 트랜잭션을 저장하지 않고 취소시킴
  • CHECKPOINT
    • ROLLBACK을 위한 시점 지정

병행 제어(일관성 주요 기법)

  • 병행 제어는 다수 사용자 환경에서 여러 트랜잭션을 수행할 때, 데이터베이스 일관성 유지를 위해 상호작용을 제어하는 기법이다.

병행 제어 미보장시 문제점

  • 갱신 손실(Lost Update)
    • 먼저 실행된 트랜잭션의 결과를 나중에 실행된 트랜잭션이 덮어쓸 때 발생하는 오류
  • 현황 파악오류(Dirty Read)
    • 트랜잭션의 중간 수행결과를 다른 트랜잭션이 참조하여 발생하는 오류
  • 모순성(Inconsistency)
    • 두 트랜잭션이 동시에 실행되어 데이터베이스의 일관성이 결여되는 오류
  • 연쇄복귀(Cascading Rollback)
    • 복수 트랜잭션이 데이터 공유시 특정 트랜잭션이 처리를 취소하는 경우 다른 트랜잭션이 처리한 부분에 대해 취소 불가능

병행 제어 기법의 종류

  • 로킹(Locking)
    • 같은 자원을 액세스하는 다중 트랜잭션 환경에서 DB의 일관성과 무결성을 유지하기 위해 트랜잭션의 순차적 진행을 보장하는 직렬화 기법
  • 낙관적 검증
    • 트랜잭션이 검증없이 트랜잭션을 수행하고, 트랜잭션 종료시 검증을 수행하여 데이터베이스에 반영
  • 타임 스탬프 순서(Time Stamp Ordering)
    • 트랜잭션을 식별하기 위해 DBMS가 부여하는 유일한 식별자인 타임 스탬프를 지정하여 트랜잭션 사이 순서를 미리 선택

데이터베이스 고립화 수준(격리성 주요 기법)

  • 고립화 수준은 다른 트랜잭션이 현재의 데이터에 대한 무결성을 해치지 않기 위해 잠금을 설정하는 정도이다.

고립화 수준 종류

  • Read Uncommitted
    • 한 트랜잭션에서 연산(갱신) 중인 데이터를 다른 트랜잭션이 조회하는 것을 허용함
    • 연산(갱신) 중인 데이터에 대한 연산은 허용하지 않음
  • Read Committed
    • 한 트랜잭션에서 연산(갱신)을 수행할 때, 연산이 완료될 때까지 연산 대상 데이터에 대한 조회를 제한함
    • 연산이 완료되어 커밋된 데이터는 다른 트랜잭션이 조회하는 것을 허용한다.
  • Repeatable Read
    • 선행 트랜잭션이 특정 데이터를 읽을 때, 트랜잭션 종료시까지 해당 데이터에 대한 갱신·삭제를 제한함
  • Serializable Read
    • 선행 트랜잭션이 특정 데이터 영역을 순차적으로 읽을 때, 해당 데이터 영역 전체에 대해 접근을 제한함

회복 기법(영속성 주요 기법)

  • 회복 기법은 트랜잭션을 수행하는 도중 장애로 인해 손상된 데이터베이스를 손상되기 이전의 정상적인 상태로 복구시키는 작업이다.

데이터 정의어(DDL; Data Definition Language)

  • 테이블과 같은 데이터 구조를 정의하는데 사용하는 명령어
  • 특정 구조를 생성, 변경, 삭제하는 명령어를 DDL이라 한다.

DDL 대상

  • 도메인
  • 스키마
  • 테이블
  • 인덱스

명령어

  • CREATE -> 생성
  • ALTER -> 수정
  • DROP -> 삭제
  • TRUNCATE -> 테이블 내용 삭제(초기화)

인덱스

  • 인덱스는 테이블에 대한 조회 속도를 향상시키는 자료 구조이다.
  • 인덱스는 테이블의 특정 레코드 위치를 알리는 용도로 사용된다.

특징

  • 기본키(PK) 컬럼은 자동으로 인덱스가 생성된다.
  • 테이블의 컬럼에 인덱스가 없다면 테이블의 전체 내용을 검색한다(Table Full Scan).
  • 인덱스가 있을 때 빠르게 데이터를 찾을 수 있다(Index Range Scan).
  • 조건절에 '='로 비교되는 컬럼을 대상으로 인덱스를 생성하면 검색 속도를 높일 수 있다.

종류

  • 순서 인덱스(Ordered Index)
    • 데이터가 정렬된 순서로 생성되는 인덱스
    • B-Tree 알고리즘 활용(오름차순/내림차순 지정 가능)
  • 해시 인덱스(Hash Index)
    • 해시 함수에 의해 직접 데이터에 키값으로 접근하는 인덱스
    • 데이터 접근 비용이 튜플의 양과 무관하게 균일
  • 비트맵 인덱스(Bitmap Index)
    • 각 컬럼에 적은 개수의 값이 저장되어 있을 때 선택
    • 수정 변경이 적을 경우 유용(생년월일, 상품번호 등)
  • 함수기반 인덱스(Functional Index)
    • 수식이나 함수를 적용하여 만든 인덱스
  • 단일 인덱스(Singled Index)
    • 하나의 컬럼으로만 구성한 인덱스
    • 주 사용 컬럼이 하나일 경우 사용
  • 결합 인덱스(Concatenate Index)
    • 두 개 이상의 컬럼으로 구성한 인덱스
    • WHERE 조건으로 사용하는 빈도가 높을 때 사용
  • 클러스터드 인덱스(Clustered Index)
    • 기본키(PK)를 기준으로 레코드를 묶어 저장하는 인덱스
    • 저장 데이터의 물리적 순서에 따라 인덱스 생성
    • 특정 범위 검색시 유리함

인덱스 스캔 방식

  • 인덱스 범위 스캔(Index Range Scan)
    • 인덱스 루트 블록에서 리프 블록까지 수직적으로 탐색한 뒤, 리프 블록에서 필요한 범위만큼 스캔하는 방식

  • 인덱스 전체 스캔(Index Full Scan)
    • 수직적 탐색없이 인덱스 리프 블록을 처음부터 끝까지 수평적으로 탐색하는 방식

  • 인덱스 단일 스캔(Index Unique Scan)
    • 수직적 탐색만으로 데이터를 찾는 스캔 방식

  • 인덱스 생략 스캔(Index Skip Scan)
    • 선두 컬럼이 조건절에 빠졌어도 인덱스를 활용하는 스캔 방식

데이터 조작어(DML; Data Manipulation Language)

  • 데이터 조작어는 데이터베이스에 저장된 자료들을 입력, 수정, 삭제, 조회하는 언어이다.
  • SELECT, INSERT, UPDATE, DELETE

집합 연산자

  • 테이블을 집합으로 간주하여 두 테이블 연산에 집합 연산자를 사용할 수 있다.

  • UNION

    • 중복 행이 제거된 쿼리 결과를 반환
  • UNION ALL

    • 중복 행이 제거되지 않은 쿼리 결과를 반환
  • INTERSECT

    • 두 쿼리 결과에 공통적으로 존재하는 결과를 반환
  • MINUS

    • 첫 쿼리와 두 쿼리의 차집합을 반환

데이터 제어어(DCL; Data Control Language)

  • 데이터 제어어는 데이터베이스 관리자가 데이터 보안, 무결성 유지, 병행 제어, 회복을 위해 사용하는 제어용 언어이다.

명령어

  • GRANT
    • 사용 권한 부여
  • REVOKE
    • 사용 권한 취소

데이터 분석 함수

  • 총합, 평균 등의 데이터 분석을 위해 여러 행의 데이터를 처리하는 함수이다.

종류

  • 집계 함수
    • 여러 행 또는 테이블 전체 행에서 하나의 결괏값 반환
  • 그룹 함수
    • 소그룹 간 소계 및 중계 등 중간 합계 분석 데이터를 산출하는 함수
  • 윈도 함수
    • 데이터베이스를 사용한 온라인 분석 처리 용도로 사용하기 위해 표준 SQL에 추가된 기능

그룹 함수

  • 테이블의 전체 행을 하나 이상의 컬럼을 기준으로 컬럼 값에 따라 그룹화하여 그룹별로 결과를 출력하는 함수이다.

그룹 함수 종류

  • ROLLUP
    • 소계를 산출하는 그룹 함수
  • CUBE
    • 결합가능한 모든 값에 대해 다차원 집계를 생성하는 그룹 함수
  • GROUPING SET
    • 집계 대상 컬럼에 대해 개별 집계를 구할 수 있고, ROLLUP과 CUBE와 달리 컬럼 간 순서와 무관한 결과를 얻을 수 있는 그룹 함수

윈도 함수

  • 데이터베이스를 사용한 온라인 분석 처리 용도의 함수이다.

윈도 함수 종류

  • 순위 함수
    • 레코드의 순위를 계산하는 함수
    • RANK, DENSE_RANK, ROW_NUMBER
  • 행 순서 함수
    • 레코드에서 가장 먼저 나오거나 가장 뒤에 나오는 값, 이전/이후의 값들을 출력하는 함수
    • FIRST_VALUE, LAST_VALUE, LAG, LEAD
  • 그룹 내 비율 함수
    • 백분율을 보이거나 행의 순서별 백분율 등 비율과 관련된 통계를 나타내는 함수
    • RATIO_TO_REPORT, PERCENT_RANK

0개의 댓글