SQL Server还原数据库bak文件怎么操作?

尽管计算机技术已经发展到相当高的水平,但硬件故障、系统错误、误操作等问题仍时有发生,导致交易运行异常中断。 它可能会影响SQL Server 中数据的正确性,甚至导致数据库损坏或完全丢失。

当意外发生时,您需要恢复MSSQL数据库,这需要您提前做好备份。 如果你没有做过,请参考 SQL Server Management Studio 备份 .

要恢复一个或两个SQL数据库,您可以简单地使用方法1。对于一个实例的所有数据库,方法2可以提供帮助。 但是如果你想在不使用命令的情况下恢复多个数据库,方法 5 将是一个更简单的解决方案解决SQL Server还原数据库bak文件怎么操作问题。

5种在SQL Server中恢复数据库的方法

方法 1. 使用 SSMS GUI 恢复 SQL 数据库

SSMS 提供了一种带有 GUI 的还原方法。 它允许您通过相对简单的操作来恢复 MSSQL 数据库,但一次只能恢复一个数据库。

*在 SQL Server 中,您只能从 bak 文件恢复数据库。 因此,请确保您事先创建了备份文件。

1. 启动 SSMS 并连接到您的实例。 右键单击 “数据库”并选择 “还原数据库”。

恢复sql数据库

2. 这里有两种恢复方法,即选择源作为 “数据库”“设备”。 如果您的备份文件未存储在默认目录中,请选择 “设备”

从设备恢复

3. “添加”要恢复的bak文件。 然后单击 “确定”执行备份。

恢复完成

“提示:”

☛ 如果你想 将 SQL 数据库恢复到另一台服务器  但收到错误 3154“备份集保存了现有数据库以外的数据库的备份”,这是因为您在目标实例上创建了一个同名的空数据库,这是一个多余的步骤。 事实上,你只需要像往常一样添加备份文件,一个新的数据库就会相应地自动创建。

☛ 如果因为“操作系统返回错误'5(访问被拒绝)'…”而导致恢复失败,请切换到文件选项卡,勾选将所有文件重新定位到文件夹并重试。

方法二、使用T-SQL语句恢复MSSQL数据库

T-SQL 脚本可能不是最容易上手的方法,但是一旦您了解了基本命令,您就可以更方便、更灵活地执行一些操作。

从完整备份恢复 SQL 数据库的基本命令是:

RESTORE DATABASE database_name='path\file.bak' 

比如我想恢复一个名为“example”的MSSQL数据库,命令可以是:

RESTORE DATABASE示例='D:\backup\example.bak' 

“注意:”如果您收到错误“数据库日志的尾部尚未备份”,您可以使用 BACKUP LOG WITH NORECOVERY 备份日志(如果它包含您不想丢失的工作),或使用RESTORE 语句的 WITH REPLACE 或 WITH STOPAT 子句只是覆盖日志的内容。

t-sql 恢复完整备份

要从差异备份中恢复,您应该事先使用 WITH NORECOVERY 恢复最后一次完整备份,然后使用 WITH RECOVERY 恢复差异备份以完成。 否则你可能会得到你的 SQL 数据库卡在恢复中 .

该命令将是:

RESTORE DATABASE database_name FROM DISK='path\file_full.bak' WITH NORECOVERY GO RESTORE DATABASE database_name FROM DISK='path\file_diff.bak' WITH RECOVERY GO 

t-sql 恢复差异备份

如果你想从bak文件中恢复的不仅仅是一个或两个数据库,而是一个实例的所有数据库,你可以先执行这个脚本来启用xp_cmdshell:

-- To allow advanced options to be changed. EXEC sp_configure 'show advanced options', 1; GO -- To update the currently configured value for advanced options. RECONFIGURE; GO -- To enable the feature. EXEC sp_configure 'xp_cmdshell', 1; GO -- To update the currently configured value for this feature. RECONFIGURE; GO

然后执行以下脚本来恢复所有数据库:

DECLARE @FilesCmdshell TABLE (
outputCmd NVARCHAR (255)
)
DECLARE @FilesCmdshellCursor CURSOR
DECLARE @FilesCmdshellOutputCmd AS NVARCHAR(255) INSERT INTO @FilesCmdshell (outputCmd) EXEC master.sys.xp_cmdshell 'dir /B filepath\*.bak'
SET @FilesCmdshellCursor=CURSOR FOR SELECT outputCmd FROM @FilesCmdshell OPEN @FilesCmdshellCursor
FETCH NEXT FROM @FilesCmdshellCursor INTO @FilesCmdshellOutputCmd
WHILE @@FETCH_STATUS=0
BEGIN
DECLARE @cmd NVARCHAR(MAX)='RESTORE DATABASE [' + SUBSTRING(@FilesCmdshellOutputCmd, 0, CHARINDEX('.',
@FilesCmdshellOutputCmd)) + '] FROM DISK=N''filpath' + SUBSTRING(@FilesCmdshellOutputCmd, 0, CHARINDEX('.',
@FilesCmdshellOutputCmd)) + '.bak'' WITH FILE=1, NOUNLOAD, STATS=10'
EXEC(@cmd) FETCH NEXT FROM @FilesCmdshellCursor INTO @FilesCmdshellOutputCmd
END 

