如何还原SQL Server数据库并同时缩小其文件?


9

假设我有一个SQL Server数据库,其数据文件的初始大小为100 GB,但其中仅包含10 GB的数据。这样,数据库备份将只有10 GB。

我想将此备份还原到其他服务器(或同一服务器上的其他数据库),但是我不希望它占用与原始磁盘相同的磁盘空间(100 GB),这是默认情况下发生的情况。

在进行备份之前,我无法收缩原始数据库(它是生产数据库,它需要那么多的预分配空间);还原完成后,我可以收缩还原的数据库,但是我确实更希望在执行此操作时占用100 GB的空间;此外,在这种特定情况下,我没有那么多可用磁盘空间,因此还原不会进行任何操作。

有什么办法可以还原数据库,使其仅占用其实际数据所占用的空间


我有一个类似的问题。磁盘上占用的原始数据库空间约为30GB(约有1.5GB的实际数据),我想在本地MSSQL Express服务器上还原它。明显的问题是我的本地服务器只允许最大。10GB,因为它是免费版本。因此,如果我能够在尝试还原数据库之前收缩文件,那我就能做到,但是……
userfuser

Answers:


6

不,对不起-没办法。Restore还原文件,就像它们在备份时一样。在此之后或进行备份之前,必须先进行调度。


2

如果您的磁盘空间紧张,则可以将.bak文件放在网络共享上并从那里还原它。如果您的运行中的SQL Server具有域帐户,并且为共享赋予了足够的权限来读取文件,则应该可以使用。

以前的另一个选择是“发疯”(但仅在运行sql server 2008 r2的情况下有用)是SQL Server支持直接向共享创建数据库文件,而不必使用traceflag,我可以告诉从个人经验来看,它是可行的!因此,您可以使用MOVE还原到共享。


1

一般来说,没有。一些随机的想法可能对您没有帮助:

  • 除非您绝对需要该特定备份中的数据,否则您可以创建目标大小的新(空)数据库,然后使用大容量副本(或SSIS)将所有表从当前(活动)数据库推送到副本中。
  • 如果这是一次以上的操作,则有第三方工具(例如Redgate Compare)可以帮助实现这种自动化。
  • 一些第三方备份软件(例如Quest Litespeed)具有执行“ 对象级恢复 ”的功能,该功能可以将单个表或其他对象恢复到新的(空)数据库中。即使不是使用Litespeed创建备份,我相信该产品也应适用于本机SQL备份。

最后,我也确实喜欢生产数据库中的一些“肘部空间”,但是90GB的存储空间(不包括100GB的存储空间)听起来有些极端。以下步骤可能会为您提供所需的内容,并且不会影响生产:

  1. DBCC SHRINKFILE ('myfile.MDF', TRUNCATEONLY)在生产数据文件上运行,以临时释放文件末尾的任何可用空间(TRUNCATEONLY不会占用大量IO,并且不会对索引进行分段)
  2. 如果日志文件也很大,则DBCC SHRINKFILE在进行日志备份后,在活动较少的时间对生产日志文件运行a 。
  3. 运行备份
  4. 进行操作ALTER DATABASE MODIFY FILE以将生产数据文件重新增长到原始大小。

使用这些步骤不会对生产产生任何影响。唯一的风险是,如果某些数据恰好位于100gb数据文件的最后,在这种情况下,步骤(1)不会释放太多空间。


谢谢,我已经知道了这一点,并试图设计一些解决方法。我只是无法触及原始数据库,只有备份可用...并且以这种方式配置。
Massimo 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.