Undo 처리 원리에 대해서 0 2 1,979

by 깽즈 [Oracle Admin] [2012.01.20 19:13:47]


안녕하세요~
현재 Oracle Admin을 공부하고 있는 학생입니다^^

다름이 아니라 공부중에 궁금증이 생겼는데 아무리 생각해도 이해가 되지 않고 적절한 답을 찾지 못해서
여기에 글을 남깁니다.

제가 궁금한 것은 다음과 같은 순서로 진행될때입니다.

1. User Process에 의해서 update 문이 수행된다.
2. Oracle Server에서는 redo log buffer에 변경사항이 기록되고 undo segment에 변경전 내용이 기록되고, db buffer cache의 해당 block의 내용잉 수정이 됩니다.
3. User는 commit을 하지 않았는데 LGWR의 기능에 따라서 3초에 한번 또는 1/3이 차버려서 redo log buffer의 내용을 redo log file로 내려쓰게 됩니다.
4. redo log file에서는 file의 공간이 부족하여 log switch가 발생합니다.
5. 이때 checkpoint 신호가 발생하여 DBWR에 의해서 db buffer cache의 내용을 disk 파일로 내렸버립니다.
6. user는 commit을 하지않고 종료

제가 궁금한 것은 이렇게 commit 없이 종료하였는데 현재 update 문에 의해서 변경된 데이터가 data file에까지 저장이 된 상태가 된거 같은데..
정상적으로 LGWR, CKPT, DBWR 프로세스에 의해서 해당 작업이 이루어 졌고요..
Oracle Server를 재가동 했을 경우에는 해당 update 했던 데이터가 원래 데이터로 복원되나요?
복원된다면 어떤 원리로 되는지가 궁금합니다..
설명해주셔야 할 내용이 많다면 참고할 만한 서적이라도 추천을 부탁드립니다.

조언부탁드리겠습니다~
감사합니다^^
by 타락천사 [2012.01.20 21:17:04]
가.
6. 명시적으로 commit 하지 않고 세션이 종료 되면( SQL*PLUS 제외하곤 )
rollback 됩니다.
나.
세션이 commit 하지 않은 상태에서 DB 가 갑자기 종료 된 후
재기동시, 명시적인 commit 이 redo 에 없기 때문에 rollback 조치 됩니다.

성능고도화 책 보세요 추천 꾸욱

by 깽즈 [2012.01.22 23:49:42]
그렇게 되는 것이었군요...
더 자세한 내용은 더 추천해주신 책에서 답을 찾아야 겠네요^^
답변 감사드립니다~~~^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입