gpt4 book ai didi

azure-sql-database - 暂停时 Azure SQL Serverless 数据库返回代码

转载 作者:行者123 更新时间:2023-12-03 14:48:03 24 4
gpt4 key购买 nike

说明:

我有一个连接到 Azure 无服务器数据库的应用程序。数据库可以处于暂停状态和在线状态。当一小时没有事件时,数据库会自动暂停。这意味着当我的应用程序在暂停时尝试打开与数据库的连接时,连接超时并给出超时异常。

Azure 在他们的文档中声明:

If a serverless database is paused, then the first login will resume the database and return an error stating that the database is unavailable with error code 40613. Once the database is resumed, the login must be retried to establish connectivity. Database clients with connection retry logic should not need to be modified. source



当我尝试通过 SQL Management Studio 连接到数据库时,我能够返回此错误代码 40613。但是当我尝试从我的应用程序打开到数据库的连接时,我只收到超时异常,因此我不知道数据库是否不可用或者数据库是否实际上正在恢复。

代码示例:
public IDbConnection GetConnection()
{
var connection = new SqlConnection(_connectionString);
try
{
connection.Open();
return connection;
}
catch (SqlException e)
{
if (e.Number == 40613)
{
//Database is resuming
}
}
finally
{
connection.Close();
}
}

异常示例:

当我运行我的应用程序并且数据库处于暂停状态时,我收到此异常:
Snippet of exception in Visual Studio

有谁知道为什么我没有收到 Azure 在其文档中声明的错误代码 40613?

最佳答案

实际上,当 Azure 数据库不可用时,您可能会收到超时错误。实际上,您可能会收到以下错误:

  • HTTP 错误 GatewayTimeout : 网关没有收到响应
    来自指定时间段内的“Microsoft.Sql”
  • HTTP 错误 ServiceUnavailable : 请求超时
  • SQLException : 执行超时已过期。操作完成前超时时间已过或服务器未响应。

  • 您可能还会收到错误 40613,但您也可以捕获一些如下的暂时性错误:

    •服务器上的数据库当前不可用。请稍后重试连接。如果问题仍然存在,请联系客户支持,并向他们提供 session 跟踪 ID

    •服务器上的数据库当前不可用。请稍后重试连接。如果问题仍然存在,请联系客户支持,并向他们提供 的 session 跟踪 ID。 (Microsoft SQL Server,错误:40613)

    • 现有连接被远程主机强行关闭。

    •System.Data.Entity.Core.EntityCommandExecutionException:执行命令定义时出错。有关详细信息,请参阅内部异常。 ---> System.Data.SqlClient.SqlException:从服务器接收结果时发生传输级错误。 (提供程序: session 提供程序,错误:19 - 物理连接不可用)

    • 与辅助数据库的连接尝试失败,因为该数据库正在重新配置过程中,并且在主数据库上的事件事务处理过程中正忙于应用新页面。

    由于那些错误和更多解释 here ,有必要在连接到 Azure SQL 数据库的应用程序上创建重试逻辑。
    public void HandleTransients()
    {
    var connStr = "some database";
    var _policy = RetryPolicy.Create < SqlAzureTransientErrorDetectionStrategy(
    retryCount: 3,
    retryInterval: TimeSpan.FromSeconds(5));

    using (var conn = new ReliableSqlConnection(connStr, _policy))
    {
    // Do SQL stuff here.
    }
    }

    更多关于如何创建重试逻辑 here .

    关于azure-sql-database - 暂停时 Azure SQL Serverless 数据库返回代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59984144/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com