SQL Azure 引发 40197 错误(级别 20,状态 4,代码 9002)

Posted

技术标签:

【中文标题】SQL Azure 引发 40197 错误(级别 20,状态 4,代码 9002)【英文标题】:SQL Azure raise 40197 error (level 20, state 4, code 9002) 【发布时间】:2015-05-24 06:46:42 【问题描述】:

我在 SQL Azure DB(s1,250Gb 限制)中有一个表,有 47.000.000 条记录(总共 3.5Gb)。我尝试添加一个新的计算列,但在脚本执行 1 小时后,我得到:服务在处理您的请求时遇到错误。请再试一次。错误代码 9002 多次尝试后,我得到相同的结果。

简单表格的脚本:

create table dbo.works (
    work_id int not null identity(1,1) constraint PK_WORKS primary key, 
    client_id int null constraint FK_user_works_clients2 REFERENCES dbo.clients(client_id),
    login_id int not null constraint FK_user_works_logins2 REFERENCES dbo.logins(login_id),
    start_time datetime not null,
    end_time datetime not null,
    caption varchar(1000) null)

修改脚本:

alter table user_works add delta_secs as datediff(second, start_time, end_time) PERSISTED

错误信息:

9002 sql server (local) - error growing transactions log file.

但在 Azure 中我无法管理此参数。

如何更改填充表格中的结构?

【问题讨论】:

【参考方案1】:

Azure SQL 数据库有一个 2GB 的事务大小限制,您遇到了这个限制。对于像您这样的架构更改,您可以使用新架构创建一个新表,并将数据批量复制到这个新表中。

也就是说,在最新的服务版本 V12 中已经取消了限制。您可能需要考虑升级以避免必须实施解决方法。

【讨论】:

最新 v12 更新已启用。如果我不能修改架构,我会为移动数据创建新表。但我第一次尝试这种方式并得到相同的结果。 可能是移动的块太大了 是的,复制数据时可能会遇到同样的限制。【参考方案2】:

通过连接到用户数据库查看sys.database_files。如果日志文件当前大小达到最大大小,那么你点击了这个。此时,您必须终止活动事务或更新到更高层(如果由于您在单个事务中修改的数据量而无法做到这一点)。

你也可以这样做:

DBCC SQLPERF(LOGSPACE);

【讨论】:

【参考方案3】:

几个想法:

1) 尝试为 delta_secs 创建一个空列,然后分别填写数据。如果这仍然导致 txn 日志错误,请尝试使用 WHERE 子句一次更新部分数据。

2) 不要添加列。相反,添加一个具有 delta_secs 列的视图作为计算字段。由于这是一个派生字段,因此无论如何这可能是更好的方法。 https://msdn.microsoft.com/en-us/library/ms187956.aspx

【讨论】:

1) 它的计算字段 2) 视图 - 不是决定。它的唯一样本。我有时需要改变结构(每月约 1 次)。

以上是关于SQL Azure 引发 40197 错误(级别 20,状态 4,代码 9002)的主要内容,如果未能解决你的问题,请参考以下文章

将 SQL Azure 与 Android 连接起来

Azure 部署:配置数据库依赖项引发错误“无法配置 NuGet 包”

Azure 函数中的 Az.Functions 模块引发错误

Azure 应用服务Azure Function 中运行Powershell 脚本,定位 -DefaultProfile 引发的错误

Azure API 应用程序引发请求大小限制错误

如何在与 Azure Active Directory 关联的 Azure SQL 数据库级别创建不同的资源组