본문 바로가기
인프라 7기/Oracle

Oracle 실습 : SHUTDOWN 옵션의 이해

by 킹버거 2023. 2. 28.

 DBA 터미널로 DB를 시작한다. 그리고 일반 사용자 ST01로 DB에 접속한다 .

좌: 세션1 DBA 터미널 / 우: 세션2 일반 사용자 터미널

 

이 상태에서 SHUTDOWN NORMAL 명령을 내리면 접속한 사용자가 있기 때문에 DB가 종료되지 않는다.

이때 ctrl+c로 빠져나와야 한다.

 

SHUTDOWN의 TRANSACTIONAL 옵션으로 DB 종료를 시도하면 접속이 성공적으로 끊겼음을 확인할 수 있다.

일반 사용자 터미널로 쿼리를 날리면 연결이 끊어졌다는 ERROR가 뜬다. 

 

DBA 터미널로 Oracle을 다시 STARTUP한 후 일반 사용자로 재접속한다.

 

실습을 위해 테이블을 생성한다 .

 

그 후 DBA 터미널에서 TRANSACTIONAL 모드로 SHUTDOWN 명령을 입력한다.

 

새로운 일반 사용자 ST로 접속을 시도한다. DBA 터미널로 SHUTDOWN을 입력하였기 때문에 다음과 같은 에러문이 뜨며 접속이 불가하다. 

immediate shutdown or close in progress - no operations are permitted.

즉시 종료 또는 닫기 진행 중 - 작업이 허용되지 않습니다.

 

 

일반 사용자 ST01로 ROLLBACK을 수행한다 .

 

DBA로 입력했던 SHUTDOWN TRANSACTIONAL 명령어가 정상적으로 실행됨을 확인할 수 있다. 

 

일반 사용자 ST01에 명령어를 입력하면 접속이 끊긴 상태여서 ERROR가 뜨는 것을 확인할 수 있다. 

 

종료 모드 ABORT IMMEDIATE TRANSACTIONAL NORMAL
새로운 접속 허용 NO NO NO NO
현재 세션 종료시까지 대기 NO NO NO YES
현재 트랜잭션 종료시까지 대기  NO NO YES  YES
CKPT 시행 및 파일 닫기 NO YES YES YES

 

SHUTDOWN 옵션 

1) NORMAL 모드로 종료 (기본 종료 모드) 

  1. 새로운 접속이 허용되지 않는다.
  2. 종료하기 전에 Oracle 서버가 모든 사용자의 접속 해제를 기다린다.
  3. Database 및 Redo Log Buffer가 Disk에 기록된다.
  4. 백그라운드 프로세스가 종료되고 SGA가 메모리에서 제거된다.
  5. 인스턴스를 종료하기 전에 Oracle은 DB를 닫고 마운트를 해제한다.
  6. 이후 시작시 인스턴스를 복구할 필요가 없다.

2) TRANSACTIONAL 모드로 종료 : 클라이언트의 작업 손실을 방지한다.

  1. 모든 클라이언트가 특정 인스턴스에서 새로운 트랙잭션을 시작할 수 없다.
  2. 클라이언트는 진행 중인 트랜잭션을 마치면 접속을 해제한다.
  3. 모든 트랜잭션이 끝나는 즉시 종료된다.
  4. 이후 시작시 인스턴스를 복구할 필요가 없다. 

3) IMMEDIATE 모드로 종료

  1. 현재 Oracle 서버가 처리하고 있는 SQL문이 완료되지 않는다.
  2. Oracle 서버는 현재 DB에 접속하고 있는 사용자의 접속이 해제될 때까지 기다리지 않는다.
  3. Oracle은 활성 트랜잭션을 롤백하고 모든 사용자의 접속을 해제한다.
  4. 인스턴스를 종료하기 전에 Oracle은 DB를 닫고 마운트 해제한다.
  5. 이후 시작시 인스턴스를 복구할 필요가 없다.

4) ABORT 모드로 종료 : NORMAL 및 IMMEDIATE 종료 옵션이 작동하지 않는 경우 사용할 수 있다.

  1. 현재 Oracle 서버가 처리하고 있는 SQL 문이 즉시 종료된다.
  2. Oracle은 현재 DB에 접속하고 있는 사용자의 접속이 해제될 때까지 기다리지 않는다.
  3. Database 및 Redo Log Buffer가 Disk에 기록되지 않는다.
  4. Commit되지 않은 트랜잭션은 Rollback되지 않는다.
  5. 인스턴스는 파일을 닫지 않은 채 종료된다.
  6. DB가 닫히지 않거나 마운트가 해제되지 않는다.
  7. 이후 시작시 자동으로 인스턴스를 복구해야 한다.