Appearance
SQL Server 从 BAK 文件还原数据库实战
💡 场景说明
在日常开发与测试中,我们经常需要将生产环境的数据库备份(BAK 文件)还原到本地或测试环境进行排障。这通常涉及到一个数据库的多个副本共存,需要妥善处理逻辑文件名与物理文件路径的冲突。
1. UI 还原法 (SSMS)
这是最常用的直观操作方式,但在还原为“新副本”时需要注意细节配置:
- 新建/选择数据库:右键点击“数据库” -> “还原数据库”。
- 选择源:选择“设备”,找到你的
.bak文件。 - 目标数据库:修改目标数据库名称(例如在原名后加
_Test)。 - 🔴 关键配置 (选项):
- 勾选 覆盖现有数据库 (WITH REPLACE)。
- 在“文件”页签中,必须手动修改“还原为”列中的物理路径,确保
.mdf和.ldf文件名不与现有数据库冲突。
2. 脚本还原法 (T-SQL)
当 UI 界面提示“备份集与现有数据库不同”或需要自动化处理时,使用脚本是最可靠的方案。
2.1 核心脚本模板
使用 MOVE 指令重定向逻辑文件到新的物理位置。
sql
-- 1. 首先查看备份文件中的逻辑文件名
RESTORE FILELISTONLY FROM DISK = 'D:\Backup\SourceDB.bak';
-- 2. 执行还原并重定向路径
RESTORE DATABASE [TargetDB_Name]
FROM DISK = 'D:\Backup\SourceDB.bak'
WITH REPLACE,
STATS = 10,
MOVE 'SourceDB_Data' TO 'C:\SQLData\TargetDB_Name.mdf',
MOVE 'SourceDB_Log' TO 'C:\SQLData\TargetDB_Name_log.ldf';
GO2.2 参数解析
- WITH REPLACE:允许覆盖已存在的同名数据库(如果存在)。
- MOVE ... TO ...:这是还原为副本的关键。第一个参数是备份文件内部的逻辑文件名,第二个参数是新的物理文件路径。
- STATS = 10:每完成 10% 的进度就显示一次状态。
3. 常见问题排障
- 逻辑名不匹配:如果不知道逻辑名,务必先运行
RESTORE FILELISTONLY。 - 权限不足:确保 SQL Server 服务账号对目标文件夹拥有读写权限。
- 独占访问冲突:如果提示无法获得独占访问权,请参考解决数据库还原时的独占访问冲突。
🔗 参考资料
