Answer:
See explaination
Step-by-step explanation:
1. The following schedule results in a write-read conflict:
T2:R(X), T2:R(Y), T2:W(X), T1:R(X) ...
T1:R(X) is a dirty read here.
2. The following schedule results in a read-write conflict:
T2:R(X), T2:R(Y), T1:R(X), T1:R(Y), T1:W(X) ...
Now, T2 will get an unrepeatable read on X.
3. The following schedule results in a write-write conflict:
T2:R(X), T2:R(Y), T1:R(X), T1:R(Y), T1:W(X), T2:W(X) ...
Now, T2 has overwritten uncommitted data.
Below history will show that T1 and T2 preserves the consistency requirement of the database
T1 T2:R1X, R1Y, W1X, c1, R2X, R2Y, W2X, W2Y, c2
T2 T1:R2X, R2Y, W2X, W2Y, c2,R1X, R1Y, W1X, c1
b)
To eliminate both undo and redo, all of T’s updates must be recorded in the stable database in a single atomic operation when T commits
We can implement this strategy using Shadowing and Stable database techniques.