Azure 中已删除 SQL 数据库的意外重新创建和成本增加:这是错误还是预期行为?

问题描述 投票:0回答:1

我遇到一个问题,我删除的 SQL 数据库再次出现,并导致我们的 Azure 帐户出现意外的高额费用。

背景:

  • 6 月 11 日,我的老板要求我审查我们的 Azure 账单并删除任何不必要的资源。我是我们公司唯一积极使用 Azure 的人。
  • 我发现了一个每月花费 5 美元的 SQL 数据库资源,并在当天将其删除。我看到了删除完成的消息。

问题:

  • 一周前,我注意到我们的 Azure 成本报告中额外收取了 200 美元的费用。经过调查,我发现我删除的 SQL 数据库仍然存在,并且升级到生产级别服务计划。
  • 花了一些时间了解发生的情况后,似乎未使用的 API 正在尝试使用带有 SQL 用户凭据的 SQL 连接字符串来访问 SQL 数据库。此操作似乎导致 SQL 服务器自动重新创建 SQL 数据库。
  • 只有在删除 SQL Server 后,我才能删除 SQL 数据库。

我的预期行为:

  • 我删除了数据库,任何其他尝试使用它的资源都会停止工作。

问题:

  • 预期行为或错误?:这是 SQL 数据库预期行为的自动重新创建,还是错误?我的印象是资源创建需要通过 Azure Web 应用程序或应用程序注册进行显式操作。
  • 成本差异:我们使用的是基础级 SQL 数据库,每月费用为 5 美元。它是如何变成成本明显更高的生产级数据库的?是否可以仅使用 SQL 连接字符串来更改此设置?

相关代码:

程序.cs

var sqlConBuilder = new SqlConnectionStringBuilder();
sqlConBuilder.ConnectionString = builder.Configuration.GetConnectionString("SQLDbConnection");
builder.Services.AddDbContext<AppDbContext>(opt => opt.UseSqlServer(sqlConBuilder.ConnectionString));
builder.Services.AddScoped<IUsageRepo, UsageRepo>();

UsageRepo.cs

public class UsageRepo : IUsageRepo
{
    private readonly AppDbContext _context;
 
    public UsageRepo(AppDbContext context)
    {
        _context = context;
    }
 
    public async Task CreateUsage(Usage usage)
    {
        if (usage == null)
        {
            throw new ArgumentNullException(nameof(usage));
        }
 
        await _context.AddAsync(usage);
    }
    // Other methods...
}

Azure Monitor 删除日志的屏幕截图(没有创建 SQL 数据库的日志,删除后可以看到具有相同数据库名称的数据库更新日志):

enter image description here

感谢您的支持。

致以诚挚的问候,

梅尔特

azure azure-sql-database
1个回答
0
投票

首先,我会尝试打开一个计费支持案例,并尝试向他们提出您的问题。最终他们将免除这笔费用。但在这种情况下,它们是唯一可以帮助您的实例。只需转到 Azure 门户并搜索支持(计费支持不需要支持计划)。

来到代码部分,您正在使用实体框架。如果您在模型创建中运行

Database.CreateIfNotExists()
,那么您执行时的代码确实会尝试创建该数据库。 我不能 100% 确定默认 SKU 是什么,但 P1 可能正是您所经历的,对吗?

当您使用在 SQL Server 上创建的 SQL 管理员用户的连接字符串时,该管理员将有权创建新数据库,并且由于 Azure SQL Server 还支持通过 SQL 命令进行扩展操作和数据库创建,因此这是完全可能的无需通过 Azure 门户进行操作即可创建数据库。如果我没记错的话,这些不会反映在活动日志中。仅 SQL 审核(如果启用)

© www.soinside.com 2019 - 2024. All rights reserved.