我们在无服务器层使用 Azure SQL 数据库。开发实例设置为在 1 小时不活动后自动暂停。
在该睡眠期间执行的计划作业失败并显示消息
Database 'dev-db' on server 'myserver.database.windows.net' is not currently available. Please retry the connection later. If the problem persists, contact customer support, and provide them the session tracing ID of '{guidhere}'.
Microsoft 建议将连接超时设置为至少 30 秒。。我们作业的连接字符串已经使用了该值的 4 倍,但仍然失败。数据库在大小方面非常轻量级,如果这可能与它有关的话。
Data Source=tcp:myserver.database.windows.net,1433;Initial Catalog=dev-db;Connect Timeout=120
DBContext 还配置了重试选项:
{
string[] scopes = ["https://database.windows.net/"];
string token = "token";
string connStr = "Data Source=tcp:myserver.database.windows.net,1433;Initial Catalog=dev-db;Connect Timeout=120";
SqlConnection connection = new() { ConnectionString = connStr, AccessToken = token };
opt.UseSqlServer(connection, opt =>
{
opt.EnableRetryOnFailure(maxRetryCount: 10);
});
}
您是否也经历过长时间的唤醒延迟?
Database 'dev-db' on server 'myserver.database.windows.net' is not currently available. Please retry the connection later. If the problem persists, contact customer support, and provide them the session tracing ID of '{guidhere}'
根据MS文档
如果无服务器数据库暂停,第一次登录活动将恢复数据库并返回一条错误,指出数据库不可用,错误代码为 40613。恢复数据库后,可以重试登录以建立连接。
这可能是出现上述错误的原因。要解决此问题,请将 azure SQL 数据库中的服务层更改为“基本(对于要求较低的工作负载)”,如下所示:
欲了解更多信息,您可以参考以下文档: