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 的 Hint

OceanBase 特有的 Hint

USE_BNL

INDEX Hint

NO_USE_BNL Hint

FULL Hint

USE_PX Hint

LEADING Hint

NO_USE_PX Hint

ORDERED Hint

USE_JIT Hint

USE_MERGE Hint

NO_USE_JIT Hint

NO_USE_MERGE Hint

USE_HASH_AGGREGATION Hint

USE_HASH Hint

NO_USE_HASH_AGGREGATION Hint

NO_USE_HASH Hint

USE_LATE_MATERIALIZATION Hint

USE_NL Hint

NO_USE_LATE_MATERIALIZATION Hint

NO_USE_NL Hint

USE_NL_MATERIALIZATION Hint

PARALLEL Hint

NO_USE_NL_MATERIALIZATION Hint

PQ_DISTRIBUTE Hint

PLACE_GROUP_BY Hint

NO_REWRITE Hint

NO_PLACE_GROUP_BY Hint

NO_EXPAND Hint

NO_PRED_DEDUCE Hint

USE_CONCAT Hint

READ_CONSISTENCY Hint

MERGE Hint

FROZEN_VERSION Hint

NO_MERGE Hint

QUERY_TIMEOUT Hint

UNNEST Hint

LOG_LEVEL Hint

NO_UNNEST Hint

USE_PLAN_CACHE Hint

QB_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。