MSSQL 数据库恢复
恢复环境
IP:192.168.218.130
恢复库:TUOPU_XXMS_XX
恢复文件:TUOPU_XXMS_XX_backup_2000_01_04_030003_2013832.bak
恢复方案
登录SQL Server Management Studio 2022客户端,执行数据库还原
弹出【还原对话框】
嗯嗯嗯 ,还原的时候,报错。。。。
标题: Microsoft SQL Server Management Studio ------------------------------ 还原数据库“TUOPU_HRMS_AX”时失败。 (Microsoft.SqlServer.Management.RelationalEngineTasks) ------------------------------ 其他信息: Microsoft.Data.SqlClient.SqlError: BACKUP LOG cannot be performed because there is no current database backup. (Microsoft.SqlServer.Smo) 有关帮助信息,请单击: https://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=17.100.40.0&LinkId=20476 ------------------------------ 按钮: 确定 ------------------------------
嗯,换个Navicat Premium 17 客户端试试
还是报错,提示
[RES] Database restore start [RES] (Full) TUOPU_XXMS_XX_backup_2026_01_04_030003_2013832 [2026-01-04 03:06:07.000] [ERR] [42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]The backup set holds a backup of a database other than the existing 'TUOPU_XXMS_XX' database. (3154) [42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]RESTORE DATABASE is terminating abnormally. (3013) [RES] Finished - Database restore unsuccessfully
嗯,再换个方案吧
终极解决方案(纯 SQL 脚本,最可靠)
按照以下步骤执行,确保以管理员身份运行 SSMS,并且选中master数据库执行脚本:
步骤 1:终止数据库所有连接
USE master; GO -- 替换为你的备份文件实际路径 RESTORE FILELISTONLY FROM DISK = '【你的备份文件路径】' -- 比如 'D:\Backup\TUOPU_XXMS_XX_backup_2026_01_04_030003_2013832.bak' GO
执行结果,如下

执行后会返回结果集,重点关注两列:
LogicalName:数据库文件的逻辑名(比如TUOPU_XXMS_XX_Data、TUOPU_XXMS_XX_Log);PhysicalName:备份里记录的物理文件路径(比如C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\原始数据库名.mdf)
步骤 2:执行带「文件移动」的强制还原脚本
根据步骤 1 查到的 LogicalName,修改以下脚本并执行(示例中用 原始数据文件逻辑名/原始日志文件逻辑名 占位,你要替换成实际值):
USE master;
GO
-- 1. 终止目标数据库所有连接
DECLARE @kill varchar(8000) = '';
SELECT @kill = @kill + 'KILL ' + CONVERT(varchar(5), session_id) + ';'
FROM sys.dm_exec_sessions
WHERE database_id = DB_ID('TUOPU_XXMS_XX');
EXEC(@kill);
GO
-- 2. 核心还原脚本(必须替换以下4处占位符)
RESTORE DATABASE TUOPU_HRMS_AX
FROM DISK = '【你的备份文件完整路径】' -- 比如 'D:\Backup\TUOPU_XXMS_XX_backup_2026_01_04_030003_2013832.bak'
WITH
REPLACE, -- 强制覆盖现有数据库
RECOVERY, -- 还原后数据库可用
-- 关键:移动文件,替换下面的「原始数据文件逻辑名」「原始日志文件逻辑名」为步骤1查到的值
MOVE '【原始数据文件逻辑名】' TO 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\TUOPU_XXMS_XX.mdf',
MOVE '【原始日志文件逻辑名】' TO 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\TUOPU_XXMS_XX.ldf',
STATS = 10; -- 显示还原进度
GO
执行案例
本初恢复文件请依据实际文件来恢复,
USE master;
GO
-- 第一步:杀死所有连接到TUOPU_XXMS_XX的进程(避免文件占用)
DECLARE @killCmd NVARCHAR(MAX) = N'';
SELECT @killCmd += N'KILL ' + CAST(session_id AS NVARCHAR(10)) + N';'
FROM sys.dm_exec_sessions
WHERE database_id = DB_ID(N'TUOPU_XXMS_XX');
EXEC sp_executesql @killCmd;
GO
-- 第二步:设置数据库为单用户模式(确保无其他干扰)
ALTER DATABASE TUOPU_XXMS_XX SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
-- 第三步:核心还原(已替换为你的逻辑名和Linux路径)
RESTORE DATABASE TUOPU_XXMS_XX
FROM DISK = N'/var/opt/mssql/data/TUOPU_XXMS_XX_backup_2026_01_04_030003_2013832.bak'
WITH
REPLACE, -- 强制覆盖现有数据库
RECOVERY, -- 还原后数据库直接可用
-- 关键:MOVE子句映射到Linux SQL Server默认数据目录
MOVE N'tuopu_hrms_Data' TO N'/var/opt/mssql/data/TUOPU_XXMS_XX.mdf', -- 目标数据文件路径
MOVE N'tuopu_hrms_Log' TO N'/var/opt/mssql/data/TUOPU_XXMS_XX.ldf', -- 目标日志文件路径
STATS = 10; -- 显示还原进度(每10%更新一次)
GO
-- 第四步:恢复为多用户模式
ALTER DATABASE TUOPU_XXMS_XX SET MULTI_USER;
GO
数据还原ok
本文发布于 35 天前,内容仍有参考价值
评论
请先登录后再评论
登录