是否可以同时还原sql-server bak和缩小日志?


26

我们有一个来自客户的bak文件,我们已将其转移到我们的开发人员办公室以进行问题调查。当前备份为25GB,还原的数据库大小大致相同,但是需要还原100GB。我相信这是因为那里的数据库设置为具有75GB的事务日志大小。还原数据库后,我们可以收缩日志文件,但是在还原中有没有办法做到这一点?


3
我知道您无法在完成还原之前更改数据库。
肖恩·梅尔顿

3
我一直处于同样的情况,我期待得到答案。只需评论一下,就有一个产品:red-gate的SQL虚拟还原。我从未使用过它,但是根据站点的说法:“已安装的数据库在备份文件上需要接近零的额外存储空间”。
StanleyJohns 2011年

Answers:


16

在还原过程中,无法缩小备份。还原的数据库必须看起来与源数据库完全相同,唯一的例外是可以更改驱动器号和周围的文件夹。


34

有一种拒收不断做-这-IN-A-现场环境黑客可以使用在空间有限,通过日志文件恢复到压缩文件夹。尝试通过压缩现有文件夹并将其还原到该文件夹​​会导致错误,因此您必须使用符号链接作弊。

  1. 创建一个压缩文件夹 D:\LogCompressed\
  2. 创建到压缩文件夹的符号链接 mklink /D /J D:\Log\ D:\LogCompressed\

  3. 使用指向的ldf文件还原数据库 D:\Log\

  4. 将日志文件缩小到适当的大小

  5. 分离数据库,将日志文件移动到未压缩的文件夹,附加

它很脏,很骗人,永远不要做,但是可以。对具有32MB日志文件的新创建数据库的快速测试显示,压缩后该文件在磁盘上占用330kb,解压缩该文件夹,磁盘大小又回到32MB。


2
@Mark:此hack有效,但并不完美。即使日志文件所占用的空间远远小于其实际大小,也无法还原数据库,除非磁盘上的可用空间实际上等于数据库的实际大小。Besize,在还原时,日志文件的实际大小从实际大小开始缓慢减小,这很痛苦。但是,它仍然是一个很好的技巧。谢谢。
chenwq

9

我相信您的备份为25 GB而还原的数据库为100 GB的原因不是由于您的事务日志。我的猜测是,您的数据库文件具有100 GB的已分配空间,而数据库中有25 GB的实际数据。

分配的数据库文件空间和已利用的数据空间之间存在差异。在这种情况下,前者为100 GB,后者为25 GB。


1
客户端为其事务日志分配75GB。还原后,我目前将日志分配更改为1GB。如果可能的话,我想将此数据库还原到驱动器的可用空间少于100GB的服务器上。无需还原到另一台服务器,则可以截断,备份和还原。
亚当·巴特勒

@Adam Butler,是否可以暂时还原到第一台服务器,以便您可以缩小文件大小,然后备份副本并将其还原到目标服务器上?
DForck42 2011年
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.