오라클의 Database 켜고 끄기

오라클의 Database 켜고 끄기

Database 시작 단계

  1. shutdown : Instance가 켜지지않은 단계
  2. parameterfile 읽고 nomount로 올라감
  3. nomount : parameterfile에서 파라미터값이 정상적으로 읽은 뒤 파라미터값을 토대로 instance가 시작된 단계
    • 파라미터값 중에 control_files 값이 있는데 여기에 controlfile정보가 저장되어 있음
  4. Controlfile를 읽고 mount로 올라감
  5. mount : Controlfile을 찾아서 정상적으로 읽은 상태
    • Datafile, Redologfile 위치 및 이름 변경
    • Controlfile이 다중화된 갯수만큼 그만큼 마운트 시간이 오래 걸린다
    • 전체 DB복구: DB모드(Archive log mode)변경가능
      • 명령어 : recover database;
  6. SMONredologfiles를 읽어서 DB동기화를 시켜줌
  7. open : DB가 정상적으로 켜진 단계, 일반 DB사용자 접속 가능

https://www.kdata.or.kr/info/info_04_view.html?field=&keyword=&type=techreport&page=240&dbnum=127439&mode=detail&type=techreport




nomount에서 할 수 있는 대표적인 관리작업

  • DB생성
    • DB생성명렁어 : create database;
    • 위의 명령어는 아무데나 실행할 수 있는 명령어가 아니고 nomount에서만 할 수 있는 명령어이다.
  • Controlfile 재생성




DB가 shutdown일때 쓸 수 있는 명령어

원래 문법상 startup 명령어 뒤에는 세미콜론(;)이 붙지않는다.
하지만 세미콜론을 붙여도 실행은 해준다.

  • startup nomount : shutdown에서 nomount까지 올라가는 명령어
  • startup mount : shutdown에서 mount까지 올라가는 명령어
  • startup : shutdown에서 open까지 올라가는 명령어
    • 명렁어를 통해 한 번에 3단계씩 올라갈 수 있다.

https://www.ktexperts.com/startup-and-shutdown-modes-in-oracle/




DB가 각 단계에서 위로 올릴때 쓰는 명령어

DB가 shutdown상태가 아닌 특정 단계에 있을 때 아래와 같은 명령어를 사용할 수 있다.
아래 명령어는 한 번에 한 단계씩만 올라갈 수 있다. 두 단계씩 못 올라감.
즉, nomount에서 open으로 올라가는 명령어는 없다. 차근차근 올라가야함.

  • alter database mount; : nomount에서 mount까지 올라가는 명령어
  • alter database open; : mount에서 open까지 올라가는 명령어




지금 어디까지 켜져있는지 확인하는 명령어

지금이 nomount인지 mount인지 어디인지 확인하는 명령어이다.
지금 어느 상태인지 status가 알려준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//명령어
select status from v$instance;

//shutdown상태인 경우 오류메세지 출력
ERROR at line 1:
ORA-01034: ORACLE not available
Process ID: 0
Session ID: 0 Serial number: 0


//nomount상태인 경우 STARTED 출력
STATUS
------------------------
STARTED


//mount상태인 경우 MOUNTED 출력됨
STATUS
------------------------
MOUNTED


//open상태인 경우 OPEN 출력됨
STATUS
------------------------
OPEN




DB 종료하기

DB시작할때는 한계단씩 켤수있으나 종료할때는 OPEN에서 SHUTDOWN으로 바로 내려가야한다.

  • 현재 MOUNT이든지 OPEN이든지 무조건 SHUTDOWN으로만 내려올 수 있다.
  • 그렇다면 OPEN인 상태에선 어떻게 MOUNT로 내려갈 수 있을까?
    • OPEN에서 SHUTDOWN으로 내려간 뒤 다시 MOUNT로 올라가야한다.




종료 명령어

  • 비정상적인 종료 : abort
    1
    2
    SQL> shut abort
    ORACLE instance shut down.
  • 정상적인 종료 : immediate, transactional, normal(default)
  • shutdown 줄여서 shut 명령어 가능

https://www.slideshare.net/AmitBhalla2/less04-database-instance

shutdown모드 A I T N
새로 들어오는 접속을 허용 하는가? N N N N
현재 세션 종료될때까지 기다릴건지? N N N Y
현재 트랜잭션이 종료될때까지 기다릴건지? N N Y Y
체크포인트를 발생시켜서 커밋된 작업은 반영할 것인지? N Y Y Y




shutdown immediate

  • shutdown immediate = shut immediate
    DB를 정상적으로 끄면서 가장 빠르게 종료시키는 명령어
    체크포인트가 바로 발생하는 명령어 -> redologfiles에 로그가 저장되고 더디블럭이 datafiles에 내려옴 -> 동기화 된 채로 종료
1
2
3
4
SQL> shut immediate
Database closed.
Database dismounted.
ORACLE instance shut down.




shutdown transactional

  • shutdown transactional = shut transactional
    현재 진행되고있는 트랜잭션이 있다면 커밋/롤백으로 마무리될때까지 기다렸다가 종료하는 모드
    기다렸다가 종료하는 모드이므로 언제 꺼질지는 모른다.
    새로운 트랜잭션이 늘어나진않는다.
1
2
3
4
5
6
7
8
9
10
11
12
13
//HR세션(p113)
insert into regions values (5,'Mars');

//SYS세션 : 더이상 진행되지않음. 변화없음
SQL> shut transactional

//HR세션
rollback;

//SYS세션 : 트랜잭션 종료되자마자 시작
Database closed.
Database dismounted.
ORACLE instance shut down.




shutdown normal(default)

  • shutdown normal = shutdown = shut
    디폴트값이다
    접속되어있는 모든 유저들의 세션이 종료될때까지 기다려준다.
    새로운 트랜잭션이 늘어난다.
1
2
3
4
SQL> shut
Database closed.
Database dismounted.
ORACLE instance shut down.

shut명령어를 날렸는데 너무 오래기다려서 더이상 기다릴 수없어서 명령어를 shut immediate로 바꾸고 싶다면?

  • 명령어 취소 : ctrl + z