簡介,舉例,主要表現,
簡介
事務故障是由於程式執行錯誤而引起事務非預期的、異常終止的故障。它發生在單個事務的局部範圍內,實際上就是程式的故障。有的事務故障可以通過事務程式本身發現。
舉例
銀行轉賬事務把一筆金額從賬戶甲轉給賬戶乙。程式偽碼如下:
BEGIN TRANSACTION
讀賬戶甲的餘額為x;
x=x-a; //a轉賬金額
IF(x<0) THEN
{列印‘金額不足,不能轉賬’;
ROLLBACK;}
ELSE
{寫回x;讀賬戶乙的餘額y;
y=y+a;
寫回y;
COMMIT;}
這段程式中若賬戶甲餘額不足,程式可以發現並讓事務滾回,撤銷已做的修改,是數據恢復到正確狀態。
事務故障意味著事務沒有達到預期的終點(COMMIT或者顯示ROLLBACK),因此資料庫可能處於不正確狀態。恢復程式要在不影響其他事務的運行情況下,強行滾回該事務,即撤銷該事務已經做出的任何對資料庫的修改,這類恢復操作稱為事務撤銷(UNDO)。
主要表現
事務故障更多的是非預期的,不能由事務程式處理的情況,主要有:
①邏輯上的錯誤,如運算溢出、死循環、非法操作、地址越界等等;
②違反完整性限制的無效的輸入數據;
③違反安全性限制的存取許可權;
④資源限定,如為了解除死鎖、實施可串化的調度策略等而ABORT一個事務;
⑤用戶的控制台命令。