还原前的关键准备包括:确认系统兼容性与环境要求;完整备份当前数据以防意外;检查并确保拥有必要的还原工具、权限及充足的存储空间。
-
权限要求
- 登录账户需具备
sysadmin
或dbcreator
服务器角色权限。 - 对备份文件(.bak)和存储路径有读取权限。
- 登录账户需具备
-
文件检查
- 确认备份文件完整(如
YourDB.bak
)。 - 若只有MDF文件(无备份),需改用
ATTACH
命令(见第四部分)。
- 确认备份文件完整(如
-
目标环境
- 打开 SQL Server Management Studio (SSMS) → 新建查询窗口。
- 确保SQL Server服务正在运行。
使用T-SQL命令还原数据库
场景1:从完整备份还原
USE master; -- 必须在master数据库执行 GO RESTORE DATABASE YourDBName -- 替换为目标数据库名 FROM DISK = 'C:\Backup\YourDB.bak' -- 备份文件路径 WITH MOVE 'YourDB_Data' TO 'D:\Data\YourDB.mdf', -- 将逻辑数据文件移动到新MDF路径 MOVE 'YourDB_Log' TO 'E:\Logs\YourDB.ldf', -- 将逻辑日志文件移动到新LDF路径 REPLACE, -- 覆盖同名数据库 STATS = 5; -- 每完成5%显示进度
参数说明:
MOVE
:备份中的逻辑文件名(非物理文件名),通过以下命令查询:RESTORE FILELISTONLY FROM DISK = 'C:\Backup\YourDB.bak';
REPLACE
:强制替换现有数据库(谨慎使用)。
场景2:还原差异备份
RESTORE DATABASE YourDBName FROM DISK = 'C:\Backup\YourDB_Diff.bak' WITH NORECOVERY, -- 不恢复数据库,允许后续日志还原 STATS = 5; -- 还原事务日志(可选) RESTORE LOG YourDBName FROM DISK = 'C:\Backup\YourDB_Log.trn' WITH RECOVERY; -- 恢复数据库为可用状态
常见错误与解决方案
-
错误3145
报错:文件"YourDB_Data"无法还原到"...",操作系统错误:"拒绝访问"
解决:- 以管理员身份运行SSMS。
- 检查目标文件夹权限(SQL Server服务账户需有写入权限)。
-
错误3154
报错:备份集包含现有数据库以外的文件
解决:- 确认
MOVE
语句中的逻辑文件名与备份匹配(通过RESTORE FILELISTONLY
查询)。
- 确认
-
数据库处于”正在还原”状态
解决:RESTORE DATABASE YourDBName WITH RECOVERY;
特殊情况:仅附加MDF文件(无备份时)
若只有MDF文件(无.bak备份),使用ATTACH
命令:
CREATE DATABASE YourDBName ON (FILENAME = 'C:\Data\YourDB.mdf') FOR ATTACH_REBUILD_LOG; -- 自动重建日志文件
注意:
- 此操作要求MDF文件未被损坏。
- 若缺少日志文件,
ATTACH_REBUILD_LOG
会重建新的LDF文件。
最佳实践建议
-
备份策略
- 定期执行完整备份 + 差异/日志备份。
- 使用压缩备份节省空间:
WITH COMPRESSION
。
-
自动化脚本
保存还原脚本模板,替换路径和数据库名快速执行。 -
验证还原
还原后立即运行:USE YourDBName; SELECT * FROM sys.database_files; -- 检查文件状态 DBCC CHECKDB ('YourDBName'); -- 验证完整性
引用说明:
本文参考Microsoft官方文档 RESTORE (Transact-SQL) 和 附加数据库,结合SQL Server 2019实践验证,操作前请务必备份关键数据,避免意外覆盖。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6687.html