📌 5장에서는 오라클의 기동에는 네 가지 상태가 있다는 것과, 기동 처리의 흐름, 기동할 때 사용되는 파일 등 오라클의 기동과 정지에 관해 살펴봅니다.
5.1 | 기동과 정지를 왜 배워야 하는가?
· 기동할 때 어떤 파일을 어떻게 사용하는지, 의존 관계가 어떻게 되어 있는지를 안다면 내부 동작을 더 쉽게 이해할 수 있음
· 각종 파일이 손상된 장애에 대응해야 할 때도 내부 동작에 관한 지식을 알고 있다면 도움이 됨
5.2 | 오라클의 기동/정지의 개요
· 오라클을 창고 회사라고 비유하면 오라클의 기동은 '창고 회사의 업무 시작'이고, 오라클의 정지는 '창고 회사의 업무가 종료하는 것'에 해당
[창고 회사 오라클의 업무 시작 흐름]
1. 사원(영업 제외)이 출근함
2. 창고에 관한 정보(관리 대장)을 조사함
3. 창고를 대충 훑어본 뒤, 문제가 없다면 창고를 열어 업무를 시작함
[창고 회사 오라클의 업무 종료 흐름]
1. 업무(SQL이나 트랜잭션 등)가 끝나는 것을 기다린다. 단, 급할 때는 업무 중이더라도 업무 처리를 중지함
2. 작업장의 물건(캐시상의 데이터)을 창고(파일)에 정리한다. 단, 급할 때는 작업장의 물건 등을 정리하지 않음
3. 사원이 퇴근함(프로세스의 종료)

