DB0-1주차 [Oracle Study]

Oracle을 알기 위해 주최 및 진행하고 있습니다 🙂
스터디의 1주차 정리입니다. (스터디는 초보자를 위한 Oracle 12c DBA 편 도서를 기반으로 진행되었습니다.)

위 그림은 오라클의 메모리와 프로세스를 종합적으로 나타내고 있는 그림이며, SGA 와 프로세스는 서로 통신을 하며 작업을 수행하기 위해 반드시 필요한 요소임을 알수가 있습니다.

프로세스 종류

  1. 유저 프로세스 (User Process)
    • 오라클 데이터베이스에 연결하는 응용 프로그램 또는 도구 (예: SQL*Plus)
    • 유저 프로세스는 데이터베이스와 연결하기 전에 리스너 프로세스와 통신함
      • 리스너 프로세스는 서버 프로세스를 생성하여 유저 프로세스와 연결을 맺어줌
  2. 서버 프로세스 (Server Process)
    • 유저 프로세스가 수행이 필요한 SQL과 해당 세션 정보를 가지고 데이터베이스에 요청
    • 데이터베이스로부터 하나의 프로세스를 할당받아, 요청받은 사항을 수행함
  3. 백그라운드 프로세스 (Background Process)
    • 오라클 메모리 구조인 SGA 관리 등 내부적인 작업 수행을 위해 필요한 프로세스

백그라운드 프로세스 종류

  • 필수 백그라운드 프로세스
    • 데이터베이스가 구동되어 운영되기 위해 반드시 필요한 데이터베이스 관리 프로세스
    • 하나라도 문제가 발생하면 데이터베이스는 Shutdown
    • DBWn, CKPT, LGWR, SMON, PMON, RECO, LREG, MMON, MMNL
    • 필수 백그라운드 보충
      1. DBWn (Database Writer): 데이터베이스의 변경 내용을 데이터 파일에 기록하는 프로세스입니다. 주기적으로 메모리의 변경 내용을 디스크에 저장합니다.
      2. CKPT (Checkpoint): 체크포인트를 생성하여 데이터베이스의 일관성을 유지합니다. 데이터베이스의 현재 상태를 기록하고, DBWn과 협력하여 데이터 파일의 동기화를 관리합니다.
      3. LGWR (Log Writer): redo 로그 버퍼의 내용을 디스크에 기록하는 프로세스입니다. 트랜잭션이 완료되기 전에 로그를 안전하게 저장하여 데이터 복구를 지원합니다.
      4. SMON (System Monitor): 인스턴스 복구를 담당하는 프로세스입니다. 시스템 장애 후에 데이터베이스를 복구하고, 불필요한 세그먼트를 정리합니다.
      5. PMON (Process Monitor): 사용자 프로세스를 모니터링하고, 비정상적으로 종료된 프로세스를 정리합니다. 리소스를 회수하고, 서버의 안정성을 유지합니다.
      6. RECO (Recoverer): 분산 데이터베이스의 장애를 복구하는 프로세스입니다. 두 개 이상의 인스턴스 간의 트랜잭션을 조정합니다.
      7. LREG (Listener Registration): 데이터베이스 리스너와의 연결을 관리하고 등록하는 프로세스입니다. 클라이언트가 데이터베이스에 연결할 수 있도록 합니다.
      8. MMON (Memory Monitor): 메모리 관리를 담당하는 프로세스입니다. 자동 메모리 관리 기능을 지원하며, 메모리 사용량을 모니터링합니다.
      9. MMNL (Memory Monitor Light): 메모리 사용량을 경량으로 모니터링하는 프로세스입니다. MMON과 협력하여 메모리 관련 작업을 수행합니다.
  • 선택 백그라운드 프로세스
    • 특정 기능을 사용하기 위해 필요한 프로세스
    • 해당 프로세스가 정지되면 해당 프로세스에 의한 특정 기능은 사용이 안되며 선택 백그라운드 프로세스 중에 운영 중 정지되면 데이터베이스가 Shutdown되는 선택 백그라운드 프로세스도 존재한다.

DBWR의 역할

  • DBWR 백그라운드 프로세스는 변경이 발생하였으나 디스크로 저장되지 않은 버퍼인 더티 버퍼를 디스크로 기록하는 역할을 수행한다

