sql server怎么还原数据库
- 数据库
- 2025-08-07
- 7
以下是针对 SQL Server 数据库还原 的完整操作指南,涵盖多种场景、详细步骤及关键注意事项,帮助您安全高效地完成数据库恢复任务。
前期准备
1 核心要素确认
| 项目 | 要求 | 说明 |
|---|---|---|
| 备份文件 | .bak 格式(默认全量备份) | 确保文件未损坏且可访问 |
| 目标服务器 | SQL Server 实例运行正常 | 需具备足够磁盘空间(建议预留原数据库大小的1.5倍) |
| 权限 | sysadmin 固定服务器角色成员 | 或拥有 CREATE ANY DATABASE + ALTER ANY DATABASE 权限 |
| 兼容性验证 | 备份集与目标服务器的版本匹配 | 跨版本还原需额外配置(如SQL Server 2016→2019需启用兼容级别) |
| 冲突处理策略 | 明确是否覆盖现有同名数据库 | 若存在同名库,需提前重命名或删除 |
2 特殊场景预判
- 异地还原:若备份来自其他服务器,需确认文件传输完整性(MD5校验)。
- 加密备份:若备份已加密,需提供证书/密钥进行解密。
- 只读介质:若备份存储于光盘或U盘,需映射为本地驱动器再操作。
通过 SQL Server Management Studio (SSMS) 还原
1 标准流程(图形化界面)
-
启动还原向导

- 打开 SSMS → 连接到目标实例 → 右键点击 “数据库” → 选择 “还原数据库…”。
- 替代路径:直接定位到 .bak 文件 → 右键 “还原数据库”。
-
配置基础参数
- 目标数据库名称:输入新数据库名(若与备份源相同则勾选 “覆盖现有数据库”)。
- 时间点还原:仅适用于包含日志链的完整备份序列(需勾选 “时间点” 并指定具体时间)。
-
关键选项设置(重点!)
进入 “选项” 标签页,按需调整以下核心参数:

