Sql server 大型INSERT INTO语句期间SQL Server文件组已满
考虑一个SQL脚本,该脚本用于将SQL 2000数据库中的行从一个表复制到另一个表。传输涉及750000行,以简单的方式进行:Sql server 大型INSERT INTO语句期间SQL Server文件组已满,sql-server,sql-server-2000,sql-server-express,filegroup,autogrow,Sql Server,Sql Server 2000,Sql Server Express,Filegroup,Autogrow,考虑一个SQL脚本,该脚本用于将SQL 2000数据库中的行从一个表复制到另一个表。传输涉及750000行,以简单的方式进行: INSERT INTO TableB([ColA],[ColB]....[ColG]) SELECT [ColA],[ColB]....[ColG] FROM TableA 这是一个长时间运行的查询,部分原因可能是ColB属于ntext类型。 在SELECT语句中有一些CONVERT()操作 困难在于,在大约15分钟的操作后,SQL Server会引发此异常 无法为
INSERT INTO TableB([ColA],[ColB]....[ColG])
SELECT [ColA],[ColB]....[ColG]
FROM TableA
这是一个长时间运行的查询,部分原因可能是ColB
属于ntext
类型。
在SELECT
语句中有一些CONVERT()
操作
困难在于,在大约15分钟的操作后,SQL Server会引发此异常
无法为数据库“[DB]”中的对象“[TABLE]”、“[PRIMARY_KEY]”分配空间,因为“PRIMARY”文件组已满。
通过删除不需要的文件、删除文件组中的对象、向文件组添加其他文件或为文件组中的现有文件启用自动增长来创建磁盘空间
更多信息
- “自动增长”已启用
- 磁盘上有足够的可用空间(~20gb)
- 单个.mdf的容量约为6gb
- 源表或目标表上没有触发器
如果您可以共享有关主文件组组成和自动增长设置(即主文件中包含的所有文件以及每个文件的自动增长设置)的屏幕截图/信息,这也会很有帮助。在没有看到任何其他内容的情况下,首先想到的是,您可能为构成主组的一个或多个文件指定了maxFileSize,但这只是一种预感,没有实际看到信息。最佳建议:将数据库的大小预调大,而不是强制它按需增长(这可能是一个缓慢的操作) 发生此错误的一个原因是自动增长间隔设置得太大。除了明显的问题(试图以25GB的速度增长,而磁盘上只有20GB)外,较大的增长间隔可能需要很长时间才能分配,这可能会导致查询超时 编辑:根据您的新屏幕截图,间隔似乎不是问题所在。但是,我最初的建议仍然有效。请尝试自己手动扩展数据库,看看它是否允许您:
ALTER DATABASE foobar
MODIFY FILE (name = foobar_data, size = 5000)
表中是否有任何触发器?我以前见过类似的结果,当有触发器时,实际上是日志文件(ldf)的扩展只需记录触发器所运行的所有查询,而不是MDF本身,就可以达到极限。如果有任何触发器,我会考虑在进行此更新时禁用它们,看看是否有帮助(我假设这是1次关闭数据迁移而不是重复事件)?您是否也可以共享有关主文件组组成和自动增长设置的屏幕截图/信息?(即主文件组中包含的所有文件以及每个文件的自动增长设置)感谢Chad,用FG定义的屏幕截图更新了问题。看起来你已经解决了-Express只支持4gb的数据库大小。将来,我建议发布版本和版本信息(即Sql2000、2005、2008和Express、工作组、标准等)-大多数人可能会在前面指出这一点。祝你好运!