OceanBase 支持 Oracle 中绝大部分的基本 SQL 语法。这意味着在从 Oracle 过渡到 OceanBase 的过程中,您不需要消耗大量的时间去学习新的语法,并且可以流畅的实现从 Oracle 到 OceanBase 的迁移。

基于优化和开发的考虑,有一些功能 OceanBase 暂不支持或者是与 Oracle 的表现有所差异。所以本篇文档中将分节对比 OceanBase 对 Oracle 的兼容。

SQL 语法

  • OceanBase 支持 Oracle 中基本 SQL 语法。
  • 少数功能性缺失会报语法不支持的错误,例如在层次查询包含多表连接的场景下就会报错。
  • OceanBase 暂不支持 Oracle 部分较复杂的 OLAP 语法,如模式匹配、 PIVOT/ UNPIVOT 函数、多态表函数和频繁项目集计算。

SQL 数据类型

  • Oracle 中有 24 个数据类型, OceanBase 目前支持 18 种,详细信息请参阅章节 内建数据类型
  • 基于优化的考虑,LONGLONG RAW 数据类型过于老旧,所以 OceanBase 不计划支持这两种数据类型。
  • OceanBase 中大对象数据类型有 48 M 的大小限制且性能不佳,所以不推荐在复杂场景下使用。详细信息请参阅章节 大对象数据类型

字符集和 Collation

  • OceanBase 支持 UTF-8、GBK、GB18030 和国家字符集。
  • OceanBase 仅支持大小写敏感的 Collation。
  • OceanBase 不支持多语言语义的 Collation 比较和排序。

内建函数

Oracle 中支持内建函数 117 个,OceanBase 暂时支持 103 个,详细信息请参阅章节 函数

系统视图

  • Oracle 中有字典视图 400 多个,OceanBase 目前兼容 17 个:

  • ALL_CONS_COLUMNS

  • ALL_CONSTRAINTS
  • ALL_IND_COLUMNS
  • ALL_INDEX
  • ALL_OBJECTS
  • ALL_PART_KEY_COLUMNS
  • ALL_PART_TABLES
  • ALL_SEQUENCE
  • ALL_SOURCE
  • ALL_SUBPART_KEY_COLUMNS
  • ALL_SYNONYMS
  • ALL_TAB_COLUMNS
  • ALL_TAB_PARTITIONS
  • ALL_TABLES
  • ALL_TYPES
  • ALL_USERS
  • ALL_VIEWS

  • Oracle 中有性能视图 700 多个,OceanBase 目前兼容 3 个。

  • V$SYSTEM_EVENT

  • V$SESSION_WAIT
  • V$NLS_PARAMETERS

SQL 功能

OceanBase 支持 Oracle 中核心的 SQL 功能:

  • 计划缓存
  • 大纲绑定
  • 计划管理演进
  • 代价优化器
  • 代价改写
  • 预编译语句
  • 全局索引
  • 函数索引

外键

  • OceanBase 支持外键。
  • OceanBase 不支持添加外键约束 DISABLEENABLE
  • OceanBase 不支持 ALTER TABLR 语句中添加外键约束。
  • OceanBase 不支持级联中的 SET NULL

触发器

  • OceanBase 目前仅支持行级触发器。
  • OceanBase 目前只支持在表上创建触发器,不支持在视图上创建触发器。
  • OceanBase 不支持对触发器使用 DISABLEENABLE 操作。

数据库链接

  • OceanBase 暂不支持数据库链接。

同义词

OceanBase 支持对表、视图、同义词和序列等对象创建同义词,并且支持创建公共同义词。

可更新视图

OceanBase 不支持 WITH CHECK OPTION 子句。

约束

  • OceanBase 支持 CHECKUNIQUENOT NULL 约束。
  • OceanBase 不支持 UNIQUE 约束的 DISABLE 操作。

Hint

Oracle 中有 Hint 73 个,目前 OceanBase 兼容 25 个。另外,OceanBase 特有 Hint 20 个:

OceanBase 兼容 Oracle 的 HintOceanBase 特有的 Hint
USE_BNLINDEX Hint
NO_USE_BNL HintFULL Hint
USE_PX HintLEADING Hint
NO_USE_PX HintORDERED Hint
USE_JIT HintUSE_MERGE Hint
NO_USE_JIT HintNO_USE_MERGE Hint
USE_HASH_AGGREGATION HintUSE_HASH Hint
NO_USE_HASH_AGGREGATION HintNO_USE_HASH Hint
USE_LATE_MATERIALIZATION HintUSE_NL Hint
NO_USE_LATE_MATERIALIZATION HintNO_USE_NL Hint
USE_NL_MATERIALIZATION HintPARALLEL Hint
NO_USE_NL_MATERIALIZATION HintPQ_DISTRIBUTE Hint
PLACE_GROUP_BY HintNO_REWRITE Hint
NO_PLACE_GROUP_BY HintNO_EXPAND Hint
NO_PRED_DEDUCE HintUSE_CONCAT Hint
READ_CONSISTENCY HintMERGE Hint
FROZEN_VERSION HintNO_MERGE Hint
QUERY_TIMEOUT HintUNNEST Hint
LOG_LEVEL HintNO_UNNEST Hint
USE_PLAN_CACHE HintQB_NAME Hint
TRANS_PARAM Hint
TRACING Hint
STAT Hint TOPK Hint
TRACE_LOG Hint

安全相关

透明加密

OceanBase 支持 Oracle 兼容的 TDE 功能, 重做日志文件( Redo Log)加密暂不支持。

审计

  • OceanBase 支持 Oracle 的标准审计,但是暂不支持统一审计。
  • OceanBase 审计结果支持存放于文件或者内部审计表中。
  • OceanBase 支持语句和对象审计类型,对象审计只支持表、序列和包对象, 其他对象暂不支持。
  • OceanBase 暂不支持网络审计和 FGA 细粒度审计。

标签安全

  • OceanBase 支持 Oracle 中的标签安全(Label Security)功能。
  • OceanBase 暂不支持策略在创建生效后的 DISABLE 操作以及 DISABLE 后的 ENABLE 操作。

传输链路加密SSL

OceanBase 支持客户端与 OceanBase 服务器的传输链路加密。

分区支持

OceanBase 支持一级,二级分区,支持哈希(Hash)、范围(Range)和列表(List)等分区形式。

二级分区支持如下表:

分区/子分区哈希范围列表
哈希不支持支持支持
范围支持不支持支持
列表支持支持不支持
  • OceanBase 中分区维护操作命令只支持基本的,例如一级分区 ADD PARTITION 操作。
  • OceanBase 中暂不支持复杂分区维护操作,例如 SPLITMERGEEXCHANGE 分区等。
  • OceanBase 中不支持 TRUNCATE 分区。
  • OceanBase 中二级分区只支持同构形态的,不支持异构形态的二级分区。

并行查询

  • OceanBase 支持类 Oracle 的并行查询,OceanBase 中 DOP 需要手工指定,且暂不支持 Auto DOP 功能。
  • OceanBase 暂不支持 PDML。