全部产品
云市场

与 Oracle 兼容性对比

更新时间:2020-03-31 18:21:34

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、UTF-16、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 暂不支持部分子查询(主要是不能提升的子查询)。
  • OceanBase 暂不支持 LINK 算子的 RESCAN 操作(执行时报错)。
  • 更多信息请参阅文档 引用远程数据库中的对象

同义词

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。