2000年 5月
阳光斜斜地打在广欣电力通信公司总部的玻璃幕墙上,折射出刺眼的光晕。
我的Id工卡上面的职位换成了“系统工程师”,方便与客户交流。
在1-4层的办公区,此起彼伏的键盘敲击声像一群不安分的蜂群。
400多台客户端电脑屏幕上闪烁的光标,在 windows 2000 professional和 windows 98的不同界面间跳跃,像一片等待收割的数字麦田。
“Lotus Notes 5.0的安装包放在第三台服务器共享目录里。”
berry推过来一杯冒着热气的速溶咖啡,陶瓷杯壁上凝结的水珠顺着指缝滑进袖口,“Nt服务器昨晚刚做完镜像备份,不过 Sco UNIx那台得格外小心,上次运维组说它的扇区有点坏道。”
我盯着笔记本上的项目计划表,笔尖在“系统部署第一阶段”那行划了个圈。
计划表边缘被咖啡渍晕开的地方,隐约能看见昨晚熬夜标注的注意事项:windows 98的 FAt32分区对 4Gb以上文件的兼容性问题、SqL Server 7.0与 oracle 8i的字符集冲突、Lotus Notes 4.6升级包在低内存机型上的安装超时阈值。
第一天的麻烦来得比预想中更早。
财务部那台老式奔腾 II电脑在加载 Lotus Notes 5.0安装程序时突然蓝屏,屏幕上翻滚的白色代码像条失控的蜈蚣。
我掀开主机箱,一股灰尘混着电容老化的酸腐味扑面而来——64mb SdRAm内存条上的电容鼓着难看的褐色肿块,插槽里还卡着半截折断的散热片。
“换内存要加钱。”
财务部经理王秋菊抱着搪瓷杯在旁边踱步,杯沿的茶渍像圈年轮,“上周刚批了打印机墨盒的预算,这会再申请恐怕...”
berry突然蹲下身用万用表抵住主板接口:“试试关闭二级缓存?”
她的指甲缝里还嵌着昨天调试服务器时沾上的硅脂,“虽然会慢 30%,但至少能撑过安装。等月底预算松动了再换 128mb的,现在先把 config.sys里的 cache设置改了。”
当我用启动盘进入 doS界面修改系统配置时,市场部又传来惊呼。
七台 windows 98客户端在升级后频繁弹出“内存不足”的警告,那些每天要收发几十封带 Excel附件邮件的电脑,此刻像喘不上气的老人。
我盯着任务管理器里 Lotus Notes 5.0占用的 18mb内存,突然想起资料里写的:这个版本比 4.6多了 Java虚拟机支持,在 win98下会额外消耗系统资源。
“把虚拟内存调到物理内存的 1.5倍。”
berry的声音带着沙哑,她刚从服务器机房跑过来,额前的碎发被汗水粘在皮肤上,“虽然硬盘读写会变慢,但总比死机强。”
我们蹲在机房地板上修改注册表时,瓷砖的凉意透过西裤渗进来,远处 UpS不间断电源发出规律的嗡鸣,像在为这场无声的战斗伴奏。
数据迁移的坎来得猝不及防。
当我按下 SqL Server 7.0的导出按钮时,进度条在 97%的位置突然卡住,日志文件里跳出“日期格式转换失败”的红色警告。
我瘫坐在服务器前的转椅上,看着屏幕上 oracle 8i的登录界面发愣。
两个数据库对 timestamp类型的处理方式截然不同,SqL Server用的是美式日期格式,而 oracle默认的是 dd-moN-YY格式,三百多条包含时间戳的电力调度记录像块巨石堵在喉咙。
“要不每条记录手动改?”
我把泡面叉子插进空碗里,塑料发出刺耳的摩擦声。
办公室的日光灯管开始闪烁。
墙上的石英钟指向凌晨两点,倒映在布满指纹的显示器上,像只冷漠的眼睛。
berry突然把键盘推到我面前:“看这个。”
她调出的 SqL脚本里,coNVERt函数正把日期字段拆成年月日三个部分,“先导成 txt中间格式,用逗号分隔,再写个批处理把分隔符换成竖线——oracle的 SqL Loader认竖线。”
她的指甲在键盘上敲出残影,“虽然要多花两天写脚本,但比手动改省六十个工时,客户那边也能接受。”
最难啃的骨头是统一访问方式。
客服部的张姐抱着鼠标哭丧着脸:“我用 web邮箱收发邮件都三年了,这 Notes客户端怎么总提示证书过期?”
她身后的技术员小周举着满是咖啡渍的记事本:“销售部昨天发的 Excel报价单,在 Notes里打开全是乱码,他们还在用 office 97。”
我盯着会议室白板上的流程图,笔尖在“web访问”和“客户端访问”之间画了无数个问号。
Lotus Notes 5.0的 web组件在 windows 98上需要 IE5.0以上版本支持,而公司还有十几台装着 IE4.0的终端。
更要命的是,不同部门的 Excel文件格式混乱,有的用.xls有的用.csv,Notes的附件解析器经常罢工。
“先做个过渡方案。”
berry把第三块擦汗的纸巾塞进裤兜,“保留 web邮件网关,但限制只能收不能发,发邮件必须用客户端。Excel的问题...”
她突然指着技术手册上的 oLE对象章节,“让 bob开发个插件,把 Excel嵌入 Notes表单,这样不管什么版本都能兼容。”
找到 bob时,他正对着满屏的 c代码皱眉。
这位戴着厚眼镜的程序员听完需求,突然从抽屉里翻出张泛黄的 Lotus c ApI手册:“上周刚研究过 Notes的二次开发接口,插件大概三天能出来,但得加个条件——测试环境得用那台带磁带机的服务器,万一数据搞砸了能恢复。”
测试环境的搭建像场精密的外科手术。
我们用 Sco UNIx的 tar命令备份了 oracle数据库,把 SqL Server的.mdf文件压缩成分卷包,每传输 100mb就暂停检查校验和。
当 bob的插件第一次成功把 Excel表格转换成 Notes可识别的 oLE对象时,我突然发现 berry的袖口磨出了毛边,她那只总是敲键盘的右手食指,指甲缝里嵌着洗不掉的墨水印。
客户现场操作那天的阳光格外刺眼。
当最后一台 windows 2000客户端弹出“升级完成”的提示框时,财务部王经理突然拍着桌子站起来:“刚才导数据的时候,有笔电费记录好像重复了!”
我的心跳瞬间卡在喉咙,直到 berry调出备份日志——那是测试时留下的冗余数据,早已被插件自动标记删除。
回程的别克车里,berry把车窗摇到最底。
晚风卷着初夏的热气扑在脸上,远处的高压电线上停着几只麻雀,在夕阳里拉出细长的剪影。
“知道吗?”
她突然从包里翻出个皱巴巴的笔记本,“刚才服务器机房的温度超过了 35度,Nt系统的散热风扇快扛不住了。”
我接过笔记本,最后一页画着个简单的电路图——是用 USb风扇改装的散热装置,旁边标注着“成本:25元,效果:降温 4度”。
车窗外的路灯次第亮起,像串正在被点亮的省略号。
在 2000年的夜色里,预示着更多等待被解开的难题。