t-sql 恢复所有数据库

方法三、命令行恢复SQL数据库

您实际上可以在不登录 SSMS 的情况下恢复 SQL 数据库,这需要 SQLCMD。 它随 SQL Server 2014 及更低版本一起提供。 如果您正在运行更高版本,您可能需要 下载 它分开。

使用 SQLCMD,您可以使用命令提示符恢复 MSSQL。 搜索“CMD”并以管理员身份运行它。 然后使用以下命令恢复 SQL 数据库:

SqlCmd -E -S server_name -Q “RESTORE DATABASE database_name FROM DISK='path\file.bak'” 

同样,如果遇到“tail of the log for the database has not been backed up”的错误,可以尝试事先通过BACKUP LOG WITH NORECOVERY备份日志,或者使用RESTORE语句的WITH REPLACE或WITH STOPAT子句覆盖内容的日志。

cmd 恢复完整备份

如果要恢复差异备份,需要先用WITH NORECOVERY恢复上次的全量备份,再用WITH RECOVERY恢复差异备份:

SqlCmd -E -S server_name -Q “RESTORE DATABASE database_name FROM DISK='path\file_full.bak' WITH NORECOVERY” SqlCmd -E -S server_name -Q “RESTORE DATABASE database_name FROM DISK='path\file_diff.bak' 带恢复” 

cmd 恢复差异备份

更多详情,您可以参考 使用命令行备份和恢复 SQL 数据库 .

方法 4. 使用 PowerShell 还原 SQL Server

同样,您可以使用 PowerShell 进行备份,并在不登录 SSMS 的情况下从 bak 文件还原 SQL 数据库。

1. 在 Windows 中搜索“powershell”,选择 Windows PowerShell ISE 并以管理员身份运行。

2. 输入命令“Set-ExecutionPolicy Unrestricted”并 “回车”执行。 在弹出的提示中 点击 “是,即可更改执行策略”。

3. 现在,输入“Import-Module SQLPS –DisableNameChecking”以加载 SQL 模块。 然后使用以下命令进行数据库恢复:

Restore-SqlDatabase -ServerInstance server_name -Database 数据库名 ` -BackupFile path\file.bak -ReplaceDatabase 

这是我的例子:

Restore-SqlDatabase -ServerInstance DESKTOP-AC51C0M -数据库 mydb ` -BackupFile D:backup\mydb_20210719_140639.bak -ReplaceDatabase 

powershell恢复数据库

提示: 如果您收到“The term 'Restore-SqlDatabase' is not recognized”错误,请在右侧模块窗口中搜索“restore”,然后选择要Restore-SqlDatabase模块。

插入模块

方法五、直观还原一个或多个SQL数据库

虽然您拥有所有这些用于 MSSQL 数据库恢复的选项,但它们要么容易出错,要么难以同时恢复多个数据库。 所以,推荐一款第三方的SQL Server备份软件,方便管理。

傲梅企业备份网络版 允许集中 SQL Server 备份和恢复,这意味着您可以在任何联网的计算机上备份任意数量的数据库,并直观地从备份中恢复 SQL 数据库。

没有涉及 T-SQL 命令,所有操作都可以通过简单的点击来完成。 下载 180天免费试用版进行试用:

正确安装软件,即可控制所有安装了 “客户端包”的电脑(包括你的中心机)。

请求控制

MSSQL 中的备份数据库

1. 导航到 “任务”> “新任务”> SQL Server 备份以创建 MSSQL 备份任务。

sql服务器备份

2、在 第1步中,点击 “+添加计算机”,检测到SQL实例被控制的计算机,在弹出的窗口中选择要备份的客户端计算机。

添加电脑

3. 在 第2步中,点击 “+添加”检测电脑上的实例。 然后您可以相应地选择一个或多个数据库。

添加源数据库

4. 单击 第 3 步并单击 “添加存储”以指定网络共享或 NAS 路径。 添加的存储空间将被保存以备后用。

添加存储

5. 自定义备份任务,然后您可以 “开始备份”> “创建并执行任务”

“提示:”如果你想 自动备份SQL数据库 ,去设置一个 “计划”来自动执行任务。 您还可以在“高级”选项卡中选择执行完整备份或差异备份 。

从备份恢复 MSSQL 数据库

1. 创建的备份任务将列在 “任务”选项卡中。 单击 其右上角的 “高级,然后选择”“还原”以继续。

从备份任务恢复数据库

2. 选择要还原的计算机和数据库。 您可以选择备份的具体日期和类型(完整或差异)。

选择要还原的数据库和特定备份

3. 除了恢复到原来的位置,您甚至可以将SQL数据库恢复到局域网内的另一台服务器上。 根据您的需要做出选择。 然后单击 “开始还原”

“覆盖现有数据库”:勾选此选项后,备份中保存的数据库将覆盖同名的目标数据库。 否则将忽略具有相同名称的目标数据库。

恢复到原始或新位置

结论

当你的MSSQL数据库遇到问题,想从备份中恢复时,可以参考本文提供的的SQL Server还原数据库bak文件怎么操作的解决方法,小编更推荐使用第5种傲梅企业备份网络版版最方便直观。

除了 MSSQL 数据库,您还可以将它用于其他重要的计算机数据,例如 傲梅企业备份网络版 .