【问题标题】:SQL Server 2008 R2 Express 10GB Filesize limitSQL Server 2008 R2 Express 10GB 文件大小限制
【发布时间】:2017-08-14 01:53:16
【问题描述】:

我的 SQL Server 2008 R2 Express 数据库已达到文件大小限制,我认为该限制为 10Gb。我知道这一点是因为我在事件日志中看到了事件 ID 1101。

由于文件组“PRIMARY”中的磁盘空间不足,无法为数据库“ExchangeBackup”分配新页面

我已经删除了一些历史数据来暂时解决这个问题,但这只是一个临时修复。一个表 (PP4_MailBackup) 比其他表大得多,所以当我 12 个月前创建此数据库时,我将此表转换为 Filestream 表,并且数据存储在文件系统中的 FileGroup 之外。在我收到错误并且不再将新数据添加到我的数据库中之前,这似乎工作成功。

当我对表大小进行报告时,我看到 Reserved(KB) 列加起来将近 10GB。

保存我的 FileStream 数据的文件夹是 176 GB

数据库.mdf文件确实是10GB。

有人知道为什么表PP4_MailBackup 仍在使用近7GB 吗?

这是此数据库的“标准报告 -> 磁盘使用报告”:

提前致谢

大卫

更新

这里有更多信息。

此表中有 868,520 行。

这个 cmd 返回 1 所以我假设 Ansipadding 是打开的。我从未更改过默认设置。

SELECT SESSIONPROPERTY('ANSI_PADDING')

列是这样定义的

即使每列的每条记录都填满了完整的记录大小,根据我的粗略计算,该表也将是大约 4,125,470,000 字节。我了解nvarchar 列仅使用所需的实际空间。

我仍然缺少很多空间。

【问题讨论】:

  • 该表似乎清楚地解释了为什么该表占用了7GB。附带说明一下,LDB 文件也可能计入数据库的 10GB 存储限制。
  • 嗨,蒂姆,附件解释了 PP4_Mailbackup 表使用 7GB,但没有解释为什么。此表已启用文件流。我应该期望一个 176GB 的文件流表在数据库中仍然占用 7GB 吗?日志文件不是文件组的一部分,所以我怀疑它是否包含在内。目前是1GB。我定期备份这个数据库,所以我会调查为什么日志没有被截断。
  • 日志文件大部分是可用空间,因此得到了正确管理。我认为缩小它没有意义。

标签: sql-server-2008r2-express


【解决方案1】:

不是真正的答案,而是更多的结论。

我已经放弃了这个问题,并决定自己删除数据以保持在 10GB 主文件大小限制之下。我发现 nvarchar 列每个字符存储 2 个字节以便处理 Unicode 字符,尽管它们只使用所需的空间并且不使用空格填充列。所以这将占我找不到的一些空间。

我尝试将我的 char(500) 列转换为 varchar(500),方法是添加具有正确类型的新列,将数据复制到其中,然后删除旧列。这行得通,但表实际上变大了,因为删除列只是元数据更改,实际上并没有删除数据。要恢复空间,我需要创建一个新表并复制数据然后删除旧表,当然我在主文件中没有足够的空间来执行此操作。

我曾考虑将表复制到 temp db,删除原始表,然后将其复制回来,但 temp db 不支持文件流列(至少据我所知),因此我需要在 temp db 表中保存所有 170GB。这听起来像是一个可疑的解决方案,我的测试服务器在存储临时数据库的分区上没有足够的空间。我在 sql 2008 Express 上的 tempdb 的文件大小限制上找不到任何内容,但此时一切都变得太难了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    相关资源
    最近更新 更多