我已经达到SQL Server 2008 R2 Express数据库的文件大小限制,我相信它是10Gb。我知道这是因为我在事件日志中看到了事件ID 1101。
无法为数据库分配新页面' ExchangeBackup'因为文件组中没有足够的磁盘空间' PRIMARY'
我已删除了一些历史数据以解决此问题,但这只是一个临时修复。一个表(PP4_MailBackup
)比其他表大得多,因此当我在12个月前创建此数据库时,我将此表转换为Filestream表,并将数据存储在FileGroup中的FileGroup之外。这似乎成功运行,直到我收到错误并且新数据不再添加到我的数据库中。
当我对表格大小进行报告时,我看到保留(KB)列最多可增加10GB。
保存我的FileStream数据的文件夹是176 GB
数据库.mdf
文件确实是10GB。
有没有人知道为什么表PP4_MailBackup
仍在使用近7GB?
以下是"标准报告 - >磁盘使用情况报告"对于这个数据库:
提前致谢
大卫
更新
以下是一些更多信息。
此表格中有868,520行。
此cmd返回1,因此我假设Ansipadding已启用。我从未在默认情况下更改此内容。
SELECT SESSIONPROPERTY('ANSI_PADDING')
列定义如下
即使每列的每条记录都填满了完整的记录大小,通过粗略计算,该表大约为4,125,470,000字节。我知道nvarchar
列仅使用所需的实际空间。
我仍然缺少很多空间。
答案 0 :(得分:0)
不是答案,而是更多的结论。
我已经放弃了这个问题并且自己删除数据以保持在10GB主文件大小限制之下。我发现nvarchar列每个字符存储2个字节以处理Unicode字符,尽管它们只使用所需空间而不用空格填充列。所以这将占我无法找到的一些空间。
我尝试将我的char(500)列转换为varchar(500),方法是添加具有正确类型的新列,将数据复制到其中,然后删除旧列。这有效,但表实际上变大了,因为删除列只是元数据更改,并没有实际删除数据。要恢复空间,我需要创建一个新表并复制数据然后删除旧表当然我没有足够的空间在主文件中这样做。
我考虑过将表复制到临时数据库中删除原始表然后将其复制回来,但临时数据库不支持文件流列(至少据我所知)所以我需要在temp db中保存所有170GB表。这听起来像一个可疑的解决方案,我的测试服务器在存储临时数据库的分区上没有足够的空间。我无法在sql 2008 Express上找到关于tempdb的文件大小限制的任何内容,但此时这一切都变得太难了。