상세 컨텐츠

본문 제목

2023년 12월 8일 4교시 shutdown 의 여러가지 옵션들

오라클 아키텍처

by 병아리 엔지니어 2023. 12. 11. 07:41

본문

★ 데이터베이스를 종료해야 할 때 (오라클 종료)


★ shutdown [normal]
- normal = 기본 종료 모드
- 새로운 session 을 열 수 없다. (새 연결을 생성할 수 없다 -  접속 불허)
- 오라클 서버는 모든 유저가 접속을 끊을 때까지 종료하지 않고 대기한다.
(접속한 유저들이 작업을 다 끝내고 제발로 나갈 때까지 기다려 준다.)
- shutdown normal 을 던진 DBA는 창이 대기 상태로 들어가게 된다.
- 데이터 버퍼 캐시 및 리두(redo) 버퍼가 디스크 내에 기록된다.

  (QUESTION. 이건 normal 말고 transactional 이랑 immediate도 마찬가지지?

   데이터 파일과 리두로그 파일을 닫는 shutdown 이면 다 이런 거지?)

  (ANSWER. 그렇다.)
- 백그라운드 프로세스가 종료되고 SGA 메모리에서 제거된다.

  (QUESTION. 뭐가 제거돼? 백그라운드 프로세스가 SGA 에서 제거된단 소린가? 주어가 없잖아...)

  (ANSWER. 그렇다.)

  (QUESTION. 그리고 이것도 normal, transactional, immediate 의 공통점이야?)

  (ANSWER. 그렇다.)
- 오라클 서버는 instance가 종료되기 전에 데이터베이스를 닫고 (= 데이터 파일과 리두로그 파일을 닫고)
- 마운트를 해제한다. (control 파일을 닫는다)
- DB 를 안정적으로 끝낸다.
- 후에 데이터베이스를 다시 시작할 때 복구해야 할 대상이 없다. (instance recovery 가 필요하지 않다)

★ shutdown [transactional]
- transactional 옵션
- 새 연결을 생성할 수 없습니다.
- 새로운 세션은 생성할 수 없다.
- transaction을(DML 작업을) 수행하는 유저는 계속 오라클에 접속해 있도록 두고
- 접속은 했지만 아무 작업도 하지 않은 유저는 자동으로 session 을 종료시킨다.
- 모든 transaction 이 완료되면 (commit 혹은 rollback) 즉시 데이터베이스가 종료된다.
- 오라클 서버는 instance가 종료되기 전에 데이터베이스를 닫고 (= 데이터 파일과 리두로그 파일 닫고)
- 마운트를 해제한다. (control 파일을 닫는다)
- DB 를 안정적으로 끝낸다.
- 후에 데이터베이스를 다시 시작할 때 복구해야 할 대상이 없다. (instance recovery 가 필요하지 않다)


★ shutdown immediate
- 즉시 shutdown
- 새 연결을 생성할 수 없습니다.
- 새로운 세션은 생성할 수 없다.
- 오라클 서버가 현재 연결하고 있는 유저를 자동으로 kill 시킴(세션을 종료시킴)
- 현재 유저들 중에 DML 작업을 하고 있는 유저가 있었다면
- kill 시키는 순간 작업이 자동으로 rollback 된다.
- 오라클 서버는 instance가 종료되기 전에 데이터베이스를 닫고 (= 데이터 파일과 리두로그 파일을 닫고)
- 마운트를 해제한다. (control 파일을 닫는다)
- DB 를 안정적으로 끝낸다.
- 후에 데이터베이스를 다시 시작할 때 복구해야 할 대상이 없다. (instance recovery 가 필요하지 않다)
- 데이터베이스 close backup (DB 를 닫아놓고 백업하는 것)을 수행할 때와

- DATABASE full backup 을 할 때 쓴다.
  (QUESTION. 풀 백업이랑 콜드 백업이랑 같은거야?)

  (ANSWER. 그렇다.)

★  shutdown [abort]
- 비정상적인 종료
- DB 가 불완전하게 내려간다.
- normal 을 했는데도 안되고, transaction 을 했는데도 안되고 immediate 를 했는데도 셧다운이 안되고
- 대기만 하면서 작동이 되지 않을 경우 (process 가 안 죽고 엉킨 채로 계속 있는 경우)
- 문제는 파악을 못하겠는데 어쨌든 process는 빨리 종료시켜야 할 때
- 다른 세션에서 오라클로 들어간 다음 shutdown abort 할 수밖에 없다.
- 데이터 버퍼 캐시 및 리두 버퍼가 디스크에 기록되지 않습니다.

(QUESTION. 디스크에만 기록 안된다 뿐이지 메모리에는 남아있는 거지?)

(ANSWER. 그렇다.)

(QUESTION. 그럼 인스턴스 리커버리는 어떻게 해? 리두로그 버퍼 가지고 해?)

(ANSWER. 그렇다.)

- 하지만 commit 된 것은 전부 기록에 남아 있다.

(QUESTION. 어디에 남아 있다는 거야?)

(ANSWER. 데이터 버퍼 캐시)

- commit 되지 않은 transaction 은 rollback 되지 않습니다.
- 파일을 닫지 않은 상태로 instance 가 종료된다. (불완전 종료)

(QUESTION. 무슨 파일? 데이터 파일이랑 리두로그 파일?)

(ANSWER. 그냥 쓰던 모든 파일...

 예를 들어 메모장 쓰다가 안닫고 강제종료하는 거랑 똑같다고 보면 된다.)
- 데이터베이스가 닫히거나 마운트 해제되지 않는다.
- 데이터베이스를 다음 번에 시작할 경우 instance recovery 가 필요하며
- 이는 자동으로 수행된다.

 

만약 내가 shutdown 을 했는데 어떤 옵션으로 했는지 모르겠을 때는
alertlog 창을 보면 된다.

 


★ 주의!!!!!!!!!!!!!!!!!!!!!!!!!
shutdown abort 를 수행한 후
데이터베이스 백업은 하지 말자.
(백업해 봤자 의미가 없음, 백업본 가지고 리커버리하지 못하므로)

백업은 무조건 DB 오픈 전에, DB 가 내려가 있을 때에 미리 해놓아야 한다.

(QUESTION. 이게 무슨 소리야? DB를 immediate 로 내려놓고 그 뒤에 하란 소린가?

어차피 abort 는 immediate 가 안 먹힐 때 하는 거니까

일단 immediate로 DB 를 내려놓고 > 백업하고 > DB 가 안내려가면

그 뒤에 abort 하란 소리인가...

아니면 내가 필기를 또 잘못한거야? ㅠㅠ)

(ANSWER. 니 생각이 맞음, abort 하면 체크포인트가 엉망이 되기 때문에

그걸로 복구하려고 해봤자 복구할 수가 없다. 말짱 헛수고가 됨)

관련글 더보기