- 执行还原
点击 “确定” → 监控进度条 → 完成后刷新数据库列表验证结果。
- 在 “还原数据库” 窗口展开 “文件” 标签页。
- 修改 逻辑名称 对应的 物理位置 列(如将 D:DataMyDB.mdf 改为 E:NewDataMyDB.mdf)。
- 确保新路径已创建且权限开放给 SQL Server 服务账户。
- 错误3154:”无法打开备份设备”
→ 检查文件路径是否正确,确认SQL Server服务账户对文件有读取权限。
- 错误3013:”备份集中找不到媒体族”
→ 备份文件损坏,尝试重新备份或使用 RESTORE LABELONLY 验证备份头信息。
- 错误3117:”独占访问权被拒绝”
→ 使用 WITH REPLACE 前未设置单用户模式,可先执行 ALTER DATABASE [DB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE。
- 并行还原:添加 MAXTRANSACTSIZE=65536 提升大事务处理速度。
- 压缩备份优先:若使用压缩备份(WITH COMPRESSION),还原速度可提升30%-50%。
- 临时表空间:大型数据库还原时,临时增加 tempdb 大小至原数据库的2倍。
- 缺失备份文件:检查备份路径下所有分卷文件(如 .bak, .bak.001, .bak.002)是否齐全。
- 顺序错误:确保按备份时的顺序加载分卷文件。
- 损坏的备份集:尝试用 RESTORE VERIFYONLY FROM DISK='...' 验证备份完整性,必要时重新备份。
- 跨服务器还原:若备份来自另一台服务器,需确认备份集包含所有必需的媒体簇。
参数 推荐值 作用说明 覆盖现有数据库 根据需求勾选 ️ 会永久删除当前数据库及其所有对象 保留原始文件名 默认勾选 确保数据文件(MDF/NDF)和日志文件(LDF)按备份时的路径生成 限制访问 取消勾选 允许立即连接新数据库 回滚未提交的事务 根据业务需求选择 生产环境建议勾选以保持一致性状态 关闭目标数据库期间… 默认勾选 强制终止用户连接,确保还原过程顺利 2 高级场景示例
案例:修改数据文件存放路径
当目标磁盘空间不足时,可通过以下步骤调整:
通过 T-SQL 命令还原
1 基础语法
RESTORE DATABASE [目标数据库名] FROM DISK = N'C:BackupAdventureWorks.bak' WITH REPLACE, -覆盖现有数据库 MOVE 'AdventureWorks' TO 'D:DataAdventureWorks_Restore.mdf', -数据文件新路径 MOVE 'AdventureWorks_log' TO 'E:LogsAdventureWorks_Restore.ldf', -日志文件新路径 RECOVERY; -结束点标记(非日志链场景必选)
2 关键参数解析
参数 说明 示例 REPLACE 允许覆盖现有数据库 WITH REPLACE MOVE 重定向文件到新位置 MOVE '逻辑名' TO '物理路径' NORECOVERY 暂停恢复(用于后续追加事务日志) WITH NORECOVERY STOPAT = '时间' 精确时间点还原(需完整日志链支持) STOPAT = '2023-10-01T14:30:00' STATS = 10 每10%进度打印状态信息 STATS = 10 3 典型错误及修复
关键注意事项
1 风险控制清单
风险项 防范措施 误删生产库 还原前备份目标数据库(BACKUP DB [现有库] TO DISK...) 文件权限不足 确保SQL Server服务账户对目标路径有读写权限 瞬时中断导致不一致 复杂恢复后立即执行完整性检查(DBCC CHECKDB) 版本降级 高版本→低版本需先生成脚本(GENERATE SCRIPT)并手动修改兼容性设置 2 性能优化建议
相关问答FAQs
Q1: 如何查看数据库当前的恢复模式?
A: 执行以下查询:
SELECT name, recovery_model_desc, page_verify_option_desc, is_auto_close_on, is_read_committed_snapshot_on, is_availability_db, is_in_standby, is_contained, service_broker_guid, compatibility_level, collation_name, create_date, modify_date, state_desc, owner_sid, primary_file_path, log_file_path, source_database_id, source_server_name, source_timestamp, source_change_tracking_enabled, source_is_published, source_publish_database_guid, source_subscriber_database_guid, source_subscription_type_desc, source_synchronization_state_desc, source_last_sync_time, source_initial_lsn, source_final_lsn, source_start_lsn, source_commit_lsn, source_hardened_lsn, source_current_lsn, source_next_lsn, source_min_active_lsn, source_max_active_lsn, source_fork_point_lsn, source_fork_time, source_branch_id, source_machine_name, source_instance_name, source_db_guid, source_db_generation, source_db_version, source_db_compatibility_level, source_db_collation, source_db_owner, source_db_create_date, source_db_modify_date, source_db_size, source_db_space_used, source_db_max_size, source_db_growth, source_db_growth_increment, source_db_growth_type, source_db_status, source_db_updateability, source_db_user_access, source_db_recovery_model, source_db_page_verify, source_db_torn_page_detection, source_db_is_auto_shrink, source_db_is_auto_close, source_db_is_read_committed_snapshot, source_db_is_availability_db, source_db_is_in_standby, source_db_is_contained, source_db_service_broker, source_db_collation, source_db_timezone, source_db_compare_window, source_db_compare_offset, source_db_compare_interval, source_db_compare_next_run_date, source_db_compare_last_run_date, source_db_compare_last_result, source_db_compare_failure_count, source_db_compare_successful_count, source_db_compare_total_count, source_db_compare_percentage_complete, source_db_compare_estimated_completion_time, source_db_compare_actual_completion_time, source_db_compare_last_error_number, source_db_compare_last_error_message, source_db_compare_last_error_severity, source_db_compare_last_error_state, source_db_compare_last_error_procedure, source_db_compare_last_error_line, source_db_compare_last_error_column, source_db_compare_last_error_parameter, source_db_compare_last_error_variable, source_db_compare_last_error_constraint, source_db_compare_last_error_trigger, source_db_compare_last_error_plan, source_db_compare_last_error_query, source_db_compare_last_error_object, source_db_compare_last_error_schema, source_db_compare_last_error_catalog, source_db_compare_last_error_database, source_db_compare_last_error_server, source_db_compare_last_error_instance, source_db_compare_last_error_port, source_db_compare_last_error_client_ip, source_db_compare_last_error_client_netbios, source_db_compare_last_error_client_mac, source_db_compare_last_error_client_hostname, source_db_compare_last_error_client_domain, source_db_compare_last_error_client_username, source_db_compare_last_error_client_processid, source_db_compare_last_error_client_threadid, source_db_compare_last_error_client_application, source_db常规恢复模式为 SIMPLE/BUFLOO/FULL,`;
简化版常用命令:
SELECT name, recovery_model_desc FROM sys.databases WHERE name = 'YourDatabaseName';
Q2: 如果还原失败提示 “媒体集有X个媒体簇,但只提供了Y个”怎么办?
A: 此错误表明备份集不完整,常见原因及解决方案:
