在 SQL Server 中如何還原多個資料庫 (3 種方法)

如何在 SQL Server 中一次還原多個資料庫?通常您可以使用高效的 T-SQL 指令碼,或嘗試一個具有較少限制的強大軟體。

Alex

來自 Alex / 更新於 2024年11月27日

分享至: instagram reddit

你能同时恢复多个SQL数据库吗?

可惜的是,SSMS GUI只支持一次恢复一个数据库。如果你将多个数据库备份到多个bak文件中,你能同时恢复它们吗?

答案是肯定的。一般来说,你可以使用有效的T-SQL脚本一次性恢复多个数据库,但前提是备份文件的命名必须与对应的数据库完全一致,且没有额外的日期/时间等信息。

如果你希望更灵活地操作,还有一个简单的替代方法。只需选择你偏好的方式。

sql server

在SQL Server中恢复多个数据库的前提条件

在SQL Server中恢复多个数据库可能是一个复杂的过程。为了最小化停机时间,你必须在开始之前满足以下几个先决条件:

  • 拥有管理权限,并能够访问备份文件。
  • 每个备份文件中只能有一个数据库备份。
  • 备份文件的数据库中仅能包含两个文件:日志文件和数据文件。
  • 由于我们使用数据库名称来命名其物理文件在磁盘上的名称,因此所恢复的新数据库中的物理文件名允许使用的字符必须被允许。

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

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

1. 点击新建查询,然后输入以下命令:

-- 允许更改高级选项。
EXEC sp_configure "show advanced options", 1;

GO
-- 更新当前配置的高级选项值。
RECONFIGURE;
GO
-- 启用该功能。
EXEC sp_configure "xp_cmdshell", 1;
GO
-- 更新当前配置的该功能值。
RECONFIGURE;
GO

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

啟用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 /B D:\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 数据库完全按照名称相对应的情况,这在实践中非常限制。因此,我想提供一种更便捷的方法来备份和还原多个数据库,甚至整个实例。

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 的虚拟机备份

下载免费试用版Microsoft SQL Server 2005-2022
集中且安全的 SQL 备份
  • 运行下载的 .exe 文件安装 AOMEI Cyber Backup,并启动其主界面。点击 Source Device -> Microsoft SQL -> Add Microsoft SQL

Microsoft SQL

  • 选择 Download proxy programCopy link 下载代理程序并将其安装在安装了 SQL Server 的设备上。然后,切换到 Already installed proxy 以选择该设备。
  • 接下来,点击 icon -> Authentication 验证数据库实例。您可以选择 Windows AuthenticationSQL Authentication

Add Device

这样,您现在可以为已添加的 SQL Server 安排数据备份。

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

1. 点击 Backup Task -> Create New Task,选择备份类型为 Microsoft SQL Backup

備份類型

2. 點擊裝置名稱以指定要備份的 SQL 實例和數據庫。您可以根據需要選擇一個或多個數據庫。

選擇數據庫

3. 選擇一個目標存儲位置來保存 SQL 備份。您可以指定本地路徑或網絡路徑。

選擇目標

4. 配置計劃以每天、每週或每月執行 SQL 數據庫備份,並選擇完整、增量或差異備份方法。

計劃備份

點擊開始備份以創建並執行任務。完成後,您可以在備份任務選項卡中找到它。

✍更多有用功能:

  • 備份清理可幫助您自動刪除較舊的備份版本,從而節省存儲空間。
  • 電子郵件通知可使您在任務異常或成功時收到電子郵件通知。
  • 存檔可幫助您將備份文件存檔到 AWS S3 存儲中。

如何從備份中恢復多個數據庫:

1. 在左側菜單欄中點擊備份任務,找到要恢復的任務,然後點擊 圖標 -> 恢復

還原

2. 選擇您要從還原 SQL 資料庫的備份版本。

選擇內容

3. 接下來,選擇您要還原到的目標位置。有兩種選項:

  • 還原至原位置(預設):在原地恢復,可以將 SQL 資料庫還原到較舊的版本。
  • 還原至新位置:選擇另一個目標來進行空間外恢復。您可以指定新資料庫的名稱並修改存儲位置。

還原至原位置

覆蓋具有相同名稱的資料庫:如果您選中此選項,備份的資料庫將覆蓋具有相同名稱的目標資料庫。如果未選中此選項,還原時將忽略具有相同名稱的目標資料庫。

4. 在完成所有設定後,按一下開始還原以開始還原進程,並耐心等待完成。您可以點擊 圖標 按鈕查看還原詳細信息或取消還原。

開始還原

✍注意事項

  • “還原到原始位置”必須確認原始位置存在。否則,你只能選擇“還原到新位置”。
  • “還原到原始位置”將覆蓋或刪除原始資料庫的數據,如果原始資料庫有重要數據,建議選擇“還原到新位置”。

結論

SSMS還原GUI只允許一次還原一個資料庫。如果您想在SQL Server中同時還原多個資料庫,最常用的方法是使用T-SQL腳本。但是,它對備份文件名有嚴格的限制,並且使像將資料庫還原到另一個實例這樣的操作難以實現。因此,您也可以嘗試使用SQL備份軟體-AOMEI Cyber Backup。

它使操作變得更加簡單。例如,您可以通過幾個簡單的點擊自動備份SQL資料庫,並通過同樣簡單的操作一次還原多個資料庫。

Alex
Alex · 編輯
Alex 多年來一直深入從事資料保護工作,包括虛擬機器、資料庫以及 Windows PC 和伺服器上的資料備份。他對最新技術趨勢保持警惕,確保所提供的資訊與該領域的持續進步保持一致。