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。