Stored procedures 如何在存储过程上测试两阶段提交行为?

Stored procedures 如何在存储过程上测试两阶段提交行为?,stored-procedures,distributed-transactions,Stored Procedures,Distributed Transactions,此特定存储过程执行归档清除: 1从事务数据库中选择令牌 2将代币放入临时表中 3循环通过令牌: 3.1使用临时表中的令牌,从事务表中检索数据,并通过联合将数据插入到单独的存档数据库中的表中 3.2提交插入。 3.3然后这次使用相同的令牌从事务数据库中删除数据 3.4提交删除 2阶段提交允许我们在循环结束时只进行一次提交 我的问题是如何模拟场景,使proc在插入阶段或删除阶段失败?这是为了确保即使运行失败,数据仍保持完整性—没有半处理的令牌或诸如此类的令牌。为了强制执行运行时错误,我通常在代码中输

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

2阶段提交允许我们在循环结束时只进行一次提交


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

为了强制执行运行时错误,我通常在代码中输入SELECT 0/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;

谢谢虽然我得到的是编译错误而不是运行时错误。谢谢!这有帮助,但不适用于上述特定场景。这将在插入阶段失败,这意味着尚未提交任何内容。i、 没有要回滚的内容。