与 Oracle 兼容性概述

本节主要介绍 OceanBase 数据库的 Oracle 模式与原生 Oracle 数据库的兼容性对比信息。

OceanBase 数据库在数据类型、SQL 功能和数据库对象等基本功能上与 Oracle 数据库兼容。在 PL 方面,已经基本能够兼容全部的研发功能。在数据库安全、备份恢复、高可用和优化器等高级特性上 OceanBase 数据库的兼容性也非常好,而且有些特性还要优于 Oracle 数据库。这意味着在从 Oracle 数据库迁移到 OceanBase 数据库的过程中,用户不需要消耗大量的时间去学习新知识,即可流畅地实现从 Oracle 数据库到 OceanBase 数据库的迁移。

此外,由于 OceanBase 数据库与 Oracle 数据库在底层架构、产品形态等方面的不同,有一部分功能 OceanBase 数据库暂时不会进行兼容或者会与 Oracle 数据库的表现有所差异。本节主要从以下几个方面介绍 OceanBase 数据库与 Oracle 数据库的兼容性对比信息:

  • SQL 数据类型

  • 内建函数

  • SQL 语法

  • 过程性语言

  • 系统视图

  • 字符集和 Collation

  • 数据库对象管理

  • 安全特性

  • 备份恢复

  • 高可用

  • SQL 引擎

  • 暂不支持的功能

SQL 数据类型

Oracle 数据库中有 24 个数据类型,OceanBase 数据库目前支持 18 种,详细支持信息请参见 SQL 数据类型。其中,基于优化考虑,LONGLONG RAW数据类型过于老旧,OceanBase 数据库暂不计划支持这两种数据类型。

说明

OceanBase 数据库中大对象数据类型有 48 MB 的大小限制且性能不佳,所以不推荐在复杂场景下使用。详细信息请参见 大对象数据类型章节。

内建函数

Oracle 数据库中支持内建函数 117 个,OceanBase 数据库目前支持了 103 个,详细支持信息请参见 内建函数

SQL 语法

OceanBase 数据库支持 Oracle 数据库中绝大部分的 SQL 语法。

少数功能性缺失会报语法不支持的错误。

SELECT

  • 支持大部分查询功能,包括支持单、多表查询;支持子查询;支持内连接,半连接,外连接;支持分组、聚合;支持层次查询;常见的概率,线性回归等数据挖掘函数等

  • 支持如下集合操作:

    union、union all、intersect、minus

  • 支持如下方式查看执行计划:

    EXPLAIN <SQL Statement>;
    EXPLAIN extended <SQL Statement>
  • 不支持 pivotunpivot 子句

INSERT

  • 支持单行、多行插入,同时支持指定分区插入

  • 支持 INSERT INTO … SELECT … 语句

  • 支持单表和多表插入

UPDATE

  • 支持单列和多列的更新

  • 支持使用子查询

  • 支持集合更新

DELETE

  • 支持单表和多表的删除

TRUNCATE

  • 支持完全清空指定表

并行查询

  • 支持类 Oracle 数据库的并行查询

    OceanBase 数据库中 DOP 需要手动通过 hint/session 变量指定,暂不支持 Auto DOP 功能。

  • 支持 PDML

Hint

OceanBase 数据库支持使用 Hint。Oracle 数据库中有 Hint 73 个,目前 OceanBase 数据库兼容 25 个。另外,OceanBase 数据库特有的 Hint 有 20 个。

关于 Hint 的详细说明,请参见《SQL 参考(Oracle 模式)》文档中 基本元素 > 注释 > Hint 章节。

过程性语言

