替身式数据库连接

这段时间又接了个活儿,折腾了大概有10天吧。
其实干活儿的时间不算多,多半都是在分析和沟通。
甚至一度我都想放弃了,不想做了,但峰回路转...

大致情况就是,遇到了一个业务系统在一个很旧的服务器里。
服务器得多旧呢,版本是Windows Server 2003 + SQLServer 2000。
2000年,那会儿传奇都没开服呢。

由于旧服务器的握手机制问题,我的Windows 11远程根本连不上。
只能是客户本地把服务器里的文件复制到U盘里,然后快递给我。
以前听说数据迁移里有一招是直接快递硬盘,这回也算是遇到了。
数据拿到之后,又通过远程视频的方式,查清楚了服务器里的服务和进程。

然后就开始了新一轮的踩坑之旅了...
客户只能说明这是一个信息查询系统,数据是从上级部门来的。
那就简单了,查前端,查本地数据,查远程链接。但天真了。

程序两套,部署在IIS上的C#,和Tomcat6里一套Jsp。
(IIS甚至还是IIS6.0,都多少年没见过了)
这都不难,环境装上,原封不动的跑服务就行了。
但坑就坑在数据库里,SQLServer是空的。
迁移数据库里的数据库文件是1M,这个大小就挺值得怀疑的。
我还以为2000年,那个年头文件都很小,但其实数据库就是空的。

后来客户告诉我说,实际上这个服务器里跑的不是直接查询的网站。
查询是用小程序或者公众号查,那这意味着,这就是个接口。

在上次处理 欺诈式数据库连接 的时候,碰巧接触过C#的程序,刚好当时用的反编译器还没删除。
我就解开了这个C#程序的.dll文件,发现了SQL语句:

替身式查询语句
SELECT FROM OPENQUERY(JLCX, 'SELECT a.,b.data,c.data FROM database.VIEW_xxx_history a inner join database.VIEW_xxx_user b on a.账号关联ID=b.账号关联ID inner join database.VIEW_xxx_money c on b.账号关联ID=c.账号关联ID where a.账号关联ID = ''"

OPENQUERY?没见过啊,这是啥呀?
经千问指点,得出结论,C#压根没从SQLServer读取数据,SQLServer就是个中转。
OPENQUERY是链接服务器上执行传递查询的函数,也就是说存在远程数据源,并且是直连。

为什么会踩坑,因为客户说每个月会查一次,我就以为是每个月定时同步一次。
到处找定时任务、计划任务,而且我也没接触过这种链接服务器的数据源。
接下来的坑就是把原本的SQLServer2000 + Oracle10.2升级到SQLServer2008 R2 + Oracle12c了。
最后就是通过SQLServer的SSMS管理器手工创建一模一样的链接服务器了。

链接成功后,读取远程表,一切正常。
修改新的服务器IP,大功告成。


其实迁移数据就那么回事儿,把文件想办法复制,然后想办法跑起来。
问题就出在,这种老系统,我接触的确实不多。
如果说现在给我一个远程的数据源权限,我想的理所当然就是直接连啊。
而那个年头,各个厂商之间也许是存在技术壁垒、天然隔阂的。
以至于,我做梦都想不到,C#连Oracle,还必须用SQLServer做替身。

话说前几天还在旧书摊上找到了一份完整版本的盒装瑞星。
虽说现在电脑都没有光驱了,而且病毒库也早就过期了。
终究也算是20年的老古董了。

赛博古董

想想看那个年代,我才10岁,电脑都是电视里见的,现实中只见过学习机键盘。
很多东西说简单也简单,现在的眼光看简直是简单到愚蠢的简单。
人心也很简单,人的行为也是简简单单,也算是好时光啊。

添加评论
点赞收藏
点踩分享查看原文
评论
?
参与讨论