버퍼의 사용에 따른 상태 변경

데이터 버퍼 캐쉬에는 위와 같이 4가지 종류의 버퍼가 존재합니다.

버퍼의 사용에 따른 상태 변경

  1. SQL 요청에 따라 필요한 데이터 블록을 디스크에서 액세스한 후 데이터 버퍼 캐시에 캐싱합니다.
  2. 동일한 데이터 블록 요청 시 디스크 액세스를 배제하고, 이미 캐싱된 데이터 버퍼 캐시에서 빠르게 데이터에 액세스합니다.
  3. 데이터 버퍼 캐시로 캐싱된 상태는 디스크 블록과 버퍼가 동일한 상태(클린 버퍼 상태)입니다.
  4. DML 문에 의해 값이 변경되면 해당 버퍼는 Pinned 상태가 됩니다.
  5. 이 때 데이터 버퍼 캐시의 상태는 디스크의 데이터 블록 값과 동일하지 않게 되어 더티 버퍼 상태가 됩니다.
  6. DBWR 백그라운드 프로세스에 의해 변경된 값이 디스크에 재기록되어 디스크의 데이터 블록과 동일한 값을 가지게 됩니다(클린 상태).
  7. Age Out으로 인해 다른 데이터 블록으로 재기록될 수 있는 상태가 됩니다.

DBWR의 특징

  • 지연 쓰기: 변경된 작업을 한번에 모아서 처리 (I/O 최소화 위해)
  • 삐른 컷밋: LGWR 통하여 변경에 대한 로그 정보는 즉시 디스크로 기록 (정합성 유지)

DBWR 활동 주기

  • 체크 포인트 발생
  • 더티 버퍼 임계치 발생
  • 프리 버퍼 검색 임계치 도달
  • 테이블스페이스 변경 시 (DROP,TRUNCATE)
  • 테이블 스페이스 변경 시 (Read Only)
  • 테이블 스페이스 백업 상태
  • 타임아웃 발생 시

LGWR

  • 리두 로그 버퍼를 디스크의 리두 로그 파일에 기록합니다.

빠른 커밋

  • 커밋 후 변경된 데이터 블록을 즉시 디스크로 저장하지않음, 해당 데이터 블록에 대한 조회는 메모리에서 수행하고 복구는 리두 로그 파일에 기록된 내용을 이용하기 때문에 마치 데이터베이스에 즉시 적용된 것과 같이 하겠다는 뜻이다.

Write-Ahead

  • DML 작업을 수행할 경우 실제 데이터에 대해 DML을 수행하기 전에 데이터들의 변경에 대한 내용을 리두 로그 버퍼에 미리 저장 (장애 시 리커버리를 위해)

동시 쓰기

  • 동시에 리두 로그 파일에 기록

LGWR활동 주기

  • User Process가 트랜잭션을 커밋할 때
  • 온라인 리두 로그 스위치가 발생할 때
  • 리두 로그 버퍼가 1/3 찼거나 1MB의 버퍼된 데이터를 포함할 때
  • DBWn 프로세스가 디스크에 수정된 버퍼를 쓰기 전에
  • 마지막 쓰기 작업 후 3초가 지났을 때

PMON

  • User Process가 실패할 경우 프로세스 Recovery 수행
    • 데이터베이스 버퍼 캐시 정리
    • User Process에서 사용하는 리소스 해제
  • 서버 프로세스가 사용하던 자원을 해제한다. (PGA,LOCK(락)등)
  • Idle 세션 타임아웃에 대한 세션 모니터(타임아웃을 수행)
  • ORACLE 12c 버전 이후에서는 LREG 프로세스가 리스너를 담당한다.

SMON

  • 인스턴스 복구 수행 (비정상으로 종료된)
  • 데이터 블록의 연속된 공간 통합
  • 임시 세그먼트제거