OceanBase 数据库兼容了大部分 Oracle 数据库的 PL 功能,主要支持的 PL 功能如下:

  • 数据类型

  • 流程控制

  • 集合与记录(暂不支持多维度集合)。

  • 静态 SQL

  • 动态 SQL

  • 子过程

  • 触发器

    • 目前仅支持行级触发器。

    • 目前仅支持在表上创建触发器,不支持在视图上创建触发器。

    • 不支持对触发器进行 DISABLEENABLE 操作。

  • 异常处理

  • 程序包

  • 性能优化

  • 自定义数据类型

  • PL 系统包,包括 DBMS_CRYPTO、DBMS_DEBUG、DBMS_LOB、DBMS_LOCK、DBMS_METADATA、DBMS_OUTPUT、DBMS_RANDOM、DBMS_SQL、DBMS_XA、UTL_I18N、UTL_RAW 等

  • PL 标签安全包,包括 SA_SYSDBA、SA_COMPONENTS、SA_LABEL_ADMIN、SA_POLICY_ADMIN、SA_USER_ADMIN、SA_SESSION 等

OceanBase 数据库暂不支持如下 PL 功能:

  • 条件编译

更多 PL 功能的详细信息请参见《PL 参考》。

系统视图

OceanBase 数据库兼容了部分 Oracle 数据库的系统视图,其中:

  • 兼容字典视图 181 个

  • 兼容性能视图(以 v$ 开头)18 个

关于兼容的详细视图列表请参见 系统视图

更多系统视图的字段说明信息请参考《参考指南(Oracle 模式)》文档中 系统视图 章节。

字符集和 Collation

  • OceanBase 数据库支持的字符集有 binary、utf8mb4、gbk、utf16、gb18030。

  • OceanBase 数据库支持的排序方式有 utf8mb4_bin、gbk_bin、utf16_bin、gb18030_bin。

数据库对象管理

表管理

  • 创建表:支持创建表,建表时可以指定分区、约束等信息。

  • 修改基表:支持通过 ALTER TABLE 语句添加、删除、修改列;添加、删除约束;添加、删除、修改分区。

  • 删除基表:支持删除表,并级联约束。

关于创建、修改、删除表的详细语法,请参见 CREATE TABLEALTER TABLEDROP TABLE

约束

  • 支持 CHECKUNIQUENOT NULL 约束

  • 不支持 UNIQUE 约束的 DISABLE 操作

  • 支持外键

  • 不支持添加外键约束的 DISABLEENABLE

  • 支持使用 ALTER TABLE 语句添加外键约束

  • 不支持级联中的 SET NULL

分区支持

  • 支持一级分区、模板化和非模板化的二级分区。

  • 支持哈希(HASH)、范围(RANGE)、列表(LIST)和组合分区等分区形式。

  • 支持局部索引和全局索引

  • 对于分区维护操作:

    • 一级分区表支持添加一级分区、删除一级分区、Truncate 一级分区

    • 模板化二级分区表支持添加一级分区、删除一级分区;非模板化二级分区表支持添加一级分区、删除一级分区、Truncate 一级分区、添加二级分区、删除二级分区、Truncate 二级分区

  • 模板化二级分区表暂不支持添加二级分区、删除二级分区

  • 暂不支持 SPLIT、MERGE 和 EXCHANGE 分区

更多分区的说明及使用请参见《管理员指南》文档中 分区表和分区索引管理 章节。

视图管理

  • 支持创建简单或复杂视图

  • 支持删除视图

  • 支持 SELECT 语句

  • 支持 DML 语句

索引管理

  • OceanBase 数据库仅支持 BTree 索引

  • 支持创建和删除索引

  • 不支持函数、位图和反向等索引类型

数据库链接

OceanBase 数据库目前不支持数据库链接。

同义词

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

可更新视图

不支持 WITH CHECK OPTION 子句。

安全特性

OceanBase 数据库实现了丰富的安全特性。

权限管理

  • 兼容 Oracle 数据库的 24 个系统权限

  • 支持常见的对象权限管理,例如,授权与移除权限

  • 支持白名单策略,实现网络安全访问控制

  • 支持系统预定义角色,用户自定义角色

身份鉴别

  • Oracle 模式兼容 Oracle 数据库的密码策略

  • 支持用户的锁定和解锁功能

透明加密

兼容 Oracle 数据库的 TDE 功能,数据在写入存储设备之前自动进行加密,读取时自动解密。

