개요
특정 사유로 DB를 비정상적으로 종료할 시 down 및 로그 포함한 기동 절차에 대해 안내합니다.
방법
1. 모든 DB 접속세션 종료
WAS down 등으로 모든 DB 접속세션을 끊습니다. (jdown, kill -9 [jeus pid])
2. 세션 rollback 예상시간 확인
SQL> select sess_id, start_time, used_blk, EXP_RB_TIME from v$transaction;
SESS_ID START_TIME USED_BLK EXP_RB_TIME
---------- -------------------------------- ---------- -----------
33 2016-04-22 19:35:32 142690 970
1 row selected.
SQL
복사
3. DB 강제 종료
rollback 예상시간이 오래 걸려 완료까지 기다릴 수 없을 경우, checkpoint 수행 후 강제로 DB를 종료합니다.
-- checkpoint 수행
SQL> ALTER SYSTEM CHECKPOINT;
SQL
복사
4. tbdown abort
5. recovery 수행
다음 tbboot 시 recovery를 진행합니다.
[cache recovery 진행]
[ACF][0] 01 tbsvr_mo:166 [0] acquires Instance Recovery lock(MOUNT mode)
[ACF][0] 01 tbsvr_mo:230 [0] holding Instance Recovery locks(RECOVERY mode)
[CLC][0] 01 tc_recov:1761 [0] TC RECOVERY...PREPARE
…
[CLC][0] 01 tc_recov:1249 THREAD#0 logfile scanned. flushed=[582.4194386/0000.02c5dd33].
[CLC][0] 01 tc_recov:1271 THREAD#0, Recovery start tsn progress.(0000.02c02bdc => 0000.02c075d6)
[CLC][0] 01 tc_recov:1400 THREAD#0 needs REPLAY, from 0000.02c075d6, (5786040 LOG_BLKs)
[CLC][0] 01 tc_cf_df:2012 DATAFILES OPEN 0000.02c5dd34
[CLC][0] 01 tc_recov:1990 [0] TC RECOVERY...START. incar no 0
…
[CLC][0] 01 tc_rset.:1382 RSET inits claiming bufs 632142
[CLC][0] 01 tc_rset.:1451 no more free bh for recovery
[CLC][0] 01 tc_rset.:1485 complete_ir=0 claiming bufs (reco: 204512/632142, cur: 427630, skip: 0)
[CLC][0] 01 tc_recov:2065 [0] can perform Partial Instance Recovery
[cache recovery 1st pass Done.]
[CLC][0] 01 tc_recov:2073 [0] IR 1st Pass Done
…
[cache recovery 2nd pass Done.]
[CLC][0] 01 tc_recov:2018 [0] IR 2nd Pass Done
…
[cache recovery 완료]
[CLC][0] 01 tc_recov:2090 [0] TC RECOVERY...DONE
...
[Tx recovery 진행]
[CT-][0] 01 tx_recov:1001 TX RECOVERY...PREPARE
[CT-][0] 01 tx_recov:1094 TX RECOVERY...START (dead 34)
…
[DB는 open 되고 Tx recovery는 특정세션에서 계속 진행.]
[FRM][0] 01 tbsvr_ma:1496 Server is running at NORMAL mode (bootmode : NORMAL)
…
[Tx recovery 완료]
[CT-][0] 01 tx_recov:696 TX RECOVERY...DONE
SQL
복사
참고
세션이 종료되었을 때 진행 중이던 트랜잭션이 있다면, sess_recoverting이 수행됩니다.
이때 tbdown immediate 명령으로 종료했을 경우, sess_recoverting 이 완료될 때까지 기다렸다가 DB가 down 되며 tracelog에서는 30초 간격으로 나타나는 메시지를 통해 sess_recoverting 중임을 확인할 수 있습니다.
tbsvr_er:063 THROW. ec=ERROR_SERVER_IN_SHUTDOWN(-12039) [ Server instance is shutting down. ] (csr_id:4294967295) [tbsvr_wthr.c:2145:wthr_get_new_cli_con]
[30초 간격으로 출력]
tbsvr_sh:229 shutdown: waiting for releasing SESS lock (tid=38, thr_status=THR_STAT_WAITING, sess_status=SESS_RECOVERING)
tbsvr_sh:229 shutdown: waiting for releasing SESS lock (tid=38, thr_status=THR_STAT_WAITING, sess_status=SESS_RECOVERING)
…
SQL
복사
주의
cache recovery는 수행하지 않고 건너뛸 수 없습니다.
또한, cache recovery 진행 도중 instance 종료 후 재 시작을 하게 된다면
처음부터 다시 시작하게 됩니다.