如何在 SQL Server 中一次還原多個資料庫?通常您可以使用高效的 T-SQL 指令碼,或嘗試一個具有較少限制的強大軟體。
可惜的是,SSMS GUI只支持一次恢复一个数据库。如果你将多个数据库备份到多个bak文件中,你能同时恢复它们吗?
答案是肯定的。一般来说,你可以使用有效的T-SQL脚本一次性恢复多个数据库,但前提是备份文件的命名必须与对应的数据库完全一致,且没有额外的日期/时间等信息。
如果你希望更灵活地操作,还有一个简单的替代方法。只需选择你偏好的方式。
在SQL Server中恢复多个数据库可能是一个复杂的过程。为了最小化停机时间,你必须在开始之前满足以下几个先决条件:
你可以使用一个脚本从文件夹中恢复SQL Server中的多个数据库。但在此之前,请连接到实例并且启用xp_cmdshell。
1. 点击新建查询,然后输入以下命令:
-- 允许更改高级选项。 EXEC sp_configure "show advanced options", 1;GO-- 更新当前配置的高级选项值。RECONFIGURE;GO-- 启用该功能。EXEC sp_configure "xp_cmdshell", 1;GO-- 更新当前配置的该功能值。RECONFIGURE;GO
执行该查询,该功能将被启用。
2. 您可以使用以下腳本恢復多個 SQL Server 數據庫(請將“D:\backup\”替換為您自己的包含所有備份文件的文件夾):
DECLARE @FilesCmdshell TABLE (outputCmd NVARCHAR (255))DECLARE @FilesCmdshellCursor CURSORDECLARE @FilesCmdshellOutputCmd AS NVARCHAR(255)INSERT INTO @FilesCmdshell (outputCmd) EXEC master.sys.xp_cmdshell "dir /B D:\backup\*.bak"SET @FilesCmdshellCursor = CURSOR FOR SELECT outputCmd FROM @FilesCmdshellOPEN @FilesCmdshellCursorFETCH NEXT FROM @FilesCmdshellCursor INTO @FilesCmdshellOutputCmdWHILE @@FETCH_STATUS = 0BEGINDECLARE @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 @FilesCmdshellOutputCmdEND
✎注意:如果收到“數據庫的日誌文件尾端尚未被備份。如果其中包含您不想丟失的工作,請使用BACKUP LOG WITH NORECOVERY來備份日誌。使用RESTORE語句的WITH REPLACE或WITH STOPAT子句僅覆蓋日誌的內容”錯誤提示,解決方法如提示所說。
例如,您可以將恢復命令修改為“…WITH FILE = 1, REPLACE, NOUNLOAD, STATS = 10”
另外,您可以使用脚本来生成还原所有 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.databasesWHERE name NOT IN ("master","model","msdb","tempdb","distribution")
这将生成一系列命令,用于从相应的 bak 文件还原 SQL Server 中的多个数据库。
2. 在结果中右键单击任意命令,选择全选,然后复制它们(或使用 Ctrl A 和 Ctrl C)。
3. 将这些命令粘贴到 SQLQuery 窗口中作为一个新脚本来执行,它将从具有相应文件名的 bak 文件还原 SQL Server 的所有数据库。
上述脚本仅适用于您的 bak 文件与 SQL 数据库完全按照名称相对应的情况,这在实践中非常限制。因此,我想提供一种更便捷的方法来备份和还原多个数据库,甚至整个实例。
AOMEI Cyber Backup 是一個可靠的集中管理解决方案,用於在局域網中的所有桌面、筆記本和服务器上备份和恢复SQL 数据库。
它可在 Windows 11/10/ 8.1/8/7、Windows 服务器 2022/2019/2016/2012(R2)/2008(R2)上使用,并支持备份 SQL Server 2005 到 2022 的版本。除了SQL 数据库外,它还支持 Hyper-V 和 VMware 的虚拟机备份。
这样,您现在可以为已添加的 SQL Server 安排数据备份。
◉ 如何备份 SQL Server 中的多个数据库:
1. 点击 Backup Task -> Create New Task,选择备份类型为 Microsoft SQL Backup。
2. 點擊裝置名稱以指定要備份的 SQL 實例和數據庫。您可以根據需要選擇一個或多個數據庫。
3. 選擇一個目標存儲位置來保存 SQL 備份。您可以指定本地路徑或網絡路徑。
4. 配置計劃以每天、每週或每月執行 SQL 數據庫備份,並選擇完整、增量或差異備份方法。
點擊開始備份以創建並執行任務。完成後,您可以在備份任務選項卡中找到它。
✍更多有用功能:
◉ 如何從備份中恢復多個數據庫:
1. 在左側菜單欄中點擊備份任務,找到要恢復的任務,然後點擊
2. 選擇您要從還原 SQL 資料庫的備份版本。
3. 接下來,選擇您要還原到的目標位置。有兩種選項:
覆蓋具有相同名稱的資料庫:如果您選中此選項,備份的資料庫將覆蓋具有相同名稱的目標資料庫。如果未選中此選項,還原時將忽略具有相同名稱的目標資料庫。
4. 在完成所有設定後,按一下開始還原以開始還原進程,並耐心等待完成。您可以點擊
✍注意事項:
SSMS還原GUI只允許一次還原一個資料庫。如果您想在SQL Server中同時還原多個資料庫,最常用的方法是使用T-SQL腳本。但是,它對備份文件名有嚴格的限制,並且使像將資料庫還原到另一個實例這樣的操作難以實現。因此,您也可以嘗試使用SQL備份軟體-AOMEI Cyber Backup。
它使操作變得更加簡單。例如,您可以通過幾個簡單的點擊自動備份SQL資料庫,並通過同樣簡單的操作一次還原多個資料庫。