
兼容性(compatibility)是指硬件之间、软件之间或是软硬件组合系统之间的相互协调工作的程度。兼容的概念比较广,相对于硬件来说,几种不同的电脑部件,如CPU、主板、显示卡等,如果在工作时能够相互配合、稳定地工作,就说它们之间的兼容性比较好,反之就是兼容性不好。做数据库产品诸如Oracle数据库,有很多种可能的做法,但归根结底还是要考虑到Oracle兼容性。
Oracle数据库作为最流行的关系型数据库之一,在Oracle数据库的快速发展中,Oracle 将主要的几个竞争对手远远甩在了身后,其本身的功能越来越丰富,生态越来越强大。从理性的角度看,任何一个后来者都不可能通过兼容的设计追赶上巨人的步伐了。然而,在各种机缘巧合下,还是有很多团队选择了做通用数据库的道路,并因为其面对的市场需求而进一步选择了Oracle兼容性的道路。这也是历史选择的必然,历史的潮流很快就被 NoSQL、NewSQL、Spanner、Aurora 占据。
Oracle 等高手在对决的时候,国内的小弟们还在蹒跚前行;而另一支重要的数据库力量正在 蓬勃发展:以MySQL和PostgreSQL为代表的开源数据库正从市场的低端开始进步。值得注意的是,这两个产品在快速发展过程中并没有明确宣传要兼容Oracle。不过实际上,PostgreSQL出身名门正派,要比MySQL更类似 Oracle 一点。这也是为什么包括 EDB在内的一些公司选择了它为基础来做Oracle兼容。
我们必须要搞明白Oracle兼容要做些什么?
Oracle兼容的目标不是一个固定靶,而是一个移动靶。以Oracle 12为例,它的功能极为庞大,比早期的Oracle 5要复杂N多倍。例如它支持的主要功能包括Oracle documents:
1、符合 SQL:2011 核心级
2、多租户
3、RAC
4、Data Guard
5、备份和恢复
6、在线对象重建
7、FLASHBACK
8、自动负载管理
9、结果集等缓存
10、内存引擎
11、安全、加密和审计
12、存储过程(SQLJ、.NET)
13、各种工具(管理、调优、测试等)
14、分区表
15、OLAP
16、压缩
17、并行处理
18、数据复制
19、全文索引
20、空间数据等等。
兼容,更大的挑战还在于围绕 Oracle 的生态。做到什么程度的兼容才能让整个生态中的多数软件可以不修改而很好的工作?例如各种 ERP、CRM、GIS 软件?
显然,Oracle兼容性达到100%是不可能的事情。务实的态度只能是实现核心的功能,并且尽量保持兼容;万一应用用到了还没有实现的功能,那就必须要改写。万一功能还有一些地方不兼容,应用也必须要修改。涉及到第三方独立软件供应商的地方,例如 GIS、ERP、报表之类的,实际 上也基本上宣告了无法兼容。
如果我们重点关注功能,而暂时忽略性能、可靠性、可维护性、服务、平台兼容、合规等之外;除了前面列出的核心功能之外,也还有大量的细节需要决定是否兼容。比如说对象名的大小写、表达式的计算、数据类型的值域等等,都需要我们为Oracle的兼容性做出相对的工作。
聊了这么多,其实不管是Oracle兼容性或是其他软件的兼容性都不是一朝一夕的事情,需要做出大量的测试,才能对其兼容性做出调整。




