如何从 Bak 文件中恢复 SQL 数据库?

成功备份SQL Server后,您将获得一个 bak 文件,可用于通过 SSMS、Transact-SQL、命令行等方式从备份恢复sql数据库。

sql从bak文件恢复数据库的操作并不复杂,下面先介绍3种常用方法,再补充一种更省事的软件方案,您可以根据习惯自由选择。

“注意”:以下所有方法仅支持将数据库从低版本还原到相同或更高版本,例如从SQL Server2012 到 2016。如果要将数据库迁移到更低版本,请参考这里指导.

方法1. 使用SSMS工具恢复

SQL Server Management Studio(SSMS)是微软的数据库管理工具,其还原向导可以直观地指导您完成整个恢复过程,使用前先连接到目标实例。

微软官方文档对 SQL Server 数据库的备份与恢复也有系统介绍,动手前可以作为理论参考。

1. 右键单击​​数据库并在菜单中选择恢复数据库...。

恢复数据库

2. 在弹出的窗口中,选择“Source”作为Device,然后点击...图标“添加”bak文件。如果找不到,请定位到它的保存路径并输入它的全名(包括.bak)来指定它。

从设备恢复

3.如果没有问题,备份信息将显示在Restore Database窗口中,然后您可以单击“确定”从bak文件中恢复SQL数据库。

恢复成功

备注:✎...
如果由于“操作系统返回错误'5(访问被拒绝)'...”导致恢复失败,请切换到“文件”选项卡,选中“将所有文件重新定位” “到文件夹”并重试。
如果数据库一直卡在“恢复中”状态,原因可能包括还原过程没有正确停止、磁盘空间不足、有其他人正在使用该数据库,或者用户使用后没有关闭查询窗口。其中较常见的原因是误用了 No Recovery 选项来还原数据库。
如果目标实例不包含您要恢复的数据库,则会自动创建一个新数据库(同名)以接收 bak 文件中的所有数据。所以“请不要创建一个空数据库并将其命名为目标”,否则您将收到错误 3154 说“备份集包含现有数据库以外的数据库的备份”。

方法 2. 使用 T-SQL 语句从 Bak 文件中恢复 SQL 数据库

除了按照向导进行操作外,您还可以使用查询在SQL Server中恢复数据库。只要您了解 T-SQL 语句,这实际上是一种更简单的从bak文件命令行恢复sql数据库的方法。

1. 单击“新建查询”打开 SQLQuery 窗口。在其中输入恢复命令:

RESTORE DATABASE databasename FROM DISK = 'filepath\filename.bak'

例如,如果我想从 D:\Backup 中的完整备份“example.bak”恢复 SQL数据库“example”,那么命令将是:

RESTORE DATABASE example FROM DISK = 'D:\Backup\example.bak'

2. 点击“执行”按钮运行命令,您将在下面的“消息”中看到备份状态。

t-sql 恢复完整备份

如何从差异备份中恢复数据库?

差异备份是数据库备份的四种类型之一,从差异备份中恢复时,您需要先用 WITH NORECOVERY 还原上一次完整备份,命令如下:

RESTORE DATABASE databasename FROM DISK = 'filepath\filename.bak' WITH NORECOVERY
GO
RESTORE DATABASE databasename FROM DISK = 'filepath\filename.bak' WITH RECOVERY
GO

“注意:”第一个bak文件应该是完整备份文件,第二个应该是差异备份文件。

t-sql 从差异备份还原

数据库的日志尾部没有备份?

在还原过程中,您可能会收到一条错误提示:“数据库的日志尾部尚未备份。如果日志包含您不想丢失的工作,请使用 BACKUP LOG WITH NORECOVERY 备份日志。”

针对这种情况,可以使用 RESTORE 语句的 WITH REPLACE 或 WITH STOPAT 子句来覆盖日志内容,具体做法如下。

这是因为您尝试还原的备份文件比目标数据库旧。要解决它,您可以按照消息中提到的提示进行操作:

1. 事先用 WITH NORECOVERY 备份事务日志,然后再次尝试恢复 bak 文件。

BACKUP LOG databasename TO DISK = 'filepath\filename.trn' WITH NORECOVERY

2. 使用 WITH REPLACE 或 WITH STOPAT 子句恢复数据库。

RESTORE DATABASE databasename FROM DISK = 'filepath\filename.bak' WITH REPLACE

或者,您也可以使用命令行恢复 SQL 数据库,而无需启动 SSMS。这需要用到 SQLCMD,它在 2014 年及更低版本中随 SQL Server 一起提供,更高版本可从微软官方下载 SQLCMD 工具。

如果不想打开 SSMS,也可以全程用命令行操作。此前我们专门介绍过使用命令行备份SQL Server数据库的方法,下面接着看怎么用它恢复 bak 文件。

1、按Win+R,在输入框中输入“cmd”。单击“确定”以打开命令提示符。

2. 然后,将此命令与您自己的服务器名称和文件路径一起使用:

SqlCmd -E -S servername -Q “RESTORE DATABASE databasename FROM DISK='filepath\filename.bak'”

就我而言,它应该是:

SqlCmd -E -S .\MSSQLSERVER_01 -Q “RESTORE DATABASE databasename FROM DISK='D:\Backup\example.bak'”

cmd 从完整备份恢复

如果要使用命令行恢复差异备份,可以先用 WITH NORECOVERY 恢复完整备份,再用 WITH RECOVERY 恢复差异备份:

