OceanBase 和 oracle 不同之处

重要前置:OceanBase 的 Oracle 兼容模式只有企业版才有;社区版只有 MySQL 模式,完全不支持 Oracle 语法。下面对比的是 OceanBase‑Oracle 模式(企业版) vs 原生 Oracle 数据库。语法上高度兼容,但底层架构、存储、高可用、运维模型完全不一样OceanBase。

二、高可用与容灾

  1. Oracle
  • 高可用主要靠 RAC + DataGuard;主库写,备库同步;故障切换需要配置,主备角色人工 / 半人工切换。
  • 传统很难做到城市级多活。
  1. OceanBase
  • 基于 Paxos 协议多副本(默认 3 副本);数据分片有 leader 主副本、follower 副本;节点故障自动选主、自动切换,业务无感知,不需要额外部署备库组件。
  • 原生支持三地五中心城市级容灾;支持单城市故障整体可用。
  • 缺点:多副本带来一定的磁盘开销。

三、存储引擎与 IO 行为

  1. Oracle:B + 树 随机写性能尚可;数据文件直接改写;undo 回滚段管理多版本读一致性。

  2. OceanBase:LSM‑Tree

  • 写优先写入内存 MemTable,定期转储到磁盘 SSTable;后台执行合并(Major Compaction)。
  • 优势:随机写性能强、高压缩比,磁盘占用更低
  • 注意:合并是关键运维点,大合并会消耗 CPU IO,需要关注业务窗口;undo 逻辑和 Oracle 实现不一样,靠全局时间戳 GTS 实现分布式多版本一致性Ocean…。

四、SQL 与过程语言(Oracle 模式下)

OceanBase Oracle 租户语法大部分兼容 Oracle,但不是 100% 完全等价,兼容不等于性能表现一模一样 稀土掘金。

:white_check_mark: 相同 / 兼容

  • DML 基础语法、rownumdecode、序列 sequence、同义词、视图、存储过程、函数、游标、包、触发器基本都支持。
  • 隔离级别支持读已提交;支持大部分 Oracle 内置函数。

:warning: 关键差异与坑点(迁移高频踩坑)

  1. 存储过程游标循环逐行处理 Oracle 经常写for rec in select loop ... insert逐行处理;OceanBase 虽然语法可以跑,但分布式环境逐行循环性能很差,强烈改成集合式 insert into ... select 或者 FORALL 批量 Ocean…。

  2. 自定义函数在 where 条件 Oracle 会将 where 里的自定义函数做常量优化;OceanBase 会对每一行执行函数,大表会引发全表扫描,性能暴跌稀土掘金。

  3. 部分高级语法不支持或行为不同:部分分析函数、pivot/unpivot、部分 DBMS 系统包、某些 DDL 子句(novalidate 等)存在限制或不完全支持。系统视图:OceanBase 提供一套模拟v$视图,但不是 Oracle 原生视图,字段有出入,DBA 脚本要改写。

  4. 分区:都支持 range/list/hash;但 OceanBase 单表分区有上限(Oracle 模式最多 65536);分区键要求更严格;有 Primary Zone(主副本位置)、Table Group 等 Oracle 没有的特性,用于优化分布式 join 性能Ocean…。

五、事务模型

  1. Oracle:事务都是本地事务;RAC 下跨实例还是共享存储。
  2. OceanBase:既有单分片本地事务,也有原生分布式事务,跨多个节点分片也可以 ACID;依靠 GTS 全局时间戳保证分布式下的时序一致性,Oracle 没有这套机制。

注意:分布式事务性能会比本地事务低,设计表时尽量把关联数据放在同一个分片。

六、产品、授权、版本边界(非常重要)

  1. Oracle:商业软件,收费;社区版功能阉割。一套实例只能一种数据库模式。
  2. OceanBase
  • 社区版:开源免费,只支持 MySQL 模式,完全不能使用 Oracle 语法
  • 企业版:商业授权,支持 Oracle 模式 + MySQL 模式,一套集群混合跑两种租户

很多初学者误区:下载社区版,想跑 Oracle 存储过程、rownum,直接报语法错误,就是因为版本边界。

七、运维与 DBA 习惯变化

  1. Oracle DBA 熟悉 SGA、PGA、表空间、datafile、redo‑undo 调优;这套概念在 OceanBase 不存在,要换成资源单元、资源池、租户、tablet 分片、合并、副本的思维。
  2. OceanBase 重点运维项:合并(major)、副本状态、tablet 数量、租户资源单元、GTS 时间戳。
  3. Oracle 很多老 DBA 脚本、监控视图不能直接复制过来用,需要适配 OB 的视图。

八、迁移核心忠告

语法兼容 ≠ 直接复制过来就性能一样

  1. 简单 CRUD 业务迁移改动小;
  2. 大量存储过程、游标循环、复杂分析 SQL,即使语法跑通,往往需要改写优化,不能直接照搬 Oracle 旧写法;
  3. 大表优先合理设计分区,发挥分布式优势,避免跨分片大 join。