5.3 | 업무의 시작에 해당하는 오라클의 기동
· 위 그림을 기준으로, '사원의 출근'은 백그라운드 프로세스의 생성과 공유 메모리의 확보에 해당
· '창고에 관한 정보(관리 대장)를 본다'는 컨트롤 파일을 보는 것을 의미
· 컨트롤 파일이란, 데이터베이스의 구성 정보가 적혀 있는 파일로서 데이터베이스의 파일 경로 등을 알 수 있음
· '창고를 열어서 업무를 시작'하는 것은 SQL을 처리할 수 있는 상태로 만드는 작업으로, 데이터 파일이나 REDO 로그 파일을 열어서 오라클이 내부적으로 사용하는 정보와 비교하여 문제가 있는지를 확인
· 데이터 파일이란, 이름대로 데이터가 보관된 파일을 의미
· REDO 로그 파일은 데이터의 변경 이력을 보관하는 파일을 의미
5.4 | 인스턴스, 데이터베이스, 그리고 주요 파일의 구성
· 오라클을 관리하기 위한 단위로 인스턴스(Instance)라는 용어를 사용
· 오라클에서의 인스턴스는 백그라운드 프로세스 + 공유 메모리를 의미하며, 인스턴스는 '데이터베이스를 관리하는 것(프로세스 + 메모리)'이며, 데이터베이스와는 다름
· 인스턴스가 기동되고 데이터베이스가 오픈된 상태를 '데이터베이스가 기동했다'라고 일컬음
[ 주요 파일 구성 ]
· 컨트롤 파일 : 데이터 파일이나 REDO 로그 파일의 위치가 기록되어 있음
· 데이터 파일 : 실제 데이터가 들어 있음
· REDO 로그 파일 : 데이터 변경 로그가 들어 있음
· 그 외의 파일 : 아카이브 로그나 각종 에러 로그 파일 등이 위치하며, 초기화 파라미터에서 지정한 경우가 많음
· ORACLE_HOME에 환경 변수에 지정한 경로(오라클이 설치된 경로)
- bin 경로 : 오라클의 프로그램 oracle이라는 이름을 가진 파일. SQL*Plus도 이 경로에 들어 있음
- dbs 경로 : 초기화 파라미터 파일 : 인스턴스의 파라미터나 컨트롤 파일의 위치가 기록되어 있음
5.5 | 기동 처리의 흐름과 내부 동작
5.5.1 기동 정지 상태에서 NOMOUNT로 전환
· 명령어 "startup nomount"
· 명령어를 실행하면 ORACLE_HOME과 ORACLE_SID 환경 변수를 토대로 초기화 파라미터 파일을 찾아서 읽어오며, 파일에서 읽어온 파라미터를 토대로 공유 메모리를 확보하고 백그라운드 프로세스를 생성
5.5.2 NOMOUNT로부터 MOUNT로 전환
· 명령어 "alter database mount"
·오라클은 초기화 파라미터에 기술된 컨트롤 파일의 경로를 사용해 컨트롤 파일을 열어 내용을 읽어오는 것으로 REDO 로그 파일이나 데이터 파일의 위치를 파악
5.5.3 MOUNT에서 OPEN으로 전환
· 명령어 "alter database open"
· 명령어를 실행하면 데이터 파일을 열어서 간단한 점검을 하고, 백그라운드 프로세스를 기동
· 데이터베이스의 오픈이 마무리되면 업무를 개시할 수 있는 상태(OPEN 상태)가 됨
5.5.4 파일의 사용 순서를 확인해봄
· 5.5.3에서 설명한 세 가지 명령어에서는 초기화 파라미터 파일 → 컨트롤 파일 → 데이터 파일순으로 파일을 염
· 초기화 파라미터 파일이 올바른 위치에 있지 않으면 → "could not open parameter file" 오류 발생
· 컨트롤 파일이 없으면 → ORA-00205 : "error in identifying controlfile"
· 데이터 파일이 없으면 → ORA-01157 : "cannot identify/lock data file5"
· 오래된 데이터 파일로 바꾸어 기동해보면? → ORA-01113 : "FILE 5 NEEDS MEDIA RECOVERY"
5.5.5 기동 처리에서의 요점
·우선은 초기화 파라미터를 읽어서 백그라운드 프로세스를 생성하고, 공유 메모리(버퍼 캐시나 공유 풀)를 확보함. 이를 NOMOUNT 라고 부름
· 초기화 파라미터 파일에 입력된 컨트롤 파일의 위치를 확인하고 컨트롤 파일을 열어 데이터베이스를 구성하는 각종 파일의 위치를 확인. 이를 MOUNT라고 부름. 다만, 위치를 알아내는 것 뿐이므로 이 시점에서는 파일이 없어도 에러가 발생하지 않음
· 데이터 파일이나 REDO 로그 파일에 문제가 없다면(오라클이 내부적으로 사용하는 데이터들의 앞뒤가 맞지 않는 상황이 아니라면) 데이터 파일을 읽고 기록할 수 있는 상태로 전환함. 즉, SQL을 실행할 수 있는 상태가 됨. 이를 OPEN이라고 부름
5.6 | 업무 종료에 해당하는 오라클의 정지
· 오라클은 접속한 모든 오라클 클라이언트의 접속이 종료된 후에 업무를 종료(기동 정지)함
· 정지 작업은 기동 작업의 역순으로 데이터베이스를 닫은 후에 인스턴스를 종료
· 인스턴스의 정지라는 것은 공유 메모리를 반환하고 백그라운드 프로세스를 정지하는 것을 말함
· 단, 인스턴스를 정지할 때는 기동시에 하지 않는 작업이 포함되어 있음. 이는 버퍼 캐시에 분산된 데이터를 정리하는 것
· 명령어는 "shutdown"이며 여러 옵션이 준비되어 있음
1. 없음(기본)* : 커넥션의 종료를 기다림 | 변경된 데이터를 데이터 파일에 기록함
2. transactional : 트랜잭션이 끝나는 것을 기다리며, 트랜잭션이 끝나면 커넥션을 끊어버림 | 변경된 데이터를 데이터 파일에 기록함
3. immediate : 커밋하지 않은 데이터는 없어짐 | 변경된 데이터를 데이터 파일에 기록함
4. abort : 커밋하지 않은 데이터는 없어짐 | 변경된 데이터를 데이터 파일에 기록함
· abort는 변경된 데이터를 기록하지 않고 종료함. 하지만 오라클은 RDBMS이므로 데이터를 잃어버려서는 안됨. 따라서, 다음 기동 시에 데이터를 복구함. 이 작업을 인스턴스 복구(instance recovery)라고 부름.
· 데이터 파일에 기록되지 않은 데이터는 REDO 로그 파일의 데이터를 사용해서 복구함. 이 REDO 로그 파일은 변경된 내용이 기록되어 있어서 오래된 데이터 파일의 내용을 최신의 것으로 변경할 수 있음. 인스턴스 복구는 사용자가 신경 쓸 필요는 없으며, 오라클이 기동할 때 알아서 수행
· 마찬가지로, OS의 장애나 서버 장비의 장애 등 오라클이 비정상적으로 종료했을 때도 인스턴스 복구가 수행됨. 단 캐시의 변경된 데이터만 손실된 것이 아닌, 데이터 파일이 존재하지 않는 등의 파일에 관한 장애가 발생했을 때는 본격적인 복구 작업을 해야만 함
5.7 | 데이터베이스를 수동으로 생성하기
1. 데이터베이스 수동 생성을 위해 '초기화 파라미터 파일'을 생성
2. ORACLE_SID 환경 변수를 변경해서 SQL*Plus를 실행 및 관리자 계정으로 접속
3. 초기화 파라미터 파일밖에 없으므로 startup nomount를 실행하여 인스턴스만 생성
4. CREATE DATABASE문을 수행해서 컨트롤 파일, 데이터 파일, REDO 로그 파일을 생성
5. CREATE DATABASE문이 끝나면 OPEN 상태로 자동 전환
6. 나머지는 카탈로그를 생성(관리용 뷰 등을 생성)하고 업무용으로 사용하는 데이터 파일을 생성
5.8 | 요약
· 사원이 출근해서 창고를 점검하고 업무를 개시(오픈)하는 이미지. 또한, 영업 담당이 고객에게 연락을 받은 다음(연결되고 난 후)에야 출근하는 모습
· 파일의 종류와 의미, 그리고 기동할 때 읽어오는 순서 이해
· 데이터베이스는 실제 데이터가 들어가는 데이터 파일이 손상되지 않고, 컨트롤 파일이 손상된 것만으로 사용할 수 없게 됨
· 컨트롤 파일에는 데이터 파일 등의 구성 정보가 들어있으므로 데이터 파일의 추가/삭제, REDO 로그 파일에 관한 설정 등을 변경했을 때는 컨트롤 파일을 잘 백업해둬야 함
'📕 Oracle > [서적] 그림으로 공부하는 오라클 구조' 카테고리의 다른 글
| [Oracle 구조] 7. 오라클의 데이터 구조 (1) | 2024.01.06 |
|---|---|
| [Oracle 구조] 6. 커넥션과 서버 프로세스의 생성 (1) | 2023.12.30 |
| [Oracle 구조] 4. SQL문 분석과 공유풀 (1) | 2023.12.26 |
| [Oracle 구조] 3. 캐시와 공유 메모리 (1) | 2023.12.25 |
| [Oracle 구조] 2. 오라클의 여러 프로세스 (0) | 2023.12.24 |