搜索

如何恢复sqlserver的bak

发表于 2026-10-17 02:23:14 来源:烟消火灭网

昨天半夜,何恢客户把生产库的何恢.bak文件丢过来,说“帮我看看能不能恢复”。何恢我盯着那个2.3GB的何恢文件,心里清楚这活儿没表面那么简单——bak文件恢复,何恢看似是何恢SQL Server Management Studio里点几下鼠标的事,真正卡壳的何恢往往是权限、路径和版本差异。何恢

先把文件放到SQL Server能读到的何恢位置。别直接扔桌面然后去连接,何恢服务账户大概率没权限访问你的何恢用户文件夹。我一般丢到C:\SQLBackups\或者D盘根目录下新建的何恢目录,右键属性给“NT SERVICE\MSSQLSERVER”加上读取权限。何恢这一步不做,何恢后面报“无法打开备份设备”的何恢时候你都不知道错在哪。

打开SSMS,连上实例,右键“数据库”节点,选“还原数据库”。源设备选“文件”,浏览到你的.bak文件。这时候注意看右上角的“要还原的备份集”——如果里面只有一个备份集,直接勾上就行;如果有多个,选最新的那个完整备份,除非你确定要还原差异备份,那就按时间顺序从完整备份开始勾。

关键一步在“选项”页。默认会还原到原数据库名,但如果你是在另一台服务器上恢复,或者原库名已经被占用,就得改“将数据库还原为”那里的名称。更重要的,是左侧“恢复状态”那三个单选按钮——绝大多数时候选“RESTORE WITH RECOVERY”,意思是恢复完直接能用。但如果你还要接着还原差异或日志备份,就得选第二个“RESTORE WITH NORECOVERY”,让数据库保持“正在还原”状态,等后续备份补齐了再恢复。

点了确定,进度条跑起来,心里别急着松气。常见坑在这里爆发:版本不兼容。SQL Server 2019的bak文件,放到2016实例上,直接报“数据库版本高于当前实例”。没辙,要么升级目标实例,要么找原环境导数据。另一个坑是文件路径——原库的数据文件和日志文件在D盘某个特定目录,目标机器上没这个目录,还原会失败。这时候在“选项”页的“将数据库文件还原为”列表里,手动把路径改成目标机器上存在的目录,比如把D:\Data\改成E:\MSSQL\Data\。

还有一次,我碰到个奇葩情况:bak文件能读,备份集也能看到,但勾选后点确定,报“备份集持有现有数据库的独占访问权”。原因是目标库名和源库名相同,而那个库还在被其他会话占用。解决办法很粗暴——先杀掉占用进程,或者把目标库改名,再或者干脆删掉那个旧库(前提是你确定不要了)。

恢复完成后,别急着交差。跑一下DBCC CHECKDB,确认逻辑和物理完整性。我见过恢复成功但一致性检查报一堆错误的,多半是备份文件本身就有问题,或者磁盘坏道导致读取时数据错位。这时候别犹豫,重新从源服务器做一次完整备份,再走一遍流程。

最后说个冷门但实用的点:如果你只是想要某个表的数据,别恢复整个库。用第三方工具(比如Red-Gate的SQL Compare)从bak里直接抽取单表,比全库恢复再导数据快得多——全库恢复一个2GB的库可能要十分钟,抽单表两分钟搞定。当然,前提是你手头有这类工具,没有的话,老老实实全库恢复,然后用SELECT INTO导出目标表。

啰嗦这么多,其实核心就一句话:恢复前想清楚目标实例的版本、文件路径、权限和恢复状态,恢复后务必做完整性验证。剩下的,就是多踩几次坑,自然就熟了。

随机为您推荐
友情链接
版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright © 2016 Powered by 如何恢复sqlserver的bak,烟消火灭网   sitemap

回顶部