这个特定的存储过程执行归档清除:
1)从事务数据库中选择令牌
2)将令牌放入临时表
3)循环令牌:
3.1)使用临时表中的令牌,从事务表中检索数据并插入到单独归档中的表中db(通过联邦)
3.2)提交插入。
3.3)然后这次使用相同的令牌从事务中删除数据
3.4)COMMIT 删除。
2 阶段提交允许我们在循环结束时只有一个提交
我的问题是如何模拟场景以使 proc 在插入阶段或删除阶段失败?这是为了确保即使运行失败,数据仍保持完整性——没有半处理令牌等。
这个特定的存储过程执行归档清除:
1)从事务数据库中选择令牌
2)将令牌放入临时表
3)循环令牌:
3.1)使用临时表中的令牌,从事务表中检索数据并插入到单独归档中的表中db(通过联邦)
3.2)提交插入。
3.3)然后这次使用相同的令牌从事务中删除数据
3.4)COMMIT 删除。
2 阶段提交允许我们在循环结束时只有一个提交
我的问题是如何模拟场景以使 proc 在插入阶段或删除阶段失败?这是为了确保即使运行失败,数据仍保持完整性——没有半处理令牌等。
为了强制出现运行时错误,我通常在代码中放入 a SELECT 0/0
。只需将其放在COMMIT
您选择的之前,然后观看产生的烟花!
如果您涉及到唯一键,您可以放置一个记录,这会导致重复键违规。
希望这对其他人有帮助!我最近发现最好的方法是通过信号。在删除阶段的中间,我输入了一个错误信号,因此进程将在该令牌上失败并退出循环,因此它应该回滚它在插入阶段为该令牌插入的任何内容。
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;