您可以一次恢复多个 SQL数据库吗?

遗憾的是SSMS GUI 一次只支持恢复一个数据库。如果您将多个数据库备份到多个 bak 文件中,您可以一次将它们全部还原吗?

“答案是肯定的”。一般来说,您可以使用有效的 T-SQL 脚本一次性恢复多个数据库,但前提是备份文件完全以相应数据库命名并且没有日期/时间等附加信息。 

如果你想更灵活地做到这一点,还有一个简单的选择带有图形用户界面。只需选择您喜欢的方式。

sql服务器

方式1.使用xp_cmdshell从bak文件中恢复多个数据库

您可以使用脚本从一个文件夹中恢复SQL Server中的多个数据库。但在此之前,请连接到实例并启用 xp_cmdshell

1. 单击“新建查询”并输入以下命令:

-- 允许更改高级选项。
EXEC sp_configure 'show advanced options', 1;
GO——
更新高级选项的当前配置值。
RECONFIGURE;
GO——
启用该功能。
执行 sp_configure 'xp_cmdshell', 1;
GO
-- 更新此功能的当前配置值。
RECONFIGURE;

“执行”查询,该功能将被启用。

启用 xp cmdshell

2.然后您可以使用脚本恢复SQL Server的多个数据库(请将“D:\backup\”替换为您自己的“包含所有备份文件的文件夹”):

DECLARE @FilesCmdshell TABLE (
    outputCmd NVARCHAR (255)
)
DECLARE @FilesCmdshellCursor CURSOR
DECLARE @FilesCmdshellOutputCmd AS NVARCHAR(255)
 
INSERT INTO @FilesCmdshell (outputCmd) EXEC master.sys.xp_cmdshell 'dir /BD:\backup\*.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''D:\backup\' + SUBSTRING(@ FilesCmdshellOutputCmd, 0, CHARINDEX('.', @FilesCmdshellOutputCmd)) + '.bak'' WITH FILE = 1, NOUNLOAD, STATS = 10'
EXEC(@cmd)
 
FETCH NEXT FROM @FilesCmdshellCursor INTO @FilesCmdshellOutputCmd
END

恢复多个数据库

“✎注意:”如果您收到错误“数据库的日志尾部尚未备份。如果日志包含您不想丢失的工作,请使用 BACKUP LOG WITH NORECOVERY 备份日志。使用 RESTORE 语句的 WITH REPLACE 或 WITH STOPAT 子句只是覆盖日志的内容”,解决方法如提示所说。

例如,您可以将还原命令修改为“...WITH FILE = 1, REPLACE, NOUNLOAD, STATS = 10”

方式2.生成脚本来恢复SQL Server中的所有数据库

或者,您可以使用脚本为SQL Server中的所有数据库生成恢复命令,并将它们组合成一个新脚本来执行。

1. 单击“新建查询”并在 SQLQuery 窗口中输入以下命令:

DECLARE @folderpath VARCHAR (1000)
SELECT @folderpath = 'D:\Backup\' -- 备份位置
SELECT 'RESTORE DATABASE['+NAME+'] FROM DISK = ''' +@folderpath +name+'.bak'' WITH NORECOVERY ,
REPLACE, STATS = 5'
FROM master.sys.databases
WHERE name NOT IN ('master','model','msdb','tempdb','distribution')

这将生成一系列命令,用于从同名的 bak 文件恢复SQL Server中的多个数据库。

2. 右键单击​​结果中的任何命令,“选择全选”,然后“复制”它们(或使用 Ctrl + A 和 Ctrl + C)。

生成命令

3. 将这些命令粘贴到 SQLQuery 窗口作为新脚本“执行”。它将从具有相应文件名的 bak 文件中恢复SQL Server的所有数据库。

方式 3. 使用 GUI 备份和恢复多个 SQL数据库(相对简单)

上述脚本仅适用于您的 bak 文件完全根据 SQL数据库命名的情况,这在实践中具有很大的限制性。因此,我想提供一种更方便的方式来备份和恢复多个数据库,甚至整个实例。

傲梅企业备份网络版是一个可靠的集中管理解决方案,用于备份和恢复 LAN 内所有台式机、笔记本电脑、工作站和服务器上的 SQL数据库。

它适用于 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- bit),支持SQL Server 2005到2019。除了SQL数据库,还支持“文件、分区、磁盘和操作系统备份”

正确安装软件及其客户端包,然后您就可以控制您想要管理的那些客户端计算机(当然,您可以控制自己的机器)。

请求控制

如何在SQL Server中备份多个数据库:

步骤 1.在Home选项卡中选择"SQL Server备份"开始。点击“+添加计算机”,检测带有SQL数据库的计算机,在弹出的窗口中选择一台进行备份。

添加计算机

步骤 2. 单击+ 添加以检测所选计算机上的所有实例。在弹出的窗口中,您可以选择多个数据库或整个实例。

选择多个数据库

步骤 3. 单击步骤 3 并点击 “添加存储”以输入共享或 NAS 路径作为存储端。然后,您还可以根据需要设置自动备份 SQL数据库 的计划,然后单击“开始备份 ”执行任务。

添加分享

◉ “如何从备份中恢复多个数据库:”

第 1 步:任何创建的备份任务都将显示在““任务””选项卡中。点击右上角的“高级”,然后选择“恢复”

恢复数据库

步骤 2 。选择要还原的计算机和所有数据库。在右上角,您还可以选择要还原的特定备份(完整或差异)。

选择数据库

步骤 3。 然后,选择“恢复到原始位置”“恢复到新位置”。使用第二个选项,您可以将数据库还原到另一个 SQL Server容易地。然后,单击“开始还原”以执行它。

恢复到原始或新位置

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

结论

SSMS 还原 GUI 允许您一次仅还原一个数据库。如果要一次恢复SQL Server中的多个数据库,最常见的方法是使用 T-SQL 脚本。但是,它对备份文件名有严格的限制,使得将数据库恢复到另一个实例等操作难以实现。因此,您也可以试试SQL备份软件——傲梅企业备份网络版版。

它使操作更加容易。例如,您可以自动备份 SQL数据库只需单击几下,即可通过同样简单的操作一次恢复多个数据库。