我在 1Tb 硬盘上有一个 SQL Server 2008 数据库,它占满了整个硬盘,只剩下 4Kb 的可用空间。MDF 文件为 323Gb,LDF 为 653Gb。此数据库所在的硬盘上除了 MDF 和 LDF 之外没有其他文件,因此无法释放硬盘上的空间。主硬盘较小,但有足够的空间将 MDF 传输到该硬盘,以防万一。该服务器位于海外的客户站点,目前无法为服务器添加更多磁盘空间。也无法删除任何记录,因为数据库处于故障模式(由于没有磁盘空间)并且不响应大多数命令。数据库当前处于完全恢复模式,这就是 LDF 文件如此大的原因。这个数据库实际上不需要完全恢复,因此我们计划将其切换到简单模式,这将为我们节省大量空间。我也不在乎丢失 LDF 文件,但我需要所有数据。我花了很多时间寻找解决这个问题的方法,但我发现首先需要释放磁盘空间或添加更多磁盘空间,目前这两种方法都行不通。我陷入困境,任何帮助都将不胜感激。
当我尝试将数据库切换到在线模式时,我收到以下日志。
消息 945,级别 14,状态 2,第 3 行由于文件不可访问或者内存或磁盘空间不足,无法打开数据库“DBNAME”。有关详细信息,请参阅 SQL Server 错误日志。消息 5069,级别 16,状态 1,第 3 行 ALTER DATABASE 语句失败。消息 1101,级别 17,状态 12,第 3 行由于文件组“DEFAULT”中的磁盘空间不足,无法为数据库“DBNAME”分配新页面。通过删除文件组中的对象、向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建必要的空间。
我找到了以下解决方案,但由于该驱动器上没有磁盘空间,因此这些解决方案均不起作用,并且由于 DB 处于故障状态,我无法运行大多数命令。 - DBCC SHRINKFILE - 无法运行,因为执行“使用 DBNAME”失败 - 分离 DB,然后更改 MDF/LDF 文件的位置,此操作会失败,因为 DB 处于离线模式,因此您无法运行分离。
我不知道还能尝试什么。
谢谢。
答案1
这是因为你没有备份备份数据库时,日志文件 (.LDF) 会被清除。您可以进行真正的备份并缩小日志,也可以使用简单恢复模式并收缩数据库文件诱骗 SQL Server思维您已正确备份,但它所做的只是释放空间。它将阻止您重放事务日志并回滚。在执行此操作之前,请确保您了解其含义。
当然,这可能会失败,因为你的极端磁盘空间问题,因此您可能需要先扩展驱动器(您说这可能不容易)然后这些命令才能起作用。
答案2
如果磁盘卷使用 NTFS 4K 分配单元,您可能能够停止实例,压缩数据库文件(先压缩最小的),然后重新启动实例并使数据库联机。
另一个选项可能是使用 iSCSI 为服务器添加空间,然后将卷安装在现有卷下方。这是一个不太可能的尝试,但值得研究。