DataBase/그림으로 공부하는 오라클 구조

5장 오라클의 기동과 정지

우드의개발개발 2023. 9. 20. 15:56

오라클 DBMS 기동과 정지를 배워야 하는 이유

  • 기동 시 어떤 파일을 사용하는지
  • 파일 간 의존관계가 어떻게 되는지
  • 앎으로써 장애에 어떻게 대응하는지

위 내용을 토대로 유닉스용 오라클의 기동과 정지의 내부 동작에 대해 알아보자

 

오라클 창고회사의 업무 시작과 종료

상태 비유 상태 수행작업
SHUT DOWN 퇴근 정지 상태  
NO MOUNT 출근 bg ps와 SGA 확보 bg 가동 및 SGA 확보
MOUNT 관리대장 읽음 데이터 파일 접근 가능 상태 컨트롤 파일 읽음
OPEN 업무 중 SQL 처리할 수 있는 상태 데이터 파일 또는 redo log 체크

 

인스턴스, 데이터베이스, 그리고 주요 파일의 구성

오라클에서는 관리하기 위한 단위로 인스턴스를 사용합니다. 인스턴스는 백그라운드 프로세스 + 공유 메모리입니다. 일반적으로 인스턴스 하나가 데이터베이스를 관리하기에 인스턴스를 데이터베이스라고도 합니다. 데이터베이스는 파일 모음집입니다. 파일 모음집에는 컨트롤 파일(데이터파일 + redo 로그파일 + 파라미터 파일 + 에러로그파일 ...) 등이 있습니다. 아래 RAC 구조일 경우 인스턴스와 데이터베이스가 일대일로 대응하지 않습니다.

 

RAC(Real Application Clusters)

RAC(Real Application Clusters)은 오라클의 데이터베이스 관리 시스템이다. 데이터베이스 인스턴스 각각을 개별 노드에서 클러스터 형태로 운영한다.  만약 하나의 머신이 다운되더라도 해당 노드가 가지고 있는 자원의 소유권을 다른 노드에 넘겨줌으로써 failover에 대한 처리를 함으로써 유저는 불편함을 겪지 않게 된다.

 

ORACLE_HOME

  • 오라클을 설치한 경로를 지정합니다.

 

ORACLE_SID

  • 오라클 인스턴스의 유니크 식별자입니다.

 

ORACLE_HOME/bin

  • 오라클 이름을 가진 파일이 들어있습니다.

 

ORACLE_HOME/dbs

  • 인스턴스 파라미터 파일과 컨트롤 파일 위치가 들어있습니다.

 

컨트롤 파일

  • 데이터 파일(실 데이터가 들어있는 파일)의 위치
  • 리두 로그파일(데이터 변경 로그가 들어있는 파일)의 위치

 

기타

  • 에러 로그 파일 위치
  • 아카이브 로그 위치

 

기동 처리의 흐름과 내부 동작

SHUT DOWN -> NO MOUNT

startup nomount

  • Oracle DBMS를 기동시키는 명령어
  • ORACLE_HOME 과 ORACLE_SID 토대로 ORACLE_HOME/dbs에서 환경변수 초기화에 필요한 초기화 파라미터 파일(init.ora)을 찾아 읽습니다.
  • 초기화 파라미터 파일을 토대로 공유 메모리를 확보하고 ORACLE_HOME/bin 내 백그라운드 프로세스를 생성합니다.
  • NOMOUNT라고 불리는 이유는 DATABASE를 아직 마운트하지 않았기 때문입니다.

 

NO MOUNT -> MOUNT

alter database mount;

  • ORACLE_HOME/dbs에 기술된 컨트롤 파일의 경로를 사용해 컨트롤 파일을 열어 내용을 읽습니다.
  • 이로써 리두 로그 파일이나 데이터 파일의 위치를 파악할 수 있습니다.

 

리두 로그파일

  • 해당 파일은 데이터베이스 변경 이력과 관련한 내용을 보관합니다.

 

데이터 파일

  • 실제 데이터가 들어있는 파일입니다.
  • MOUNT라고 불리는 이유는 데이터베이스를 구성하고 있는 파일들을 보면 알 수 있습니다. 파일들에는 (초기 파라미터 파일 + 컨트롤 파일 + 데이터 파일 + 리두로그 파일 +  에러로그 파일) 등이 있습니다. NOMOUNT -> MOUNT 과정에서 초기화 파라미터 파일을 이용해 컨트롤 파일의 위치를 읽어 데이터베이스를 이루고 있는 파일에 접근할 수 있는 상태로 전환하기에 이를 MOUNT 상태에 있다고 표현합니다.

 

MOUNT -> OPEN

alter database open;

  • 업무를 개시할 수 있는 상태 
  • 데이터 파일을 열어 점검합니다.
  • 데이터 파일을 읽고 기록할 수 있는 상태입니다.
  • 백그라운드 프로세스를 기동합니다.

 

WRAP UP

