0

考虑一个设计用于将行从一个表复制到 SQL 2000 数据库中的另一个的 SQL 脚本。传输涉及 750,000 行,简单来说:

INSERT INTO TableB([ColA],[ColB]....[ColG])
SELECT [ColA],[ColB]....[ColG]
FROM  TableA

这是一个长期运行的查询,部分原因可能ColB是它的类型为ntext. 语句中有一些CONVERT()操作。SELECT

困难在于大约 15 分钟的操作后,SQL Server 会引发此异常。

无法为数据库 '[DB]' 中的对象 '[TABLE]'.'[PRIMARY_KEY]' 分配空间,因为 'PRIMARY' 文件组已满。通过删除不需要的文件、删除文件组中的对象、向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建磁盘空间。

更多信息

  • 自动增长已经开始。
  • 磁盘上有足够的可用空间(~20gb)
  • 单个 .mdf 约为 6gb
  • 源表或目标表上没有触发器

替代文字

替代文字 问题

需要通过 Management Studio 或通过 T-SQL 设置哪些选项以允许数据库根据需要增长?你会建议什么其他补救措施?

解析度

db 无法按需增长,因为我在 SQL Server 2008 Express实例上托管此数据库。升级到非绝育版本的 SQL Server 将解决此问题。

替代文字

4

3 回答 3

1

最佳建议:预先调整数据库的大小,而不是强迫它按需增长(这可能是一个缓慢的操作)。

可能发生此错误的一个原因是您的自动增长间隔设置得太大。除了显而易见的(尝试增长 25GB,磁盘上只有 20GB)之外,一个大的增长间隔可能需要很长时间来分配,这可能会导致您的查询超时。

编辑:根据您的新屏幕截图,看起来间隔不是问题。但是,我最初的建议仍然有效。尝试自己手动增长数据库,看看它是否能让你:

ALTER DATABASE foobar
MODIFY FILE (name = foobar_data, size = 5000)
于 2009-11-23T17:26:46.890 回答
0

如果您可以共享有关您的 PRIMARY 文件组构成和自动增长设置(即 PRIMARY 中包含的所有文件以及每个文件的自动增长设置)的屏幕截图/信息,那也会很有帮助。在没有看到任何其他内容的情况下首先想到的是,您可能为构成 PRIMARY 组的一个/多个文件指定了 maxFileSize,但这只是一种预感,没有实际看到信息。

于 2009-11-23T17:11:30.027 回答
0

有问题的桌子上有任何触发器吗?我之前看到过类似的结果,当有触发器时,实际上是日志文件(ldf)的扩展达到了限制,只是记录了触发器运行的所有查询,而不是 mdf 本身。如果有任何触发器,我会考虑在您进行此更新时禁用它们并查看是否有帮助(我认为这是一次数据迁移而不是重复事件?)

于 2009-11-23T17:28:39.053 回答