此特定存储过程执行归档清除:
1)从事务数据库中选择令牌
2)在温度表中放入令牌
3)循环令牌:
3.1)使用临时表中的令牌,从事务表中检索数据并插入到单独的归档数据库中的表(通过联合)
3.2)COMMIT插入。
3.3)然后使用相同的令牌这次从事务中删除数据
3.4)COMMIT删除。
2阶段提交允许我们在循环结束时只有一个提交
我的问题是如何模拟在插入阶段或删除阶段使proc失败的场景?这是为了确保即使运行失败,数据仍保持完整性 - 没有半处理的令牌等。
答案 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;