2010-07-15 79 views
1

這個特定的所存儲過程確實存檔吹掃:
1)從交易分貝
2)把令牌在臨時表
3)循環通過令牌選擇標記:使用從臨時表令牌
3.1),檢索數據事務表和插入到單獨歸檔數據庫中的表(通過聯合)
3.2)COMMIT插入。
3.3)然後使用相同的令牌從事務中刪除數據
3.4)COMMIT刪除。如何測試存儲過程的兩階段提交行爲?


2階段提交允許我們只有一個承諾在循環

我的問題是到底如何模擬場景,使PROC失敗在插入階段或刪除階段?這是爲了確保即使運行失敗,數據仍然保持完整性 - 沒有半處理令牌等。

回答

0

強制運行時錯誤,我通常在代碼中放入一個SELECT 0/0。只需將它放在您選擇的COMMIT之前,然後觀看結果產生的煙花!

+0

裏面的感謝!雖然我得到一個編譯錯誤,而不是運行時錯誤。 – javacruiser 2010-07-23 04:36:58

0

如果你有獨特的密鑰參與,你可以放置一個會導致重複密鑰提交的記錄。

+0

謝謝!這有助於但不是針對上述特定情況。這將在插入階段失敗,這意味着還沒有任何承諾。即沒有回滾。 – javacruiser 2010-07-23 04:46:13

0

希望這會幫助別人! 我剛剛發現最好的方式是通過信號。 在刪除階段的中間,我輸入了一個錯誤信號,所以進程將在該令牌上失敗並退出循環,所以它應該回滾該令牌在插入階段插入的任何內容。

DECLARE rollback_on_token_101 CONDITION FOR SQLSTATE '99001'; 

刪除階段的循環中

IF TOKEN_SUCCESS_COUNT=100 THEN 
    SIGNAL rollback_on_token_101 
    SET MESSAGE_TEXT = 'rolling back on mid-delete phase on token # 101 '; 
END IF;