干了十几年数据库运维,最怕听到的一句话就是:“哥们,数据库崩了,重装一下吧。”每次听到这个,我都得先深吸一口气。重装SQL数据库,听起来就是把安装包点一遍下一步那么简单,但真正要命的从来不是安装过程,而是那几百个G的业务数据怎么毫发无损地搬过去。今天不跟你扯那些官方文档里的标准话术,就聊聊我这些年踩过的坑和摸索出来的实在招数。

先说说最容易被忽视的第一步:动手之前,先搞清楚你到底为什么要重装。是系统盘满了?是数据库版本太老想升级?还是中了病毒被加密勒索了?不同的原因,处理策略完全不一样。我见过太多人,系统卡了就直接重装,结果装完发现业务库表结构全乱了,还不如不折腾。如果是单纯磁盘空间不足,你完全可以通过迁移数据文件到新盘符来解决,根本不用动数据库本身。只有当你确认是数据库实例损坏、版本不兼容或者系统环境彻底崩溃了,才值得走重装这条路。记住,重装是手段,不是第一选择。
真到了非重装不可的地步,第二步就是备份,而且是那种能让你晚上睡得着觉的备份。别跟我说你在SSMS里点了一下“备份”按钮就算完事了。我见过太多人,备份文件就放在C盘,跟数据库文件放同一个盘符,结果系统一崩,备份文件也跟着没了,那叫一个欲哭无泪。正确的做法是:完整备份加差异备份结合,备份文件必须放到独立于系统盘的物理磁盘或者网络存储上。另外,备份完之后一定要做验证,用RESTORE VERIFYONLY检查一下备份文件是否可用。这一步花不了两分钟,但能避免你在恢复的时候才发现备份文件是坏的,那时候哭都来不及。
备份搞定了,接下来聊聊还原。很多人以为还原就是把备份文件拖回去,但这里有个大坑:服务账号权限。SQL Server在还原数据库的时候,需要对数据文件目录有完全的读写权限。你重装系统之后,原来的服务账号可能变了,或者目录权限被重置了,这时候还原就会报错,提示“操作系统错误5(拒绝访问)”。解决办法也很简单,要么用服务账号手动把数据目录的权限加上,要么干脆把数据库文件放到一个专门新建的、权限放开的目录下。我个人的习惯是,在D盘专门建一个SQLData目录,把权限设为Everyone完全控制,虽然听起来不太安全,但在内网环境里省去了很多权限问题的麻烦。
再往下走,就是那些容易让人抓狂的细节了。比如说,重装之后数据库的排序规则(Collation)一定要跟原来保持一致。这个玩意儿如果不匹配,轻则查询报错,重则整个库的数据都乱套。怎么确认原来的排序规则?在重装前用SELECT SERVERPROPERTY('Collation')查一下,记下来,重装的时候选同样的选项。还有,如果你用的是SQL Server 2012以上的版本,别忘了检查一下是否启用了“包含数据库”功能,因为包含数据库在迁移的时候不需要处理登录名映射,能省不少事。但如果你用的是普通模式,那登录名和密码的迁移就得另外处理,这个等会儿细说。
说到登录名,这是很多人重装后最容易翻车的地方。数据库文件还原成功了,但原来的账号全都没了,应用程序连不上数据库,业务直接停摆。有些人图省事,直接重建账号密码,结果应用程序里写死的连接串还是旧密码,照样连不上。正确做法是:在重装前,用脚本把所有的登录名、密码哈希值、默认数据库、服务器角色权限全部导出来。具体来说,可以用sphelprevlogin这个存储过程,网上有现成的脚本,生成一个包含所有登录信息的SQL文件。重装之后,在服务器上执行这个脚本,账号就全部恢复了。这个方法能保留原来的密码哈希,不需要重新设置密码,应用层不用改任何配置。
数据迁移完了,账号也恢复了,是不是就万事大吉了?还差得远。你还需要检查作业(Job)、链接服务器(Linked Server)、数据库邮件(Database Mail)这些配置项。这些玩意儿不像数据和账号那么显眼,但缺了任何一个,业务都可能出问题。比如你有几个自动化备份的作业,重装后忘了重建,那数据库就裸奔了,万一哪天硬盘挂了,连个备份都没有。我的做法是,重装前用SSMS的“生成脚本”功能,把所有服务器级别的对象都导成脚本,包括作业、维护计划、链接服务器配置等。然后把这些脚本保存到一个安全的地方,重装后按顺序执行一遍,这些配置就都回来了。
最后想说一个很多人忽略的点:重装之前,一定要把旧系统的补丁包和版本号搞清楚。SQL Server的Service Pack和累积更新,不同版本之间可能不兼容。如果你原来装的是SP2,重装的时候直接装RTM版本,然后还原数据库,有时候会因为版本号不匹配导致还原失败。解决办法是,去微软官网下载对应版本的SP补丁,先装好补丁再还原数据库,这样最稳妥。另外,重装完成后,第一件事就是跑一下DBCC CHECKDB,检查数据库的物理一致性。这个命令虽然跑起来慢,但能在第一时间发现潜在的数据页损坏问题,早发现早处理,别等业务跑了一周才发现数据有问题,那时候就真的回天乏术了。
说到底,SQL数据库重装不是个技术难题,是个细心活。每一步都有章可循,只要你按部就班地做好备份、还原、账号恢复、配置迁移这四件事,数据基本不会丢。但最怕的就是那种“我觉得应该没问题”的心态,省略了验证步骤,跳过了配置检查,在业务恢复的关键时刻掉链子。重装这事儿,宁可慢一点,把每一步都做扎实,也别图快省事儿。数据这东西,丢一次就够你喝一壶的。毕竟,咱们的目标只有一个:数据不丢,业务不停。


