林夏的指甲在键盘上敲出三短一长的节奏时,服务器机房的UPS发出了声轻微的嗡鸣。凌晨三点十七分,冷白的应急灯把他的影子钉在机柜阵列上,像张被拉长的二维码。他盯着屏幕上滚动的红色报错信息,指尖悬在Enter键上方,汗滴砸在空格键上洇出小小的晕痕。
“数据库连接超时,重试次数已达上限。”
监控大屏上的绿色数据流突然断成虚线,像被剪刀剪断的毛线。林夏扯下鼻梁上的防蓝光眼镜,镜片后的血丝在应急灯下泛着铁锈色。他想起半小时前接到的电话,运维组长老王的声音裹着电流杂音:“核心交易库崩了,全市两千台ATM机都在吐白纸。”
机房的恒温系统发出换气声,冷风扫过裸露的脚踝。林夏弯腰检查机柜下方的光纤接口,束线带勒得手指发红——上周刚做的冗余备份,此刻备用服务器的指示灯却亮着刺眼的橙黄。他摸出防静电手环往手腕上套,金属扣碰到皮肤时激起一阵战栗,像触到了裸露的火线。
“夏哥,日志分析出来了。”实习生小孟的声音从对讲机里钻出来,带着哭腔,“晚上十点十五分有笔异常批量操作,把用户表的索引全删了。”
林夏的拇指在触控板上打滑。他点开操作记录的CSV文件,密密麻麻的代码行里,那个熟悉的IP地址像根刺扎进眼里——是新入职的开发组长张诚的办公电脑。上周评审会上,这人还拍着胸脯说“我的脚本绝对零bug”,此刻那串删库命令的时间戳,正卡在他提交的版本更新之后。
“让开发组立刻回公司。”林夏的声音在空旷的机房里发飘,他踹了脚机柜底座,防静电地板发出沉闷的回响,“告诉张诚,带着他的代码注释过来,少一个字符都别想进门。”
对讲机里传来纸张翻动的沙沙声,小孟的声音突然变调:“夏哥,ATM机后台开始回滚交易了!是不是……是不是数据能恢复?”
林夏盯着屏幕上缓慢爬升的进度条,像看着输液管里的药水在滴答。他想起去年系统迁移时,老主任带着他在机房守了三天三夜,那人指着闪烁的指示灯说:“数据库管理员的手,得比外科医生还稳,你动的每个字符,都连着上万人的工资卡。”
应急灯突然闪烁起来,林夏抬头时看见UPS的警报灯变成了猩红。备用电源的续航倒计时在屏幕角落跳动:00:47:32。他抓起桌上的备用硬盘,金属外壳冰凉刺骨——这是昨晚下班前做的冷备份,本想今天交给归档室,此刻倒成了救命稻草。
“小孟,把灾备机房的权限临时打开。”林夏撕开硬盘包装,塑料膜的脆响在寂静里格外清晰,“我现在传备份文件,你让那边的工程师准备恢复环境。”
数据线插入接口时弹出电火花,林夏缩回手的动作快如闪电。他看着屏幕上弹出的“设备已连接”提示,突然想起妻子早上塞给他的煮鸡蛋,此刻应该还在背包里捂得温热。结婚三年,他总在饭点接到机房的电话,冰箱上的便签纸换了又换,最新那张写着“儿子会叫爸爸了,记得录段语音回来”。
走廊里传来电梯开门的声响,张诚的皮鞋声由远及近。林夏转身时正撞见对方手里的咖啡杯,深褐色的液体在纸杯里晃出涟漪,像数据库里紊乱的数据流。“林工,这事儿真不怪我,”张诚的领带歪在一边,衬衫领口沾着油渍,“是测试环境的脚本跑错了生产库,谁能想到——”
“谁能想到你没加环境校验参数?”林夏把操作记录甩在对方胸口,纸张散落时露出夹在里面的儿子照片,“张组长,你知道删光索引意味着什么吗?每台ATM机每笔交易,响应时间会从0.3秒变成30秒,全市的银行网点现在都在排队取现金!”
张诚的手指在裤缝上蹭出白痕,突然拔高声音:“不就是回滚数据吗?大不了我通宵加班!”他的皮鞋尖踢到机柜脚,发出刺耳的金属声,“你们运维部平时不都吹自己备份做得好?”
林夏突然笑了,笑声撞在机柜上弹回来,带着金属的冷意。他指着屏幕上的续航倒计时:“还有四十分钟备用电源就断了,等你想明白怎么回滚,全市的自动取款机都该变成废纸打印机了。”他弯腰抱起主机,机箱的重量压得胳膊发酸,“现在,要么闭嘴看我操作,要么滚出去写离职报告。”
张诚的喉结动了动,最终还是没再说话。林夏抱着主机往灾备机房走时,听见身后传来纸张翻动声,大概是这人终于想起去看代码注释了。走廊的声控灯随着脚步声亮了又灭,像谁在黑暗里眨眼睛。
灾备机房的门禁系统发出“滴”的轻响,林夏推门时闻到消毒水的味道。小孟正蹲在地上接网线,马尾辫垂在显示屏上,遮住了半张脸。“夏哥,恢复环境准备好了,”她抬头时露出青黑的眼下,“就是……存储阵列的空间不太够。”
本小章还未完,请点击下一页继续阅读后面精彩内容!