ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 그림으로 공부하는 오라클 구조 : 오라클의 기동과 정지
    STUDY/DB 2022. 5. 15. 21:38

    1. 기동과 정지

    오라클을 창고회사라고 비유했을 때, 기동은 창고 회사의 업무 시작이고, 정지는 창고 회사의 업무 종료를 의미한다.

     

    - 기동(업무 시작)의 흐름

    1. 사원(영업 제외)이 출근함
    2. 창고에 관한 정보(관리 대장)를 조사함
    3. 창고를 대충 훑어본 뒤, 문제가 없다면 창고를 열어 업무를 시작함

    - 정지(업무 종료)의 흐름

    1. 업무(SQL이나 트랜잭션 등)가 끝나는 것을 기다린다. 단, 급할 때는 업무 중이더라도 업무 처리를 중지함(종료 명령어 옵션으로 지정 가능)
    2. 작업장의 물건(캐시상의 데이터)을 창고(파일)에 정리한다. 단, 급할 떄는 작업장의 물건들을 정리하지 않음.(종료 명령어 옵션으로 지정 가능)
    3. 사원이 퇴근함(프로세스의 종료)

     

    * 컨트롤 파일이란, 데이터베이스의 구성 정보가 적혀 있는 파일로서 데이터베이스의 파일 경로 등을 알 수 있다.

    * 데이터 파일은 데이터가 보관된 파일을 의미하고, REDO 로그 파일은 데이터의 변경 이력을 보관하는 파일을 의미한다.

     

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

    인스턴스와 데이터베이스

    인스턴스는 백그라운드 프로세스 + 공유 메모리를 의미하고, 데이터베이스를 관리하는 것이다. 기동의 'NOMOUNT' 상태를 인스턴스가 기동한 상태라고 한다.

     

    일반적으로 인스턴스와 데이터베이스는 일대일로 대응하므로 인스턴스를 데이터베이스라고 불러도 큰 문제는 없다.

    인스턴스가 기동되고 데이터베이스가 오픈된 상태를 '데이터베이스가 기동했다'라고 한다. 단, RAC(Real Application Clusters, 오라클 데이터베이스의 클러스터링 기능)를 사용하는 경우에는 인스턴스와 데이터베이스가 일대일로 대응하지 않기 때문에 인스턴스와 데이터베이스의 차이를 명확히 이해해야 한다.

     

    RAC가 아닌 경우

     

    RAC인 경우

     

    - 파일의 구체적인 구성

    일반적으로 환경 변수 ORACLE_HOME과 ORACLE_SID를 알고 있는 경우, 나머지는 파일에 기록된 정보를 보고 파일을 찾으면 대부분 어디에 있는지 알 수 있다.

     *ORACLE_HOME : 오라클 설치 경로

     *ORACLE_SID : DB를 구별하기 위해서 O/S에 의해서 사용된다. SID는 오라클 데이터베이스명이다.

     

    주요 파일의 구성

    구성에 따라서는 각종 파일이 같은 경로에 들어 있지 않을 때도 있다. 또한, 초기화 파라미터 파일은 dbs가 아닌 경로에 위치하는 경우도 있다.

     

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

    1. 기동 정지 상태에서 NOMOUNT로 전환
    2. NOMOUNT로부터 MOUNT로 전환
    3. MOUNT에서 OPEN으로 전환

     

    - 기동 정지 상태에서 NOMOUNT로 전환

    SQL*Plus를 기동하고, 데이터베이스를 기동할 수 있는 관리자 계정으로 전환하고, 'startup nomount' 명령어를 입력해서 정지상태에서 'NPMOUNT' 상태로 변경한다. ORACLE_HOME과 ORACLE_SID 환경 변수를 토대로 초기화 파라미터 파일을 찾아서 읽어오며, 파일에서 읽어온 파라미터를 토대로 공유 메모리를 확보하고 백그라운드 프로세스를 생성한다.

     

    - NOMOUNT로부터 MOUNT로 전환

    'alter database mount' 명령어를 입력해서 MOUNT 상태로 변경한다. 초기화 파라미터에 기술된 컨트롤 파일의 경로를 사용해 컨트롤 파일을 열어 내용을 읽어오는 것으로 REDO 로그 파일이나 데이터 파일의 위치를 파악한다.

     

    - MOUNT에서 OPEN으로 전환

    'alter database open' 명령어를 입력한다. 데이터 파일을 열어서 간단한 점검을 하고, 백그라운드 프로세스를 기동한다. 데이터베이스의 오픈이 마무리되면 업무를 개시할 수 있는 OPEN 상태가 된다.

     

    세 가지 명령어를 사용하지 않고, 기동 정지 상태에서 starup이라고 입력하는 것만으로도 OPEN 상태가 된다.

     

    - 파일 사용

    데이터베이스를 기동하는 명령어를 입력했을 때, 초기화 파라미터 파일 -> 컨트롤 파일 -> 데이터 파일 순으로 파일을 열었다. 만약 명령어를 사용할 때 파일에 문제가 있으면 에러가 발생하게 된다.

    • 초기화 파라미터 파일이 올바른 위치에 존재하지 않을 경우, 'could not open parameter file' 에러가 발생하면서 'ORACLE instance started'가 표시되지 않고 NOMOUNT상태가 되지 않는다.
    • 컨트롤 파일이 없는 경우, 'error in identifying controlfile' 에러가 발생한다. 'ORACLE instance started'가 표시되며 NOMOUNT까지는 성공하지만 'Database mounted'가 표시되지 않고 MOUNT에 실패한다.
    • 데이터 파일을 삭제한 경우, 'cannot identify/lock data file 5' 에러가 발생하며, 'Database mounted'가 표시되며 MOUNT까지는 성공하지만 'Database opened'가 표시되자 않고 OPEN에 실패한다.
    • 오래된 데이터 파일을 사용할 경우, 'file 5 needs media recovery' 에러가 발생하며 'Database mounted'가 표시되며 MOUNT까지는 성공하지만 'Database opened'가 표시되자 않고 OPEN에 실패한다. 오라클은 복구가 필요하다고 알려준다.

     

    - 컨트롤 파일이 손상되었을 때 컨트롤 파일을 생성하기 위해서는 컨트롤 파일이 손상되었을 때는 MOUNT할 수 없기 때문에 NOMOUNT상태에서 컨트롤 파일을 생성하는 명령어를 실행해야 한다.

     

    - 데이터베이스의 파일이 손상되었을 때는 복구 작업을 수행해야 한다. 중요한 데이터 파일이 손상되어 데이터베이스를 OPEN할 수 없을 때, 복구하기 위해서는 MOOUNT 상태에서 복구 명령어를 실행해야 한다. 데이터 파일의 위치를 알고 있지 않으면 복구할 수 없기 때문이다.

     

    - 데이터베이스는 실제 데이터가 들어가는 데이터 파일이 손상되지 않고, 컨트롤 파일이 손상된 것만으로도 사용할 수 없게 된다. 컨트롤 파일에는 데이터 파일 등의 구성 정보가 들어 있으므로 데이터 파일의 추가/삭제, REDO 로그 파일에 관한 설정 등을 변경했을 때는 컨트롤 파일을 잘 백업해둬야 한다.

     

    - 오라클 기동 요점

    • 초기화 파라미터를 읽어서 백그라운드 프로세스를 생성하고 공유 메모리(버퍼 캐시나 공유 풀)을 확보한다. 이것을 NOMOUNT라고 부른다.
    • 초기화 파라미터 파일에 입력된 컨트롤 파일의 위치를 확인하고 컨트롤 파일을 열어 데이터베이스를 구성하는 각종 파일의 위치를 확인한다. 이것을 MOUNT라고 부른다. 다만, 위치를 알아내는 것뿐이므로 이 시점에서는 파일이 없어도 에러가 발생하지 않는다.
    • 데이터 파일이나 REDO 로그 파일에 문제가 없다면(오라클이 내부적으로 사용하는 데이터들의 앞뒤가 맞지 않는 상황이 아니라면) 데이터 파일을 읽고 기록할 수 있는 상태로 전환한다. 즉, SQL을 실행할 수 있는 상태가 된다. 이것을 OPEN이라고 부른다.

     

    오라클 클라이언트에 서비스를 제공하는 서버 프로세스는 데이터베이스 기동 시에는 존재하지 않는다. 콜라이언트에서 접속 요청이 있을 때 응답하는 형태로 생성된다.

     

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

    오라클은 접속한 모든 오라클 클라이언트의 접속이 종료된 후에 기동 정지한다.

     

    정지 작업은 기동 작업의 역순으로 데이터베이스를 닫은 후에 인스턴스를 종료한다. 인스턴스의 정지라는 것은 공유 메모리를 반환하고 백그라운드 프로세스를 정지하는 것을 말한다. 단, 인스턴스를 정지할 때는 기동시에 하지 않는 작업이 포함되어 있다. 버퍼 캐시에 분산된 데이터를 정리하는 것이다. 성능상의 이유로 변경된 데이터를 즉시 데이터 파일에 저장하지 않는다. 기록하지 않은 변경된 데이터를 데이터베이스를 닫는 작업의 일환으로 데이터 파일에 기록한다.

     

    이것이 일반적인 종료 작업이고, 기동/정지할 수 있는 사용자로 'shutdown'만 입력하면 된다.

     

    하지만 항상 일반적인 종료를 할 수 있는 것은 아니다.

    • SQL문이 끝나지 않았을 때
    • 오라클 클라이언트가 접속을 끊어주지 않았을 때
    • 긴급 사태가 발생해서 접속을 즉시 종료시켜야 할 때
    • 명령어가 작동하지 않을 때

    등 여러 경우가 있다. 그래서 shutdown에는 여러 옵션이 존재한다.

     

    abort는 변경된 데이터를 기록하지 않고 종료한다. 하지만 오라클은 RDBMS이므로 데이터를 읽어버려서는 안 된다. 따라서 다음 기동 시에 데이터를 복구한다. 이 작업은 인스턴스 복수(instance recovery)라고 부른다. 데이터 파일에 기록되지 않은 데이터는 REDO 로그 파일의 데이터를 사용해서 복구한다. 이 REDO 로그 파일은 변경된 내용이 기록되어 있어서 오래된 데이터 파일의 내용을 최신의 것으로 변경할 수 있다. 인스턴스 복구는 사용하자 신경 쓸 필요는 없으며, 오라클이 이동할 때 알아서 수행한다.

     

    OS의 장애나 서버 장비의 장애 등 오라클이 비정상적으로 종료했을 떄도 인스턴스 복구가 수행된다. 단 캐스의 변경된 데이터만 솔실된 것이 아닌, 데이터 파일이 존재하지 않는 등의 파일에 관한 장애가 발생했을 때는 본격적인 복구 작업을 해야 한다.

     

    5. 데이터베이스 수동 생성

    데이터베이스를 생성할 때의 파일 생성 순서와 기동할 때 접근하는 파일의 순서가 동일하다.

    1. 초기화 파라미터 파일을 만든다. 
    2. SQL*Plus를 실행한다.
    3. 기동/정지와 데이터베이스를 생성할 수 있는 관리자 계정으로 접속한다.
    4. 현 시점에서 초기화 파라미터 파일만 존재하므로 startup nomount를 실행하여 인스턴스만 생성한다.
    5. 'create database'문을 수행해서 컨트롤 파일, 데이터 파일, REDO 로그 파일을 생성한다.

    create databse문이 끝나면 OPEN 상태로 자동 전환된다. 나머지는 카탈로그 생성(관리용 부 등을 생성)하고 업무용으로 사용하는 데이터 파일을 생성한다.

     

    이전장 : SQL문 분석과 공유 풀

    다음장 : 커넥션과 서버 프로세스의 생성

     

    출처 : 스키타 아츠시 외 4명, 『그림으로 공부하는 오라클 구조』, 이민재, 제이펍(2022), p80-p96

Designed by Tistory.