Unrecoverable schedule
- 스케쥴 내에서 commit된 트랜잭션이, rollback된 트랜잭션이 write했던 데이터를 읽은 경우
- rollback을 해도 이전 상태로 회복 불가능할 수 있기 때문에 이런 스케쥴은 DBMS가 허용하면 안 된다.
Recoverable schedule
- 스케쥴 내에서 그 어떤 트랜잭션도 자신이 읽은 데이터를 write한 트랜잭션(의존하고 있는 트랜잭션)이 먼저 commit/rollback 되기 전까지는 commit하지 않는다.
- rollback할 때 이전 상태로 온전히 돌아갈 수 있기 때문에 DBMS는 이런 스케쥴만 허용해야 한다.
Cascading rollback
- 하나의 트랜잭션이 rollback하면 의존성이 있는 다른 트랜잭션도 rollback해야 한다.
- 여러 트랜잭션의 rollback이 연쇄적으로 일어나면 처리하는 비용이 많이 든다.
⬇️
데이터를 write한 트랜잭션이 commit/rollback한 뒤에 데이터를 읽는 스케쥴만 허용하자!
⬇️
Cascadeless schedule
- (avoid cascading rollback)
- 스케쥴 내에서 어떤 트랜잭션도 commit되지 않은 트랜잭션들이 write한 데이터는 읽지 않는 경우
⬇️
Strict schedule
- 스케쥴 내에서 어떤 트랜잭션도 commit되지 않은 트랜잭션들이 write한 데이터는 쓰지도, 읽지도 않는 경우
- rollback할 때 recovery가 쉽다. 트랜잭션 이전 상태로 돌려놓기만 하면 된다.