l9791185890302

오라클의 기동/정지의 개요

상태명 상태 수행작업
open 데이터 처리를 할 수 있는 상태. SQL을 처리할 수 있는 상태  
mount 데이터 파일 등에 접근할 수 있는 상태 (컨트롤 파일을 읽은 상태) mount -> open : 데이터 파일에 대한 점검 등을 수행함
nomount 백그라운드 프로세스와 공유 메모리가 존재하는 상태 nomount -> mount : 컨트롤 파일을 읽어 옴
shutdown 정지 상태 shutdown -> nomount : 파라미터를 읽어 와서 백그라운드 프로세스를 기동시키고 공유 메모리를 할당함

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

  • 오라클에서의 인스턴스는 백그라운드 프로세스 + 공유 메모리를 의미한다.

  • 인스턴스는 데이터베이스를 관리하는 것(프로세스 + 메모리)이며 데이터베이스와 다르다.
  • 일반적으로 인스턴스와 데이터베이스는 일대일 대응하기 때문에 인스턴스를 데이터베이스라고 불러도 그렇게 큰 문제는 없다. 인스턴스가 가동되고 데이터베이스가 오픈된 상태를 데이터베이스가 가동했다라고 말한다.
  • RAC(Real Application Clusters)를 사용하는 경우에는 인스턴스와 데이터베이스가 일대일로 대응하지 않아서 명확히 차이를 알아야한다.

db와 인스턴스-1

db와 인스턴스

RAC의 경우에는 한개의 인스턴스가 정지하더라도 대응 할 수가 있다. 즉 인스턴스와 데이터베이스가 같지 않다는 것을 알 수 있다.

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

기동정지 상태에서 NOMOUNT 전환

SQLPlus를 이용해 관리자계정 전환 후 startup nomoount를 수행한다. ORACLE_HOME과 ORACLE_SID를 토대로 초기화 파라미터 파일을 찾아오고 파일에서 읽어온 파라미터를 토대로 공유 메모리를 확보하고 백그라운드 프로세스를 생성한다.

NOMOUNT로부터 MOUNT 전환

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

MOUNT에서 OPEN으로 전환

alter database open을 입력해 MOUNT 상태에서 OPEN으로 전환한다. 데이터 파일을 열어서 간단한 점검을 하고 백그라운드 프로세스를 가동한다. DB 오픈이 마무리되면 sql을 받을 수 있는 상태가 된다.

###

위 세가지 명령어는 초기화 파라미터 파일 -> 컨트롤 파일 -> 데이터 파일순으로 파일을 열었다. 따라서 해당 파일이 없으면 데이터 베이스를 오픈하지 않는다.

기동처리 요점

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

서버프로세스는 바로 생성되는 것이 아닌 클라이언트에서 접속 요청이 있을때 생성이된다.

PFILE과 SPFILE

초기화 파라미터는 PFILE과 SPFILE 두가지가 존재하고 인스턴스는 기본적으로 SPFILE을 이용한다.

  • PFILE(파라미터 파일)

    텍스트 형식으로 저장된 파라미터 파일이다. 텍스트 에디터를 통한 파라미터 수동변경이 가능하지만 변경을 반영하기 위해서는 인스턴스를 재가동해야한다. PFILE은 DB를 생성하거나 장애 발생시에 사용한다.

  • SPFILE(서버 파라미터 파일)

    ORACLE 9i 이후에 추가된 바이너리 형식의 파라미터 파일이다. 텍스트 에디터로 수정이 불가하고 SQL문(ALTER SYSTEM)을 사용한다. 파라미터를 변경할 때는 현재의 인스터만인지 재가동 후인지 둘 다인지 등의 반영 범위를 지정할 수 있다. SPFILE은 PFILE을 사용해 수동으로 만들거나 데이터베이스를 생성할 때 사용하는 DBCA(Database Configuration Assistant)에 의해 자동으로 생성된다.

오라클 정지

정지 작업은 기동 작업의 역순으로 데이터 베이스를 닫은 후에 인스턴스를 종료한다. 인스턴스를 정지할 때는 버퍼 캐시에 분산된 데이터를 정리하는 작업을 한다. 오라클은 성능상의 이유로 변경된 데이터를 즉시 데이터 파일에 저장하지 않고 버퍼 캐시에 저장하고 DBWR을 통해 데이터베이스에 저장이된다. 기록하지 않은 변경된 데이터를 데이터베이스를 닫는 작업의 일환으로 데이터 파일에 기록하는 것이 이 작업이다.

일반적으로 shutdown을 입력하면 종료하게된다.

그외 특수한 상황에서 사용할 수있는 shutdown 옵션들이 있다.

옵션 커넥션의 종료를 기다리는가? 변경된 데이터를 데이터 파일에 기록하는가?
없음(기본) 커넥션의 종료를 기다린다 Y
transactional 트랜잭션이 끝나는 것을 기다린다. Y
immediate N, 커밋하지 않은 데이터는 없어진다. Y
abort N, 커밋하지 않은 데이터는 없어진다. N

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

OS장애나 서버 장애 등에의해 오라클이 비정상 종료되었을 때도 인스턴스 복구가 수행된다. 다만 캐시에 의한 데이터만 손실된 것이 아니라 데이터 파일이 존재하지 않는 등의 장애가 발생했을때는 본격적인 복구작업을 해야한다.

결론

Q. 컨트롤 파일이 손상되었을 때 컨트롤 파일을 생성하기 위해 명령어를 사용할 수 있다. 어떤 상태(SHUTDOWN, NOMOUNT, MOUNT)에서 이 명령어를 사용할 수 있을까? => 컨트롤 파일이 손상되었을때는 MOUNT할 수 없다. NOMOUNT 상태에서 컨트롤 파일을 생성해야한다.

Q. DB의 파일이 손상되었을 때 복구작업을 수행해야한다. 중요한 데이터 파일이 손상되어 DB를 OPEN할 수 없을 때 복구를 하기위한 명령어는 어떤 상태에서 해야하는가? => 데이터파일 위치를 알아야하므로 MOUNT 상태에서 수행해야 한다.