백업/정보컴퓨터

[정보][DB][트랜잭션] 2020-B-09 트랜잭션

Unknown9 2021. 2. 11. 16:24
반응형

 

 

트랜잭션 문제를 하나 빼먹었네요. ㄷㄷㄷㄷㄷㄷ 일단 문제를 읽어보았는데, 막 눈에 바로 들어오는 문제는 아니네요.

 

1) 트랜잭션 T1과 T2가 스케줄 s의 순서로 실행되었을 때, 스케줄 s의 회복 가능 여부를 쓰고, 그 이유를 서술할 것. (단, 스케줄 s 이전에 실행한 트랜잭션들은 모두 종료되었다고 가정함.)

s : r1(x) r2(x) w2(y, 60) r2(z) w1(x, 30) w2(z, 90) c2 c1

회복(recovery) 가능한 스케줄이란 어떤 트랜잭션 T가 읽은 데이터 x에 대해, 읽기 연산 이전에 데이터 x에 쓰기 연산을 수행한 모든 트랜잭션들이 완료되기 전까지는 T가 완료되지 않은 스케줄을 의미한다.

스케쥴 S를 설명하면,

s :

r1(x) T1에서 x를 읽음

r2(x) T2에서 x를 읽음

w2(y, 60) : T2에서 y를 60으로 저장

r2(z) : T2에서 z를 읽음

w1(x, 30) : T1에서 x에 30을 저장

w2(z, 90) : T2에서 z에 90을 저장

c2 : T2 종료

c1 : T1 종료

 

어떻게 설명을 해야할까요? 지문의 예를 가지고 설명을 해보았습니다.

x의 연산 사이에 w연산은 없습니다. 마지막에 w연산을 수행하고 T1/T2가 종료 됩니다.

답 : 회복 가능하다. T1 트랜잭션의 w가 완료된 이후에 T1 트랜잭션이 종료되었다.

(T1과 T2가 데이터 x를 읽고 T1이 데이터 x를 쓰기한 후 T2가 완료(commit)하고 이후 T1이 완료(commit)하기 때문이다.

 

2) 트랜잭션 T1, T2, T3이 병행적으로 실행되는 도중 시스템 실패가 발생하였으며, 그 동안 다음과 같은 로그가 기록되었다. 지연 갱신 기법에서 이 로그를 사용하여 회복 작업을 진행할 때, undo와 redo가 필요한 트랜잭션을 각 쓸 것. (단, 필요한 트랜잭션이 없을 경우 ‘없음’이라고 쓸 것.)

 

로그를 한번 볼까요?

<T1 start>
<T1, x, 20, 30>
<T1 commit>
<T2 start>
<T2, y, 50, 60>
<checkpoint>
<T3 start>
<T3, x, 30, 40>
<T2, z, 80, 90>
<T3 commit>

<-- 시스템 실패 발생 -->

 

지연 갱신 기법은 Undo가 없다.

 

 

 

undo가 필요한 트랜잭션 : 없음

redo가 필요한 트랜잭션 : T3

 

반응형