SqlCmd -E -S .\MSSQLSERVER_01 -Q “RESTORE DATABASE databasename FROM DISK='filepath\filename.bak' WITH NORECOVERY”
SqlCmd -E -S .\MSSQLSERVER_01 -Q “RESTORE DATABASE databasename FROM DISK='filepath\filename.bak' WITH RECOVERY”

“注意:”第一个bak文件应该是完整备份文件,第二个应该是差异备份文件。

cmd 从差异备份还原

与上一种方法类似,如果遇到“数据库的日志尾部没有备份”错误,可以提前 BACKUP LOG WITH NORECOVERY:

SqlCmd -E -S servername -Q “BACKUP LOG databasename TO DISK='filepath\filename.trn' WITH NORECOVERY”

或者用 REPLACE 或 WITH STOPAT 恢复数据库:

SqlCmd -E -S .\MSSQLSERVER_01 -Q “RESTORE DATABASE databasename FROM DISK='filepath\filename.bak' WITH REPLACE”

补充方案:用傲梅企业备份网络版备份和恢复SQL Server数据库

从 bak 文件恢复 SQL 数据库的好处主要是灵活,比如可以将备份的SQL数据库恢复到另一台服务器,随时迁移到新环境。不过上述方法要么步骤较多,要么需要一定的 SQL 基础,如果想更省心地完成sql从bak文件恢复数据库,可以看看下面的替代方案。

作为补充,这里介绍一下傲梅企业备份网络版,它可以在所有联网的 Windows PC 或服务器之间集中备份和恢复 SQL Server 数据库。

此软件适用于 Windows 10/8.1/8/7/Vista/XP 等个人电脑上安装的系统。

服务器方面,支持 Windows Server 2003/2008 (R2)/2012 (R2)/2016,以及 Windows SBS 2003/2008/2011、Windows Home Server 2011(32/64 位)。

其SQL Server备份功能支持SQL Server2005 至 2019,使您能够一次备份或恢复多个数据库。整个操作通过简单的点击完成,无需专业知识。

这款软件提供180天试用期:

微软WHQL认证

☛ 如何备份SQL Server数据库:

1.正确安装软件并获得对您要管理的客户端计算机的控制权(当然,您可以控制自己的机器)。

请求控制

然后在Home选项卡中选择SQL Server 备份。

sql服务器备份

2.在步骤1中,单击“+添加计算机”以检测您控制的计算机(带有SQL数据库),然后选择一台进行备份。

添加计算机

3.在步骤2中,点击“+添加”,检测计算机上的所有实例,并选择一个或多个数据库进行备份。您甚至可以选择整个实例。

添加数据库

4. 在步骤 3. 单击“添加存储”以指定共享或 NAS 设备作为存储端。然后“开始备份”。

选择目标份额

“设置:” 如有必要,启用电子邮件通知。
“计划:” 创建计划以运行备份一次/每天/每周/每月。“完全备份和差异备份在高级”选项卡中也是可选的。

☛ 如何从备份中恢复 SQL数据库:

1. 创建备份任务后,它将显示在“任务”选项卡中。找到您想要的,点击右上角的“高级”,然后选择“恢复”。

从SQL Server备份恢复

2. 选择您要恢复的计算机及其数据库。如果您已多次备份它们(完整或差异),您还可以在右上角选择要恢复的特定备份。

选择数据库

3. 您可以将这些数据库恢复到原始位置或新位置。使用第二个选项,您可以直接将数据库还原到另一个 SQL Server。然后,单击“开始还原”以执行它。

恢复到原始位置或新位置

Overwrite the existing database (s) :如果勾选此选项,备份的数据库将覆盖同名的目标数据库。如果不选中它,则在还原过程中将省略具有相同名称的目标数据库。

以上就是傲梅企业备份网络版备份和恢复 SQL Server 数据库的大致流程,其他常见的SQL Server数据库恢复方法也值得了解,比如从备份管理器中直接还原历史版本,思路大同小异。

常见问题解答(FAQ)

问:sql从bak文件恢复数据库有哪些常用方法?
答:常用方法有三种:用SSMS还原向导把bak文件作为设备添加后按提示还原;用T-SQL的RESTORE DATABASE命令;用SQLCMD命令行工具执行还原。另外借助傲梅企业备份网络版,也可以直接从备份任务中恢复数据库。
问:用T-SQL从bak文件恢复数据库要注意什么?
答:要留意目标实例版本不能低于备份来源版本;恢复差异备份前先用WITH NORECOVERY还原上一次完整备份,再完成差备份;如果提示日志尾部未备份,可以先执行BACKUP LOG WITH NORECOVERY,或者用WITH REPLACE覆盖还原。
问:SSMS还原bak文件时提示错误3154是怎么回事?
答:通常是目标实例中已经存在同名数据库,备份集与现有数据库对不上。不需要手动创建空数据库,直接让还原向导根据bak文件自动创建目标库即可,并确认“将所有文件重新定位”指向正确的文件夹。
问:还原时数据库卡在“恢复中”状态怎么办?
答:可以先停止还原过程,检查磁盘空间是否充足、是否有其他会话占用目标数据库,并关闭未关闭的查询窗口。多数情况是误选了NORECOVERY选项,换用RECOVERY或重新执行还原流程一般就能解决。

总结

以上就是sql从bak文件恢复数据库的3种常用方法,您可以根据熟悉程度选用:习惯图形界面就用 SSMS 还原向导,熟悉语句就写 T-SQL,追求直观省事则可以交给傲梅企业备份网络版,直观地完成 SQL Server数据库备份与还原。

它适用于局域网内的所有 PC 和服务器。而且它支持的数据类型不仅是SQL数据库,还包括计算机文件、操作系统、分区和磁盘。

更新于2026年09月16日