前两天,一个朋友半夜给我发消息:“兄弟,我们仓库系统又连不上数据库了,明天还要发货,救命。”我问他用的什么数据库,他发来一张截图,我看到那个熟悉得不能再熟悉的界面——SQL Server Management Studio,连着的实例名字后面明晃晃写着“SQL Server 2008 R2”,那一刻我真是又好笑又感慨:都什么年代了,怎么还有这么多老系统,稳稳当当地跑在 sqlserver2008 上?
先别急着笑,作为一个常年跟各种数据库打交道的人,我对 sqlserver2008 的感情挺复杂,它不是最新技术,甚至官方支持早就结束了,按理说应该被请进“技术博物馆”,但现实是,在很多中小企业、工厂仓库、门店进销存、老 ERP、老 OA 里,它依然像个穿着旧工装的老伙计,话不多,干活还挺稳,今天我就想聊聊这个老数据库,顺便讲两个真实生活里的小例子,也说说我的个人观点。
去年冬天,我表哥的小加工厂就出过一次事,他们那套进销存系统是几年前找人做的,服务器是一台放在办公室角落的台式机,跑着 Windows Server 2008,数据库就是 sqlserver2008,平时没人管,机箱上落了一层灰,那天业务员突然打不开订单页面,表哥第一反应是“电脑坏了”,第二反应是“要不要重装系统”,我赶紧拦住他:先别动,数据库这东西,最怕一着急就乱操作。
我过去一看,C 盘只剩几百兆,数据库日志文件却长得离谱,业务高峰期一堆未提交事务和长时间运行的查询把日志撑大了,更要命的是,他们所谓的“备份”只是把 mdf 文件复制到移动硬盘里,从来没做过还原验证,你说这算备份吗?在我看来,只能算“心理安慰”,后来我先把服务停掉,做完整备份,再把备份文件拷到另一台机器上还原测试,确认数据能读、表能查、关键订单数量对得上,才敢动生产库,那天折腾到凌晨两点,最后加了一个磁盘空间监控和每日备份任务,才算暂时稳住。
这个事让我特别想说一句:sqlserver2008 老不老不是最可怕的,最可怕的是“没人管”,很多人一听老数据库,第一反应是“赶紧换新的”,但换新不是嘴上说说,老系统里往往藏着十几年积累下来的业务逻辑,表结构可能没有主键,触发器套触发器,存储过程里还有硬编码,你贸然迁移,出了数据对不上的问题,业务部门可不会听你讲技术理想。
我还有一个做运维的朋友,去年接手一家小公司的老系统,那家公司想从 sqlserver2008 迁到新版本,理由很正当:安全支持没了,性能也怕扛不住,结果一评估发现,旧系统里有个核心报表依赖老版本的某些兼容行为,应用程序连接字符串写死,连驱动都很老,最后他们没有“一刀切”迁移,而是先做只读备份库,把报表查询引流过去,再逐步改应用,这个过程不酷,甚至有点笨,但很稳,我个人很认同这种做法:迁移不是炫技,迁移是算账,算业务停机成本、算改造人力、算数据风险,最后选一个能落地的方案。
我也不是给 sqlserver2008 唱赞歌,它确实老了,官方支持结束后,安全补丁没有了,新硬件、新系统兼容性也可能出问题,我的观点很明确:老系统可以暂时用,但不能“裸奔”用,至少要做到几件事:第一,备份必须做,而且必须定期做还原验证,别只复制文件;第二,磁盘、日志、作业、告警要有人看,别等业务停了才发现;第三,能隔离就隔离,别把老数据库直接暴露在公网;第四,制定迁移计划,哪怕一年只推进一点,也比永远拖着强。
说到底,技术没有绝对的新旧,只有合不合适,sqlserver2008 对很多小团队来说,曾经是门槛低、上手快、够用的选择;今天它还在一些角落里发光,也不奇怪,但我更想提醒的是:别因为“还能跑”就假装看不见风险,也别因为“太老了”就一拍脑袋乱迁,对老系统,既要有感情,更要有规矩。
如果你问我 sqlserver2008 还能不能用,我会说:能用的前提,是你知道它老在哪里、风险在哪里、下一步往哪里走,它像个老伙计,干活还行,但你得定期体检,别等它哪天突然撂挑子,才想起备份和迁移这回事。
