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 种,详细信息请参阅章节 内建数据类型。
- 基于优化的考虑,
LONG
和LONG 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 不支持添加外键约束
DISABLE
和ENABLE
。 - OceanBase 不支持
ALTER TABLR
语句中添加外键约束。 - OceanBase 不支持级联中的
SET NULL
。
触发器
- OceanBase 目前仅支持行级触发器。
- OceanBase 目前只支持在表上创建触发器,不支持在视图上创建触发器。
- OceanBase 不支持对触发器使用
DISABLE
和ENABLE
操作。
数据库链接
- OceanBase 暂不支持数据库链接。
同义词
OceanBase 支持对表、视图、同义词和序列等对象创建同义词,并且支持创建公共同义词。
可更新视图
OceanBase 不支持 WITH CHECK OPTION
子句。
约束
- OceanBase 支持
CHECK
、UNIQUE
和NOT 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 中暂不支持复杂分区维护操作,例如
SPLIT
、MERGE
和EXCHANGE
分区等。 - OceanBase 中不支持
TRUNCATE
分区。 - OceanBase 中二级分区只支持同构形态的,不支持异构形态的二级分区。
并行查询
- OceanBase 支持类 Oracle 的并行查询,OceanBase 中 DOP 需要手工指定,且暂不支持 Auto DOP 功能。
- OceanBase 暂不支持 PDML。