如何测试存储过程的两阶段提交行为?

时间:2010-07-15 13:33:03

标签: stored-procedures distributed-transactions

此特定存储过程执行归档清除:
1)从事务数据库中选择令牌
2)在温度表中放入令牌
3)循环令牌:
3.1)使用临时表中的令牌,从事务表中检索数据并插入到单独的归档数据库中的表(通过联合)
3.2)COMMIT插入。
3.3)然后使用相同的令牌这次从事务中删除数据
3.4)COMMIT删除。


2阶段提交允许我们在循环结束时只有一个提交

我的问题是如何模拟在插入阶段或删除阶段使proc失败的场景?这是为了确保即使运行失败,数据仍保持完整性 - 没有半处理的令牌等。

3 个答案:

答案 0 :(得分:0)

要强制运行时错误,我通常会在代码中放入SELECT 0/0。只需将它放在您选择的COMMIT之前,然后观看产生的烟花!

答案 1 :(得分:0)

如果您涉及到唯一的密钥,您可以放置​​一个可能导致重复密钥翻转的记录。

答案 2 :(得分: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;