比方说,我有一个SQL Server数据库,其数据文件的初始大小为100 GB,但只包含10 GB的数据。 数据库备份将只有10 GB的大小。
我想将这个备份恢复到不同的服务器(或同一台服务器上的不同数据库),但我不希望它与原来的(100 GB)磁盘空间相同,这是默认情况下会发生的情况。
在进行备份之前,我无法收缩原始数据库(这是一个生产数据库, 需要预先分配的空间)。 恢复完成后,我可以收缩恢复的数据库,但是我真的希望不要占用100 GB的空间; 此外,在这个特定的情况下,我没有太多的可用磁盘空间,所以还原不会在任何地方。
有什么办法可以恢复数据库,并且只占用与其包含的实际数据一样多的空间 ?
不,对不起 – 没办法。 还原恢复文件在备份时的状态。 必须在此之后或者在进行备份之前完成。
如果您的磁盘空间太紧,那么您可以将.bak文件放在networking共享中并从那里恢复。 应该工作,如果你正在运行的SQL Server与一个域帐户,并给予共享足够的权利来读取文件。
以前的其他选项是你疯了篮子(但只有当你运行SQL Server 2008 R2)是SQL Server支持创build数据库文件直接到共享而无需使用traceflag&我可以告诉从个人的经验,你的作品! 所以你可以做一个恢复与移动共享。
一般来说,没有。 一些随机的想法可能会或可能不会对你有任何帮助:
最后,我也喜欢在我的制作数据库中使用一些“肘部空间”,但总共100GB的90GB听起来有点极端。 以下步骤可能会为您提供所需且不应影响生产的内容:
DBCC SHRINKFILE ('myfile.MDF', TRUNCATEONLY)以临时释放文件末尾的任何可用空间(TRUNCATEONLY不是IO密集型的,并且不会对索引进行分段) DBCC SHRINKFILE 。 ALTER DATABASE MODIFY FILE将生产数据文件重新生长回原始大小。 使用这些步骤不应该有任何生产影响。 唯一的风险是如果一些数据恰好在100GB的数据文件的末尾,在这种情况下,步骤(1)将不会释放太多的空间。