磁盘卷 'E:\' 上的可用空间不足,无法创建数据库

前两天搬迁SQL Server数据库,要将数据还原在新服务器的D盘,日志还原在E盘。但是E盘空间不足,报了下图错误。

There is insufficient free space on disk volume 'E:\' to create the database.

 客户要求日志是能还原在E盘,并且E盘空间不给增加,即使给,时间也来不及。

注:使用的是 SQL Server 2016, 数据库恢复模式为Full。

 遍搜互联网,加上自己的总结,有以下三种解决方法。

 

 1. 收缩日志文件,重新Full备份。

备份数据库时,会将日志也一起备份,减小日志文件大小,需要备份的日志就小了。减小日志文件大小有以下两种方式。

a.先备份日志,后收缩日志

BACKUP LOG [DatabaseName] TO DISK = 'D:\DatabaseName_Log.trn'
GO
DBCC SHRINKFILE (N'DatabaseName_Log' , 1)
GO

由于几个月没有备份日志了,需要备份的日志太多,花时太长,所以没有尝试该方法。

但据说这个方法可能要尝试多次才能成功。

第一次备份截断了日志,往后的尝试都不花时间了,只是会多生成几个备份文件。

 b.改恢复模式为Simple,收缩日志,再改回Full

GO
-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE [DatabaseName]
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE ([DatabaseName_log], 1);
GO
-- Reset the database recovery model.
ALTER DATABASE [DatabaseName]
SET RECOVERY FULL;
GO

简单粗暴,花时少,但总感觉会有什么副作用。

 但收缩日之后还得备份数据库,100G左右,需要两个小时,等不来。遂找找看有没有其他方法。

 

 2.用mdf文件还原数据库。

SQL Server数据库文件包含mdf数据文件和ldf日志文件,可以用这两个或者干脆只用mdf文件还原数据库,而不是非得用备份文件。

只用mdf文件还原就可以绕过日志问题了。找到这个方法之后,兴冲冲的去尝试。

试过之后发现,mdf文件无法通过网络传输。这应该是微软的一个安全机制,他只允许你通过U盘拷贝到目标服务器。

只能找找看怎么进行我一开始就想到,但是不懂怎么实施的方法3了。

 

 3.将日志还原到空间足够的盘,再缩小日志文件,迁移到E盘。

如何更改日志还原的位置,这里不赘述。

缩小日志文件的方法见前文方案1,我采用的是b方法。

迁移日志

USE MASTER

ALTER DATABASE [DatabaseName] SET OFFLINE 

ALTER DATABASE [DatabaseName]
MODIFY FILE
(
NAME = N'DatabaseName_log'
, FILENAME = N'E:\DatabaseName_log.ldf'
)

ALTER DATABASE [DatabaseName]  SET ONLINE

 

posted @ 2020-12-21 17:14  itaru  阅读(1392)  评论(0编辑  收藏  举报