인스턴스 복구

  • 비정상 종료 시 손실: 메모리가 비정상적으로 종료되면, DBWR 백그라운드 프로세스에 의해 메모리에서 디스크의 데이터 파일에 저장되지 않은 데이터는 손실됩니다.
  • SMON 프로세스 역할: 데이터베이스가 비정상적으로 종료된 후 재시작될 때, SMON 백그라운드 프로세스는 리두 로그 파일의 로그 정보를 액세스하여 데이터 파일에 기록되지 않은 이전에 커밋된 데이터를 복구합니다.
    • 커밋되지 않은 데이터는 롤백되며, 이 과정에서 언두 세그먼트를 이용합니다.

Instance Recovery 단계

롤 포워드

  • 정의: 리두 로그 파일에 있는 내용을 데이터베이스에 적용하는 과정으로, SMON 백그라운드 프로세스에 의해 수행됩니다.
  • 적용 과정:
    • 데이터 버퍼 캐시에는 변경 내용이 그대로 적용됩니다.
    • 언두 세그먼트에는 롤백을 위한 데이터가 생성됩니다.
  • 작업 결과:
    • 커밋이 수행된 작업과 커밋이 수행되지 않은 모든 작업이 데이터베이스에 적용됩니다.
    • 커밋이 수행되지 않은 작업은 언두 세그먼트를 이용하여 롤백됩니다.

체크포인트(CKPT)

  • 데이터 버퍼 캐쉬의 더티 버퍼를 디스크로 기록하면서 컨트롤 파일과 데이터 파일 헤더에 체크포인트 정보를 갱신하는 프로세스이다 (DBWR에 알려 디스크에 블록 기록 )
  • 기록된 체크포인트 정보를 통해 장애 발생시 데이터베이스 복구를 수행

체크포인트 번호

  • 데이터의 정합성을 비교하는 기준이다
  • 데이터베이스 오픈 시에 해당 체크포인트 번호가 일치하지 않으면 데이터 베이스 복구 절차를 수행해야만 데이터베이스는 오픈됨

체크포인트 발생

  • 로그 스위치가 발생할 경우
  • 주기적 발생: 3초마다 발생합니다.
  • 테이블스페이스 오프라인 변경: 테이블스페이스가 오프라인으로 변경될 경우 로그 스위치가 발생합니다.
  • 정상 종료: 데이터베이스가 정상적으로 종료될 경우 로그 스위치가 발생합니다.
  • 명시적 체크포인트: 사용자가 ‘ALTER SYSTEM CHECKPOINT’ 명령어로 명시적인 체크포인트를 발생시킬 경우 로그 스위치가 발생합니다.
  • 활동 주기: 체크포인트 관련 파라미터에서 정한 값에 따라 활동 주기가 되었을 경우 로그 스위치가 발생합니다.

기타 백그라운드 프로세스

ARCH(Arciver)

  • 데이터베이스가 ARCHIVELOG 모드인 경우 온라인 리두 로그 파일을 자동으로 아카이브합니다.

선행조건

  • 아카이브 로그 모드 필요
  • 리두 로그 파일에 대한 백업 공간 필요

작동조건

  • 로그 스위치 가 발생하여 기존 리두 로그 파일을 아카이브 로그 따일로 생성해야할 경우
  • 장애 복구 시 아카이브 파일을 사용할 경우

CJQO

  • 계획된 작업을 실행시키는역할만 수행

Jnnn

  • 실제 작업을 수행함

RECO(Recoverer)

  • 분산 데이터베이스 환경에서 한 개 이상의 데이터베이스에 연결 되어 문제가 발생한 트랜잭션이 사용하던 테이블 또는 행에 수행된 Lock을 해제해 준다.
"In-doubt" 분산 트랜잭션은 분산 환경에서 실행 중인 트랜잭션 중 일부가 어떤 이유로 인해
완료되지 않거나 결정되지 않은 상태를 나타냅니다.

LREG

  • 오라클 12c 이전 버전에서 PMON 프로세스가 수행하던 리스너에 인스턴스를 등록 (Listener Registration) 하는 작업을 수행하는 프로세스이다.

참조
https://hengki.net/69
https://velog.io/@seonghae/posts
https://velog.io/@seonghae/posts
https://velog.io/@seonghae/PGA-DBWN-LGWR-CKPT-SMON-PMON
https://velog.io/@seonghae/오라클-DB백업과-복구23.09.27
https://velog.io/@seonghae/dbwn
위로 스크롤