Database 시작 단계
- shutdown : Instance가 켜지지않은 단계
parameterfile
읽고 nomount로 올라감
- nomount :
parameterfile
에서 파라미터값이 정상적으로 읽은 뒤 파라미터값을 토대로 instance
가 시작된 단계
- 파라미터값 중에 control_files 값이 있는데 여기에 controlfile정보가 저장되어 있음
Controlfile
를 읽고 mount로 올라감
- mount :
Controlfile
을 찾아서 정상적으로 읽은 상태
- Datafile, Redologfile 위치 및 이름 변경
- Controlfile이 다중화된 갯수만큼 그만큼 마운트 시간이 오래 걸린다
- 전체 DB복구: DB모드(Archive log mode)변경가능
SMON
이 redologfiles
를 읽어서 DB동기화를 시켜줌
- open : DB가 정상적으로 켜진 단계, 일반 DB사용자 접속 가능
nomount에서 할 수 있는 대표적인 관리작업
- DB생성
- DB생성명렁어 :
create database;
- 위의 명령어는 아무데나 실행할 수 있는 명령어가 아니고 nomount에서만 할 수 있는 명령어이다.
- 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 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 명령어 가능
shutdown모드 |
A |
I |
T |
N |
새로 들어오는 접속을 허용 하는가? |
N |
N |
N |
N |
현재 세션 종료될때까지 기다릴건지? |
N |
N |
N |
Y |
현재 트랜잭션이 종료될때까지 기다릴건지? |
N |
N |
Y |
Y |
체크포인트를 발생시켜서 커밋된 작업은 반영할 것인지? |
N |
Y |
Y |
Y |
- 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.
|