从中兴、华为等一系列高新科技企业被美国制裁,到俄乌冲突事件爆发后,西方各国相继宣布制裁俄罗斯,以Oracle、IBM、微软、SAP为代表的科技巨头暂停在俄服务,这一系列动作敲响了加速国产化替代的警钟。数据库作为提供数据存储与处理能力的基础软件,是信息系统的基础、信息安全的基石,因此,数据库自主可控和国产化替代已经刻不容缓。
Oracle数据库发展较早,在国内市场内占领了一定先机,企业经过信息化的长期积累和革新,基于Oracle开发了大量的系统业务。为了能够适配新的国产数据库产品,必须对应用代码进行大量修改,各数据表的数据类型、函数、语法规则需要进行系统、全面的改造,这就要求新的国产数据库对Oracle数据库能够有很好的兼容性支持,降低迁移的代码改造成本。而中国信通院《数据库发展研究报告》中表示,“国内关系型数据库产品中多数是基于MySQL和PostgreSQL二次开发的”。因此,这些产品对MySQL、PostgreSQL兼容性较好,但没有体系化的兼容Oracle,尤其是PL/SQL方面。
体系化的兼容Oracle,首先要关注Oracle的重点功能。以Oracle 12c版本为例,主要功能包括:多租户、RAC、Data Guard、备份和恢复、在线对象重建、FLASHBACK、自动负载管理、结果集缓存、内存引擎、安全加密和审计、存储过程、管理调优和测试工具、分区表、OLAP、压缩、并行处理、数据复制、全文索引、空间数据、XML等。可以将Oracle的这些能力分为以下几类,以此实现对Oracle的体系化兼容:
一、 数据语法兼容
兼容Oracle数据库的数据类型,其难点一方面在于对Oracle特有的数据类型的支持,例如ROWID和ROWNUM,需要国产数据库厂商对此进行兼容开发改造。另一方面就是相同数据类型的不同定义,比如Oracle中的Date类型可以精确到时分秒,而其它数据库则是精确到年月日。为了兼容这种差异,一般是通过提供兼容性开关,开启Oracle兼容开关后,将用户定义时写的Date类型在底层转换成例如Timestamp的类型,可以直接精确到秒级。
兼容Oracle数据库的语法,这方面需要投入大量细致的工作,以提高语法的兼容覆盖度。一类是对Oracle特有语法的支持,例如Merge into可以将两个表进行合并,国产数据库需要通过封装其它方法尽可能高效率地实现该语法的功能。另一类是Oracle语法的差异,例如很多数据库支持对存储过程的实现和调用,而Oracle支持三种形式调用存储过程:call加存储过程、exec加存储过程、直接调用存储过程,需要对这类语法差异进行兼容改造。
二、核心功能兼容
Oracle的开发设计中会采用PL/SQL来完成内核之外的功能,也会应用现有的PACKAGE来实现业务逻辑。国产数据库需要实现PL/SQL的结构、基本语句、子程序、触发器、异常等语法,并覆盖常用的PACKAGE内容,以实现对PL/SQL功能的兼容。在实际使用中,Oracle的PL/SQL还会承载复杂的业务逻辑,因此对复杂PL/SQL的高效执行也是该功能可用性的关键点。
此外,Oracle的主要功能还包括对数据库对象的创建和管理,Oracle的主要数据对象有表、约束、分区、视图、索引、同义词、外键、触发器等。国产数据库厂商需要对比这些数据库对象和自身的差异,一方面需要对数据库对象实现全面覆盖,另一方面需要关注这些对象的特性和限制,以及执行时的效率。
三、运维管理兼容
Oracle为了方便运维管理做了多种视图,需要对常用的视图和运维命令进行兼容,包括all视图、dba视图、user视图等。
此外Oracle提供了丰富的运维工具,如功能强大的Oracle Enterprise Manager运维平台,其提供了多种可视化的运维功能包括备份恢复、高可用管理、存储管理、性能分析和优化、安全管理、监控告警等,需要国产数据库厂商在自身的运维系统中实现这些功能,保障实际业务生产中数据库可运维性的兼容需要。
四、业务能力兼容
对业务能力的兼容往往是容易被忽略的。比如一条相同的SQL在Oracle下正常执行,但是业务迁移到国产数据库后,由于优化器执行器的差异,这条SQL产生了低效率的执行计划,性能差需要业务手动对SQL进行改造。类似的情况,差异还可能是由国产数据库自身引入的,比如需要指定Shardkey、需要创建主键和全局索引,这些差异的引入都可能会导致业务能力上的不兼容,因此需要提供迁移工具负责将Oracle里的字段类型和对象自动转换成国产数据库的对象。
此外,由于不同数据库的架构和部署方案的差异,比如Oracle的RAC架构提供了高可用的能力,需要国产数据库厂商提供替代的高可用能力的兼容性方案。从容灾的角度考虑,最好能提供国产数据库和Oracle之间的异构数据库同步能力,既可以在业务迁移切换的过渡环节提供安全性,也能在业务平稳运行后提高系统的容灾能力。
五、生态工具兼容
驱动是应用程序访问数据库的接口,它与编程语言密切相关,对于Oracle支持的多种数据访问接口包括OCI、OCCI、ODBC、JDBC、.NET、OLE DB、Python、PHP等,国产数据库厂商应支持多种数据库访问接口,兼容Oracle开发生态。
在实际的业务使用中还会用到各类数据库相关工具,例如性能测试工具、可视化开发工具、数据导入导出工具等,因此国产数据厂商需重视产品生态工具的建设,降低Oracle用户使用的门槛。
星环科技分布式交易数据库KunDB高度兼容Oracle语法,支持VARCHAR2/NVARCHAR2、NUMBER等全部常用数据类型,支持控制语句、集合、动态SQL、子程序、预定义包、错误处理等全部PL/SQL语法。并通过自研创新的过程语言编译技术及中间优化语言TIR,支持复杂PL/SQL程序,执行性能比解释执行提升一个数量级。
图1:星环自主原创PL/SQL编译器原理
在Oracle数据库对象、DML、函数、系统视图、内置包、驱动等方面,KunDB做到了常用功能的兼容,满足大部分业务的迁移需求。此外,KunDB适配Oracle应用开发生态,支持基于Oracle的业务直接或者通过中间件框架连接KunDB,包括Java、.NET、C/C等语言开发的应用,尤其是针对C/C应用提供兼容Oracle的OIC/OCCI驱动,来保障业务的平滑迁移。KunDB还提供了开放的数据生态,通过全局事务日志可与异构系统实时同步,可应用在实时数仓建设、Oracle和KunDB双数据库系统并轨运行回切等场景。
图2:星环KunDB数据库兼容情况




