이전에 트랜잭션과 회복 기법에 대해 조사해봤었는데 이제와서 다시보니 헷갈려서 회복에 대해 다시 정리하기로 하였습니다.
1. 즉시 갱신 회복 기법
이 기법을 사용하면 트랜잭션 도중 데이터가 변경되면 그 내용을 DB에 즉시 반영하고 로그에 기록합니다. 트랜잭션 완료(Commit) 이전에 수행한 갱신 연산을 미완료 갱신(Uncommitted Update)라고 합니다.
만약 트랜잭션 수행 도중 에러가 발생하면 로그에 있는 내용을 기반으로 UNDO 합니다.
따라서 회복을 진행하고 나면 DB는 해당 트랜잭션이 실행되기 이전으로 돌아갑니다. 이 때 로그를 참조하여 이전 상태로 돌아가는 것을 UNDO라고 합니다.
만약 트랜잭션에서 오류가 발생하기 이전에 이미 COMMIT 된 다른 트랜잭션이 있다면 그 트랜잭션을 REDO 합니다. (이유는?)
그리고 트랜잭션을 다시 실행하여 DB를 변경하는데 이를 REDO 라고 합니다.
2. 지연 갱신 회복 기법
트랜잭션이 부분 완료 상태가 되기 전까지 모든 변경 내용을 로그에만 저장합니다. 데이터베이스에는 COMMIT 할 때 반영을 합니다.
이 때 부분 완료란 데이터베이스가 COMMIT 되기 직전의 상태 즉, 트랜잭션에서 모든 데이터의 변경이 끝난 이후를 말합니다.
트랜잭션 도중 에러가 발생했을 때 로그 파일을 무시한다. COMMIT 이전이므로 DB는 트랜잭션을 실행하기 이전 상태와 같습니다.
즉시 갱신 회복 기법에서는 UNDO를 통해 데이터베이스를 복구했어야 했던 반면에 지연 갱신 회복 기법은 UNDO가 필요없습니다.
그리고 트랜잭션을 다시 실행하는 REDO를 합니다.
라고 알고 있었는데 아무래도 부정확한 부분들이 몇몇 있는 것 같습니다. 먼저, 지연 갱신 회복 기법과 즉시 갱신 회복 기법의 COMMIT 시점은 상황에 따라 달라집니다.
기법은 말 그대로 기법입니다. 즉, 이것들은 코드로 구현되어야 비로소 의미가 있는 것입니다. 때문에 정책 또는 개발자에 따라 COMMIT 시점이 변경되는 것입니다.
Checkcpoint는 redo를 할 때 모든 트랜잭션을 하면 효율이 떨어지기 때문에 사용합니다. 그리고 트랜잭션이 진행 중이더라도 그 시점까지 변경된 데이터를 강제로 DB에 반영합니다.
그리고 Check Point 회복기법을 지연 갱신 회복 기법과 함께 사용합니다.
===================================
선생님께서 즉시 갱신, 지연 갱신에 대해 다음에 다시 가르쳐주신다고 한다.
즉시 갱신, 지연 갱신 기법은 말 그대로 기법이다. 즉, 코드로 구현하는 것.
즉시 갱신은 checkpoint처럼 DB에 즉시 반영됨(확실 X)
일단 코드를 직접 봐야할 듯
지연 갱신은 보통 백그라운드에서 트리거를 통해 commit
checkpoint란, 사용하는 이유(redo할 때 효율 때문에)
checkpoint는 트랜잭션이 진행 중이더라도 그 때까지의 변경된 데이터를 바로 DB에 반영(강제출력과 비슷)
===================================
http://altibase.com/product/in-memory-database/
http://www.mcobject.com/in_memory_database
https://en.wikibooks.org/wiki/Design_of_Main_Memory_Database_System/Overview_of_DBMS
'데이터베이스' 카테고리의 다른 글
[데이터베이스] FK의 사용 (0) | 2017.01.12 |
---|---|
우분투 16.04 msyql 설치 및 utf-8 설정 (0) | 2016.12.20 |
[데이터베이스] mysql join (0) | 2016.12.05 |
트랜잭션과 회복 (0) | 2016.11.16 |