일반적으로 startup 입력 시 DB 기동의 전부입니다. 해당 명령어를 치는 것만으로 아래 순서를 모두 실행시킵니다.

  • SHUT DOWN -> NO MOUNT
  • NO MOUNT -> MOUNT
  • MOUNT -> OPEN

 

파일 읽는 순서 ( 초기화 파라미터 -> 컨트롤 -> 데이터, 리두로그 ...)

 

환경변수를 초기화 하는 초기화 파라미터 파일

  • 초기화 파라미터 파일은 ORACLE_HOME/dbs에 위치해 있습니다.
  • 초기화 파라미터 파일은 SHUT DOWN -> NO MOUNT 과정에서 읽습니다.

 

컨트롤 파일

  • 컨트롤 파일 위치는 초기화 파라미터 파일에서 경로를 읽어 불러옵니다.
  • 컨트롤 파일은 NO MOUNT -> MOUNT 과정에서 읽습니다.

 

데이터 파일

  • 컨트롤 파일을 통해 데이터 파일의 위치를 찾아 데이터 파일을 읽습니다.
  • 데이터 파일은 MOUNT -> OPEN 과정에서 읽습니다.
  • 만약 해당 과정에서 오래된 데이터 파일로 바꿔치기 한다면 데이터 복구가 필요하다며 데이터 베이스를 오픈하지 않습니다.

 

여러 버전의 오라클 설치를 위해선

  • oracle 프로그램은 ORACLE_HOME/bin 폴더 내부에 들어 있어 여러 버전의 오라클을 서버에 설치 할 경우 ORACLE_HOME을 분리 할 필요가 있습니다. 왜냐하면 ORACLE_HOME/bin 해당 경로에 실행 파일이 있기 때문입니다.

 

ifile과 spfile

  • ifile(이닛 파일)은 초기화 파라미터 파일 내 변수 중 하나입니다. 해당 변수는 다른 곳의 파라미터 파일을 호출하는 설정을 담당합니다.
  • spfile(서버 파라미터 파일)은 오라클 10g 버전부터 init.ora를 대체하는 파일로 사용하고 있습니다.

 

업무 종료에 해당하는 오라클의 정지

shutdown;

  • 접속한 모든 오라클 클라이언트의 접속이 종료한 후에 업무를 종료합니다.
  • 기동 작업의 역순으로 실행한 후 인스턴스를 종료합니다.
  • 인스턴스의 정지는 프로세스를 종료하고 공유메모리를 반환하는 것을 말합니다(NO MOUNT -> SHUT DOWN)
  • 기동시와 다른 특별한 점이 있는데 버퍼 캐시에 분산된 데이터를 정리하는 일입니다. 성능상의 이유로 변경된 데이터를 데이터 파일에 즉시 보관하지 않기 때문에 기록하지 않은 변경된 데이터를 데이터베이스 종료 시 데이터 파일에 기록합니다.

 

SHUT DOWN 옵션과 그 동작

옵션 접속의 종료를 기다리는가? 변경된 데이터를 데이터 파일에 기록하는가?
normal 접속종료를 기다린다 YES
transactional 트랜잭션이 끝나는 것을 기다린다 YES
immediate NO. 커밋하지 않은 데이터는 없어진다 YES
abort NO. 커밋하지 않은 데이터는 없어진다 NO

normal

  • 현재 USERS들이 맺고 있는 CONNECTION은 그 사용자들이 DISCONNECT할 때까지 기다립니다.
  • 현재 처리 중인 트랜잭션이 있다면, 그 트랜잭션이 끝날 때까지 기다린 후 서버 종료합니다.
  • 다음 DATABASE STARTUP시 어떤 INSTANCE RECOVERY 절차도 필요로 하지 않습니다.

transactional

  • 모든 클라이언트가 특정 인스턴스에서 새로운 트랜잭션을 시작 할 수 없습니다.
  • 클라이언트의 진행중인 트랜잭션을 모두 끝마치면 서버를 종료 합니다.
  • 모든 트랜잭션이 끝나는 즉시 종료 되며, 이후 시작시 인스턴스 복구가 필요 없습니다.

immediate

  • 현재 처리중인 SQL Statement가 있다면, 다 STOP 시킵니다.
  • UNCOMMITTED TRANSACTIONS이 있다면, 다 ROLLBACK 시킵니다.
  • USERS 들이 DISCONNECT 할 때까지 안 기다리고 DB를 CLOSE & DISMOUNT 해서 오라클 인스턴스를 깨끗이 SHUTDOWN 합니다.

abort

  • 현재 처리중인 SQL Statements를 모두 ABORT 시키고 ROLLBACK 도 안 시키고, USERS들을 다 끊고, CLOSE & DISMOUNT도 안합니다. 즉, 그냥 꽝 닫습니다.
  • 다음 번 오라클 시작시에 인스턴스가 자동 복구됩니다.

인스턴스 복구

shutdown abort;

  • 위 명령어를 쳤을 때 데이터 파일에 기록되지 않은 데이터는 다음 데이터베이스 기동 시 리두 로그 파일의 데이터를 사용해서 복구하는데 이를 인스턴스 복구(instance recovery)라고 합니다.