一、背景
现状不同数据库厂商(Oracle、Mysql、PostgreSQL)对于其数据库产品的SQL语法规范上各有不同,所以用户在使用这些数据库产品的时候需要使用不同的语法。
二、存在的问题
对于一些数据库系统开发商来说,研发的数据库产品语法各有特色,不一定能完全兼容其它数据库产品,这时如果用户需要将原有的应用系统从旧的数据库迁移到新的数据库时,需要对这个迁移过程进行评估,以避免出现因语法不兼容的问题导致迁移后无法使用。
而在评估过程中,如何采集评估的数据又是一个关键的问题。用户可以选择根据原有数据库的一些统计信息抽取历史SQL,然后将这些SQL提交到新的数据库系统进行验证。但是对于不同的数据库来说,有时不一定能获取到这些统计信息,或者不一定能获取到完整的历史数据(MS-SQL),又或者打开了这个统计之后会影响现有环境的性能(MySQL);此外有些厂商还通过在客户端JDBC中植入代码去采集SQL,但这种情况要求用户对应用程序的部署方式进行变更。
三、解决方案
本方案提出一种通过监控网卡流量方式,根据对应的数据库协议解析出来用户所提交的请求,并从中提取SQL用以进行兼容性评估。
本方案通过在数据库部署的主机上部署一个网卡流量监控的应用程序,对网卡中复制出来的数据经过TCP数据重组、数据库协议解析、SQL提取等步骤后获得数据,再提交到数据库迁移评估系统进行评估。该方案实现上会比前两种方案都难,但是好处也是显而易见的,它对用户应用和数据库服务器都没有任何影响。图3为通过监控网卡流量收集数据方案主要逻辑。
四、优点
与通过数据库统计信息收集数据方案相比,本方案不需要调整数据库设置,对现有生产环境数据库服务器无任何影响,不影响数据库性能。
与通过在用户应用JDBC中植入代码收集数据方案相比,本方案无需对客户端进行修改,对现有生产环境应用无任何影响,可以适配所有语言的客户端。