【问题标题】:Does the Transient Fault Handling application block deal with a connection that is currently connected to a federated database?瞬态故障处理应用程序块是否处理当前连接到联合数据库的连接?
【发布时间】:2012-09-02 17:58:29
【问题描述】:

在 Windows Azure 中,我们有重试逻辑,使用瞬态故障处理应用程序块,它在我们的工作角色上按预期工作。 但是,我们最近升级了 SQL Azure 数据库以进行联合,此后遇到了一些问题。

我们的工作者角色偶尔会说某个特定的存储过程不存在。这是我们让它在运行循环中每秒检查的存储过程。角色遍历每个分片并在每个分片数据库上运行存储过程。这一切都很好,但是我们偶尔会在日志中收到错误,指出它找不到存储过程,调用堆栈表明 TransientFaultHandling 连接已重试。

看到我们的代码只是创建一个连接(保持打开状态)连接到一个分片,然后执行存储过程,我认为候选可能是,如果存在暂时性故障并重试连接,它可能最终连接回到根数据库而不是它曾经连接的分片?

我的问题是 TransientFaultHandling 块是否正确解决了这一问题并在重试连接时重新连接回正确的分片,如果没有,是否有这样做的最佳做法?

谢谢 加雷斯

【问题讨论】:

    标签: .net azure database-connection azure-sql-database sharding


    【解决方案1】:

    我怀疑你是在正确的轨道上;连接可能已重置为根数据库。瞬态故障处理块将自动处理瞬态错误,但据我所知,它不支持联邦。

    我想知道您的代码是如何构成的。但这里有一个想法(如果这不是您已经在做的):您可以使用应用程序块重试包括连接请求、USE 命令(用于联合)和存储的 proc 调用的整段代码。因此,如果失败,一切都将被重试。为此,您可以创建一个重试策略对象(这将是 SQL 数据库瞬态检测策略),然后调用 ExecuteAction 方法来执行您想要完成的所有工作。

    希望这会有所帮助。

    赫维

    【讨论】:

    • 谢谢。这就是我的想法,我目前正在按照你的建议做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 2017-03-16
    • 2019-08-21
    • 2016-07-26
    • 2015-03-04
    相关资源
    最近更新 更多