开始了一份新工作,有一个 250GB 大小的 2008 SQL 数据库。开发人员坚持认为大小差不多。问题是 250GB 的 MDF 文件位于 250GB 的驱动器上。
我尝试备份数据库但出现以下错误:
System.Data.SqlClient.SqlError:文件“C:\Backup\backup.bkf:”发生不可恢复的 I/O 错误 112(无法检索此错误的文本。原因:1815)。(Microsoft.SqlServer.Smo)
我基本上有两个选择:
- 如果可能的话,尝试减小 MDF 的尺寸!
- 升级 Raid 阵列
任何帮助均感激不尽。
谢谢
答案1
是的,您肯定需要将备份执行到具有足够可用空间的其他位置。如果您拥有 SQL2008 R2 Standard(或 2008 Enterprise 的任何版本),则可以执行压缩备份(也可以使用第三方软件,如 Quest Litespeed)。否则,您的备份将与您的数据文件大小 + 日志文件大小一样大。
关于收缩,你必须首先确定它是否均匀可能的通过了解文件本身的已用空间/可用空间来缩小文件。一个 250GB 的文件可能已用 240GB,可用 10GB,反之亦然。(确定这一点的最简单方法:右键单击数据库,然后转到任务 > 缩小 > 文件。不要点击确定,只需查看当前分配的空间与“可用空间”数字,下拉“文件类型”框以查看数据与日志)。
根据你发现的内容,你将有以下几种选择:
- 如果文件中有足够的可用空间,那么一切就都好了。数据文件不会尝试增长,直到它完全填满为止(有一些例外,例如在特别大的表上重建索引)
- 如果文件中确实有可用空间,您可以尝试恢复一些(SQL 需要一些“活动空间”,可以这么说,所以不要试图恢复全部释放空间。)首先使用“释放未使用空间”选项(这将释放文件末尾已有的空间)。然后,如果您仍然需要更多空间,请选择特定的目标大小,而不是尝试恢复全部可用空间。始终进行完整的索引重建,因为数据收缩会导致文件碎片化。
- 如果数据文件是几乎已满,那么您可能仍有一些选择:您可以在不同的驱动器上添加新的数据文件(在同一个“文件组”中)。确保设置了 250GB 文件不是自动增长,并且新的文件(在不同的驱动器上)是设置为自动增长。因此第一个文件中的任何“溢出”都会增长到第二个文件中。
- 如果你想更谨慎一点,你可以创建一个文件(在不同的驱动器上),其中包含新的文件组。然后您需要将特定表或索引移动到这个新文件(使用 ALTER TABLE)
答案2
您可以尝试缩小数据库文件。右键单击数据库 -> 任务 -> 缩小(在 Mgmt Studio 内)。对于 250 GB 的数据库,这将需要很长时间 - 可能长达一个小时。
或者您可以连接外部 USB 硬盘并尝试备份到该硬盘。
答案3
显然,备份应放在另一个驱动器上。如果数据库必须有 250GB,则将其保留为 250GB。您需要额外的空间来进行维护操作,因此您有充分的商业理由来增加存储空间。这是一个不运行 SHRINKDATABASE 的充分理由...