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

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

在这篇文章中,我将介绍这些常用的方法,以及一种从 Bak 文件中恢复 SQL 数据库的简单替代方法。继续阅读并选择您喜欢的方式。

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

方法1. 使用SSMS工具恢复

与备份一样,SSMS 还包括一个还原向导,可直观地指导您完成整个过程。要使用它,请连接到您要将数据库恢复到的实例。

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

恢复数据库

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

从设备恢复

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

恢复成功

备注:✎...
如果由于“操作系统返回错误'5(访问被拒绝)'...”导致恢复失败,请切换到“文件”选项卡,选中“将所有文件重新定位” “到文件夹”并重试。
如果你找到你的SQL数据库卡在恢复中状态d的原因可能是你没有正确停止恢复过程,你没有足够的磁盘空间,其他人正在使用这个数据库,或者用户在使用后没有关闭查询窗口等。其中,最常见的原因是您错误地使用了 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一起提供。如果您正在运行更高版本,请下载它这里.

在上一篇文章中,我已经解释了如何使用命令行备份SQL Server数据库,您可以点击链接以获取更多详细信息。这里我将重点介绍如何从 Bak 文件中恢复 SQL 数据库。

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

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

SqlCmd -E -S servername -Q “从磁盘恢复数据库数据库名='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 ' 与恢复“

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

cmd 从差异备份还原

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

SqlCmd -E -S 服务器名 -Q “备份日志数据库名到磁盘='filepath\filename.trn' WITH NORECOVERY”

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

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

从Bak 文件中恢复 SQL 数据库的优点主要是灵活性。例如,您可以备份 SQL数据库并恢复到另一台服务器. 但上述方法要么比较繁琐,要么需要一定的 SQL 知识。作为补充,我想介绍一下傲梅企业备份网络版,它可以在所有联网的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天的免费试用期:

☛ 如何备份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) :如果勾选此选项,备份的数据库将覆盖同名的目标数据库。如果不选中它,则在还原过程中将省略具有相同名称的目标数据库。

本文提供了 3 种从Bak 文件中恢复 SQL 数据库的方法。其实,您也可以使用有效的第三方软件——傲梅企业备份网络版版,更直观地管理SQL Server备份和恢复。

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