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

nomount에서 할 수 있는 대표적인 관리작업
- DB생성- DB생성명렁어 : create database;
- 위의 명령어는 아무데나 실행할 수 있는 명령어가 아니고 nomount에서만 할 수 있는 명령어이다.
 
- DB생성명렁어 : 
- Controlfile 재생성
DB가 shutdown일때 쓸 수 있는 명령어
원래 문법상 startup 명령어 뒤에는 세미콜론(;)이 붙지않는다.
하지만 세미콜론을 붙여도 실행은 해준다.
- startup nomount: shutdown에서 nomount까지 올라가는 명령어
- startup mount: shutdown에서 mount까지 올라가는 명령어
- startup: shutdown에서 open까지 올라가는 명령어- 명렁어를 통해 한 번에 3단계씩 올라갈 수 있다.
 

DB가 각 단계에서 위로 올릴때 쓰는 명령어
DB가 shutdown상태가 아닌 특정 단계에 있을 때 아래와 같은 명령어를 사용할 수 있다.
아래 명령어는 한 번에 한 단계씩만 올라갈 수 있다. 두 단계씩 못 올라감.
즉, nomount에서 open으로 올라가는 명령어는 없다. 차근차근 올라가야함.
- alter database mount;: nomount에서 mount까지 올라가는 명령어
- alter database open;: mount에서 open까지 올라가는 명령어
지금 어디까지 켜져있는지 확인하는 명령어
지금이 nomount인지 mount인지 어디인지 확인하는 명령어이다.
지금 어느 상태인지 status가 알려준다.
| 1 | //명령어 | 
DB 종료하기
DB시작할때는 한계단씩 켤수있으나 종료할때는 OPEN에서 SHUTDOWN으로 바로 내려가야한다.
- 현재 MOUNT이든지 OPEN이든지 무조건 SHUTDOWN으로만 내려올 수 있다.
- 그렇다면 OPEN인 상태에선 어떻게 MOUNT로 내려갈 수 있을까?- OPEN에서 SHUTDOWN으로 내려간 뒤 다시 MOUNT로 올라가야한다.
 
종료 명령어
- 비정상적인 종료 : abort1 
 2SQL> shut abort 
 ORACLE instance shut down.
- 정상적인 종료 : immediate, transactional, normal(default)
- shutdown 줄여서 shut 명령어 가능

| 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 | SQL> shut immediate | 
shutdown transactional
- shutdown transactional = shut transactional
 현재 진행되고있는 트랜잭션이 있다면 커밋/롤백으로 마무리될때까지 기다렸다가 종료하는 모드
 기다렸다가 종료하는 모드이므로 언제 꺼질지는 모른다.
 새로운 트랜잭션이 늘어나진않는다.
| 1 | //HR세션(p113) | 
shutdown normal(default)
- shutdown normal = shutdown = shut
 디폴트값이다
 접속되어있는 모든 유저들의 세션이 종료될때까지 기다려준다.
 새로운 트랜잭션이 늘어난다.
| 1 | SQL> shut | 
shut명령어를 날렸는데 너무 오래기다려서 더이상 기다릴 수없어서 명령어를 shut immediate로 바꾸고 싶다면?
- 명령어 취소 : ctrl + z
![[OS/WINDOW]배포후 서버재시작에 batch와 윈도우 스케줄러 활용하기](https://cdn.pixabay.com/photo/2012/03/04/00/50/board-22098_960_720.jpg)
![[블로그]헥소테마에서 댓글기능 facebook에서 utterances로 변경하기](https://miro.medium.com/max/1600/1*aOv6h3h_v9PQWa03zGACnw.png)