如何从 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. 点击“执行”按钮运行命令,您将在下面的“消息”中看到备份状态。
如何从差异备份中恢复数据库?
要从差异备份中恢复,您需要提前用 WITH NORECOVERY 恢复上一次完整备份,因此命令将如下所示:
RESTORE DATABASE databasename FROM DISK =
'filepath\filename.bak' WITH NORECOVERYGORESTORE DATABASE databasename FROM DISK =
'filepath\filename.bak' WITH RECOVERYGO
“注意:”第一个bak文件应该是完整备份文件,第二个应该是差异备份文件。
数据库的日志尾部没有备份?
在还原过程中,您可能会收到一条错误消息“数据库的日志尾部尚未备份。如果日志包含您不想丢失的工作,请使用 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'”
如果要使用命令行恢复差异备份,可以先用 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文件应该是完整备份文件,第二个应该是差异备份文件。
与上一种方法类似,如果遇到“数据库的日志尾部没有备份”错误,可以提前 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天的免费试用期:
下载软件
Windows个人电脑和服务器
☛ 如何备份SQL Server数据库:
1.正确安装软件并获得对您要管理的客户端计算机的控制权(当然,您可以控制自己的机器)。
然后在Home选项卡中选择SQL Server 备份。
2.在步骤1中,单击“+添加计算机”以检测您控制的计算机(带有SQL数据库),然后选择一台进行备份。
3.在步骤2中,点击“+添加”,检测计算机上的所有实例,并选择一个或多个数据库进行备份。您甚至可以选择整个实例。
4. 在步骤 3. 单击“添加存储”以指定共享或 NAS 设备作为存储端。然后“开始备份”。
“设置:” 如有必要,启用电子邮件通知。“计划:”
创建计划以运行备份一次/每天/每周/每月。“完全备份和差异备份在高级”选项卡中也是可选的。
☛ 如何从备份中恢复 SQL数据库:
1. 创建备份任务后,它将显示在“任务”选项卡中。找到你想要的,点击右上角的“高级”,然后选择“恢复”。
2. 选择您要恢复的计算机及其数据库。如果您已多次备份它们(完整或差异),您还可以在右上角选择要恢复的特定备份。
3. 您可以将这些数据库恢复到原始位置或新位置。使用第二个选项,您可以直接将数据库还原到另一个 SQL Server。然后,单击“开始还原”以执行它。
Overwrite the existing database (s)
:如果勾选此选项,备份的数据库将覆盖同名的目标数据库。如果不选中它,则在还原过程中将省略具有相同名称的目标数据库。
本文提供了 3 种从Bak 文件中恢复 SQL 数据库的方法。其实,您也可以使用有效的第三方软件——傲梅企业备份网络版版,更直观地管理SQL Server备份和恢复。
它适用于局域网内的所有 PC 和服务器。而且它支持的数据类型不仅是SQL数据库,还包括计算机文件、操作系统、分区和磁盘。