Today I Learned
데이터베이스 회복 기법에는 여러가지가 있고 각각에 대해 배웠다.
로그 회복 기법에는 즉시 회복 기법(immidiate update)과 지연 갱신 회복(deferred update) 기법이 있다.
즉시 회복 기법은 트랜잭션 수행 중에 데이터를 변경한 연산의 결과를 데이터베이스에 즉시 반영한다.
에러가 발생했을 때를 대비해 데이터변경에 대한 내용도 로그파일에 기록한다.
트랜잭션에서 데이터 변경연산이 실행될때는, 로그 파이렝 로그 레코드를 먼저 기록하고 데이터베이스에 변경 연산을 반영해야한다.
즉시회복기법은 장애발생시점에 따라 redo와 undo를 실행한다
예를 들어 트랜잭션1을 실행중이다.
<트랜잭션1, start>
...데이터 변경...
...데이터 변경...
<트랜잭션1, commit>
이때 트랜잭션1이 start하고 commit이 되지 않은 상태에서 장애가 발생하면 undo를 실행한다.
commit까지한 상태에서 장애가 발생하면 redo를 실행한다.
(commit하면 이미 데이터가 적용된건데 왜 재실행하는 걸까?)
지연 갱신 회복기법은 트랜잭션 수행중에 데이터 변경 연산의 결과를 데이터베이스에 즉시 반영하지 않고 로그 파일에만 기록해두었다가 트랜잭션이 부분완료 된후에 로그에 기록된 내용을 이용해 데이터베이스에 한번에 반영한다.
그렇기 때문에 start이후 commit이전에 장애가 발생하면 아무것도 변한것이 없기 때문에 로그 파일만 버리기만 하면된다.
commit까지한 상태에서 장애가 발생하면 redo를 실행한다.
검사 시점(checkpoint) 회복기법과 미디어 회복 기법도 있다. 미디어회복기법은 덤프 방법을 이용하는 것이고 검사시점 회복기법은 로그 파파일에 있는 모든 로그에 대해 회복 기법을 수행하면 데이터베이스 회복에 시간이 너무 많이 걸리기 때문에 중간에 그것을 보완해 checkpoint를 만들어준다.