审计

  • 支持 Oracle 数据库的标准审计,暂不支持统一审计和 FGA 细粒度审计

  • 支持语句和对象审计类型,暂不支持权限审计和网络审计

  • 对象审计当前仅支持表、序列、函数和包对象

  • 审计结果支持存放在文件或者内部表中

  • 支持审计相关的各类系统视图

  • 暂不支持删除审计数据

标签安全

  • 兼容 Oracle 数据库中的标签安全(Label Security)功能

  • 支持 Level 维度,暂不支持 Compartment 和 Group 维度

传输链路加密 SSL

  • 支持客户端与 OceanBase 数据库服务器的传输链路加密,以及 OceanBase 数据库节点之间的数据传输加密

  • 除了支持 SSL 单向认证、X509 双向认证,还支持指定加密算法、指定发行方认证、指定 SSL 主题认证等特殊的双向认证

备份恢复

OceanBase 数据库也提供了备份恢复功能,具体支持的特性如下:

  • 支持 OSS 、 NFS 和腾讯 COS 作为备份目的地

  • 支持集群级别的全量备份、增量备份和日志备份

  • 支持日志归档压缩

  • 支持设置备份的过期时间

  • 支持自动和手动的过期备份数据清理

  • 支持集群级别指定备份的手动删除

  • 支持备份文件和正在进行的备份任务信息的查看

  • 支持租户级别的恢复

  • 支持集群级别和租户级别的备份

  • 支持租户恢复白名单

不支持的特性如下:

  • 不支持租户级别的备份

  • 不支持租户级指定备份的手动删除

  • 不支持备份数据的有效性校验

  • 不支持数据库和表级别的备份恢复功能

更多 OceanBase 数据库物理备份恢复特性的介绍请参见《OceanBase 数据库概览》文档中的 备份与恢复章节。

高可用

OceanBase 数据库的高可用主要采用多副本来实现,同时,也支持如下特性:

  • 兼容 Oracle 数据库的 Data Guard 特性,支持主备库的最大可用模式、最大性能模式以及最大保护模式。

  • 为了数据安全性,支持逻辑备份和物理备份,类似 Oracle 数据库的 RMAN 特性。

更多 OceanBase 数据库的高可用特性介绍请参见《OceanBase 数据库概览》文档中的 高可用章节。

SQL 引擎

OceanBase 数据库的 SQL 引擎兼容了 Oracle 数据库大部分的特性 :

  • 支持查询改写

  • 支持预编译语句

  • 支持基于成本的优化器

  • 支持执行计划生成与展示(EXPLAIN)

  • 支持执行计划缓存

  • 支持执行计划快速参数化

  • 支持执行计划绑定

  • 支持 Optimizer Hint

  • 支持自适应游标共享 ACS

  • 支持执行计划管理 SPM

OceanBase 数据库的 SQL 引擎暂不支持以下功能:

  • 估算器

  • 执行计划隔离

  • 表达式统计存储(ESS)

  • 近似查询处理

更多 SQL 引擎的详细信息请参见《SQL 调优指南》。

暂不支持的功能

  • 不支持 LONGLONG RAW 数据类型

  • SELECT 语句中不支持 pivotunpivot 子句

  • 对于触发器,不支持在视图上创建触发器;不支持对触发器进行DISABLEENABLE操作

  • PL 中暂不支持条件编译

  • 数据库约束中,不支持 UNIQUE 约束的 DISABLE 操作;不支持添加外键约束的 DISABLEENABLE;不支持级联中的 SET NULL

  • 暂不支持 SPLIT、MERGE、EXCHANGE 和 TRUNCATE 分区

  • 不支持函数、位图和反向等索引类型

  • 不支持数据库链接

  • 不支持 WITH CHECK OPTION 子句

  • 暂不支持删除审计相关的各类视图

  • 对于备份恢复功能,不支持组级别的备份;不支持租户级指定备份的手动删除;不支持备份数据的有效性验证;不支持数据库和表级别的备份恢复

  • 对于 SQL 引擎,暂不支持估算器、执行计划隔离、表达式统计存储(ESS)和近似查询处理功能