OceanBase 数据库在数据类型、SQL 功能和数据库对象等基本功能上与 Oracle 数据库兼容。在过程化程序语言(Procedural Language,PL)方面,已经基本能够兼容全部的研发功能。在数据库安全、备份恢复、高可用和优化器等高级特性上 OceanBase 数据库的兼容性也非常好,而且有些特性还要优于 Oracle 数据库。这意味着在从 Oracle 数据库迁移到 OceanBase 数据库的过程中,用户不需要消耗大量的时间去学习新知识,即可流畅地实现从 Oracle 数据库到 OceanBase 数据库的迁移。
此外,由于 OceanBase 数据库与 Oracle 数据库在底层架构、产品形态等方面的不同,有一部分功能 OceanBase 数据库暂时不会进行兼容或者会与 Oracle 数据库的表现有所差异。本节主要从以下几个方面介绍 OceanBase 数据库与 Oracle 数据库的兼容性对比信息:
-
SQL 数据类型
-
内建函数
-
SQL 语法
-
过程性语言
-
系统视图
-
字符集
-
字符序
-
数据库对象管理
-
安全特性
-
备份恢复
-
SQL 引擎
SQL 数据类型
OceanBase 数据库兼容大部分 Oracle 数据库中支持的数据类型,详细支持信息请参见 SQL 数据类型。
基于优化考虑,LONG
和 LONG RAW
数据类型过于老旧,OceanBase 数据库暂不计划支持这两种数据类型。
内建函数
OceanBase 数据库兼容大部分 Oracle 数据库中支持的内建函数,详细支持信息请参见 内建函数。
SQL 语法
OceanBase 数据库支持 Oracle 数据库中绝大部分的 SQL 语法,少数功能性缺失会报语法不支持的错误。
支持:
SELECT
-
支持大部分查询功能,包括支持单、多表查询;支持子查询;支持内连接,半连接,外连接;支持分组、聚合;支持层次查询;支持常见的概率,线性回归等数据挖掘函数等。
-
支持如下集合操作:
UNION
、UNION ALL
、INTERSECT
、MINUS
。 -
支持使用
EXPLAIN
语法查看执行计划。
INSERT
-
支持单行、多行插入数据,同时支持指定分区插入数据。
-
支持
INSERT INTO ... SELECT ...
语句。 -
支持单表和多表插入数据。
UPDATE
-
支持单列和多列的更新数据。
-
支持使用子查询更新数据。
-
支持集合更新数据。
DELETE
- 支持单表和多表的删除。
TRUNCATE
- 支持完全清空指定表。
并行查询
-
支持类 Oracle 数据库的并行查询。
OceanBase 数据库支持 Auto DOP 功能,也可以手动通过
Hint/Session
变量指定 DOP。 -
支持并行数据操作语言(DML)。
Hint
OceanBase 数据库支持使用 Hint 语法,有关 Hint 的详细说明,请参见 Hint。
物化视图
CREATE MATERIALIZED VIEW
(创建物化视图)。DROP MATERIALIZED VIEW
(删除物化视图)。
物化视图日志
-
CREATE MATERIALIZED VIEW LOG
(创建物化视图日志)。说明
在 OceanBase 数据库中,
CREATE MATERIALIZED VIEW LOG
语法的with_clause
(PRIMARY KEY
、ROWID
、SEQUENCE
)的默认行为与 Oracle 数据库是不兼容的。 -
DROP MATERIALIZED VIEW LOG
(删除物化视图日志)。
不支持:
物化视图
- 在
CREATE MATERIALIZED VIEW
(创建物化视图)语法中,刷新模式暂不支持ON COMMIT
和ON STATMENT
模式。 - 在
DROP MATERIALIZED VIEW
(删除物化视图)语法中,暂不支持PRESERVE TABLE
子句。
物化视图日志
-
在
CREATE MATERIALIZED VIEW LOG
(创建物化视图日志)语法中:- 暂不支持
ASYNCHRONOUS
子句(异步地执行清除)。 - 使用
EXCLUDING NEW VALUES
子句时,将会报错。 - 暂不支持分区。
- 暂不支持
过程性语言
OceanBase 数据库兼容了大部分 Oracle 数据库的 PL 功能。有关 PL 功能的详细信息,请参见 PL 参考。
支持:
OceanBase 数据库主要支持的 PL 功能如下:
-
数据类型
-
流程控制
-
集合与记录(暂不支持多维度集合)。
-
静态 SQL
-
动态 SQL
-
子过程
-
触发器
-
异常处理
-
程序包
-
性能优化
-
自定义数据类型
-
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 数据库在实现 NOCOPY
参数的行为时与 Oracle 数据库存在兼容性差异:
-
对于基础数据类型和纯 OUT 属性的复杂数据类型参数,不兼容 Oracle 数据库的引用传递行为。
-
对于 IN OUT 属性的复杂数据类型参数,OceanBase 数据库兼容 Oracle 数据库的引用传递行为。
OceanBase 数据库暂不支持如下 PL 功能:
- 条件编译
系统视图
OceanBase 数据库兼容了部分 Oracle 数据库的系统视图,关于兼容的详细视图列表,请参见 系统视图。更多系统视图的字段说明信息,请参见 系统视图。
字符集
OceanBase 数据库 Oracle 模式支持的字符集如下:
- binary
- utf8mb4
- gbk
- utf16
- gb18030
- latin1
- gb18030_2022
- ascii
- tis620
- utf16le
- sjis
- hkscs
- hkscs31
- dec8
- gb2312
- ujis
- euckr
- eucjpms
- cp932
- cp850
- hp8
- macroman
- swe7
说明
对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持字符集:gb2312
、ujis
、euckr
、eucjpms
、cp932
、cp850
、hp8
、macroman
和 swe7
。
字符序
OceanBase 数据库 Oracle 模式支持的排序方式如下表所示。
字符序 | 所属字符集 | 说明 |
---|---|---|
utf8mb4_general_ci | utf8mb4 | 使用通用排序规则。 |
utf8mb4_bin | utf8mb4 | 使用二进制排序规则。 |
utf8mb4_unicode_ci | utf8mb4 | 使用基于 Unicode Collation Algorithm (UCA) 的排序规则。 |
binary | binary | 使用二进制排序规则。 |
gbk_chinese_ci | gbk | 使用中文语言排序规则。 |
gbk_bin | gbk | 使用二进制排序规则。 |
utf16_general_ci | utf16 | 使用通用排序规则。 |
utf16_bin | utf16 | 使用二进制排序规则。 |
utf16_unicode_ci | utf16 | 使用基于 Unicode Collation Algorithm (UCA) 的排序规则。 |
gb18030_chinese_ci | gb18030 | 使用中文语言排序规则。 |
gb18030_bin | gb18030 | 使用二进制排序规则。 |
latin1_swedish_ci | latin1 | 使用瑞典语/芬兰语排序规则。 |
latin1_german1_ci | latin1 | 用于德国(German)语言环境下的 latin1 字符集的排序规则。 |
latin1_danish_ci | latin1 | 用于丹麦(Danish)语言环境下的 latin1 字符集的排序规则。 |
latin1_german2_ci | latin1 | 用于德语环境,适用于需要按照字典顺序进行字符比较的应用场景。 |
latin1_general_ci | latin1 | 用于需要不区分大小写且支持重音符号的场景,如某些欧洲语言的数据库设计。 |
latin1_general_cs | latin1 | 用于区分大小写的通用排序规则,支持多种语言(如西欧语言)。 |
latin1_spanish_ci | latin1 | 用于西班牙(Spanish)语言环境的排序规则。 |
latin1_bin | latin1 | latin1 使用二进制排序规则。 |
gb18030_2022_bin | gb18030_2022 | 使用二进制排序规则。Oracle 模式下该字符集的默认字符序。 |
gb18030_2022_chinese_ci | gb18030_2022 | 使用拼音排序规则。不区分大小写。 |
gb18030_2022_chinese_cs | gb18030_2022 | 使用拼音排序规则。区分大小写。 |
gb18030_2022_radical_ci | gb18030_2022 | 使用部首笔画排序规则。不区分大小写。 |
gb18030_2022_radical_cs | gb18030_2022 | 使用部首笔画排序规则。区分大小写。 |
gb18030_2022_stroke_ci | gb18030_2022 | 使用笔画排序规则。不区分大小写。 |
gb18030_2022_stroke_cs | gb18030_2022 | 使用笔画排序规则。区分大小写。 |
ascii_bin | ascii | 使用二进制排序规则。 |
ascii_general_ci | ascii | 使用基于字母的不区分大小写的排序规则。它忽略了字符的大小写差异,将大写字母和小写字母视为相同的字符。 |
tis620_bin | tis620 | 使用二进制排序规则。 |
tis620_thai_ci | tis620 | 使用泰语排序规则,不区分大小写。 |
gb2312_chinese_ci | gb2312 | 使用 GB2312 字符集,按照中文排序规则进行不区分大小写的排序。 说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
gb2312_bin | gb2312 | 使用 GB2312 字符集,按照二进制顺序进行区分大小写的排序。 说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
ujis_japanese_ci | ujis | 使用 UJIS 字符集,按照日语排序规则进行不区分大小写的排序。 说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
ujis_bin | ujis | 使用 UJIS 字符集,按照二进制顺序进行区分大小写的排序。 说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
euckr_korean_ci | euckr | 使用 EUCKR 字符集,按照韩语排序规则进行不区分大小写的排序。 说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
euckr_bin | euckr | 使用 EUCKR 字符集,按照二进制顺序进行区分大小写的排序。 说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
eucjpms_japanese_ci | eucjpms | 使用 EUCJPMS 字符集,按照日语排序规则进行不区分大小写的排序。 说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
eucjpms_bin | eucjpms | 使用 EUCJPMS 字符集,按照二进制顺序进行区分大小写的排序。 说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
cp932_japanese_ci | cp932 | 使用 CP932 字符集,按照日语排序规则进行不区分大小写的排序。 说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
cp932_bin | cp932 | 使用 CP932 字符集,按照二进制顺序进行区分大小写的排序。 说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
cp850_general_ci | cp850 | 使用 CP850 字符集,按照通用排序规则进行不区分大小写的排序。 说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
cp850_bin | cp850 | 使用 CP850 字符集,按照二进制顺序进行区分大小写的排序。 说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
hp8_english_ci | hp8 | 使用 HP8 字符集,按照英语排序规则进行不区分大小写的排序。 说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
hp8_bin | hp8 | 使用 HP8 字符集,按照二进制顺序进行区分大小写的排序。 说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
macroman_general_ci | macroman | 使用 MacRoman 字符集,按照通用排序规则进行不区分大小写的排序。 说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
macroman_bin | macroman | 使用 MacRoman 字符集,按照二进制顺序进行区分大小写的排序。 说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
swe7_swedish_ci | swe7 | 使用 SWE7 字符集,按照瑞典语排序规则进行不区分大小写的排序。 说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
swe7_bin | swe7 | 使用 SWE7 字符集,按照二进制顺序进行区分大小写的排序。 说明对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。 |
数据库对象管理
支持:
表管理
-
创建表:支持创建表,建表时可以指定分区、约束等信息。有关创建表的详细语法,请参见 CREATE TABLE。
-
修改基表:支持通过
ALTER TABLE
语句添加、删除、修改列;添加、删除约束;添加、删除、修改分区。有关修改表的详细语法,请参见 ALTER TABLE。 -
删除基表:支持删除表,并级联约束。有关删除表的详细语法,请参见 DROP TABLE。
约束
-
支持
CHECK
、UNIQUE
和NOT NULL
约束。 -
支持
PRIMARY KEY
约束。 -
支持
FOREIGN KEY
约束。 -
支持使用
ALTER TABLE
语句添加CHECK
约束、PRIMARY KEY
约束、FOREIGN KEY
约束以及NOT NULL
约束。 -
支持级联中的
SET NULL
。
分区支持
-
支持一级分区、模板化和非模板化的二级分区。
-
支持哈希(Hash)、范围(Range)、列表(List)和组合分区等分区形式。
-
支持局部索引和全局索引。
-
对于分区维护操作:
-
一级分区表支持添加一级分区、删除一级分区、Truncate 一级分区。
-
模板化二级分区表支持添加一级分区、删除一级分区;非模板化二级分区表支持添加一级分区、删除一级分区、Truncate 一级分区、添加二级分区、删除二级分区、Truncate 二级分区。
-
更多分区的说明及使用,请参见 分区概述。
索引管理
-
OceanBase 数据库仅支持 BTree 索引,函数索引和空间索引。
-
支持创建和删除索引。
视图管理
-
支持创建简单或复杂视图。
-
支持删除视图。
-
支持
SELECT
语句。 -
支持 DML 语句。
序列管理
-
支持创建序列。
-
支持修改序列,包括序列的重置取值功能。
-
支持删除序列。
同义词
-
支持对表、视图、同义词和序列等对象创建同义词。
-
支持创建公共同义词。
触发器管理
-
支持创建触发器。
-
支持修改触发器。
-
支持删除触发器。
数据库链接
-
支持 OceanBase 数据库到 OceanBase 数据库的读和写操作。
-
支持 OceanBase 数据库到 Oracle 数据库的读和写操作。
不支持:
约束
- 不支持
UNIQUE
约束的DISABLE
操作。
分区支持
- 模板化二级分区表暂不支持添加二级分区、删除二级分区。
索引管理
- 不支持位图和反向等索引类型。
- 在使用 UPDATE GLOBAL INDEX 重建索引期间,索引不可用。
可更新视图
不支持 WITH CHECK OPTION
子句。
安全特性
OceanBase 数据库实现了丰富的安全特性。
支持:
权限管理
-
兼容 Oracle 数据库的大部分系统权限。有关 OceanBase 数据库 Oracle 模式支持的权限,请参见 Oracle 模式下的权限分类。
-
支持常见的对象权限管理,例如,授权与移除权限。
-
支持白名单策略,实现网络安全访问控制。
-
支持系统预定义角色,用户自定义角色。
身份鉴别
-
Oracle 模式兼容 Oracle 数据库的密码策略。
-
支持用户的锁定和解锁功能。
透明加密
兼容 Oracle 数据库的 TDE 功能,数据在写入存储设备之前自动进行加密,读取时自动解密。
审计
-
支持 Oracle 数据库的标准审计。
-
支持语句和对象审计类型。
-
对象审计当前仅支持表、序列、函数和包对象。
-
审计结果支持存放在文件或者内部表中。
-
支持审计相关的各类系统视图。
标签安全
-
兼容 Oracle 数据库中的标签安全(Label Security)功能。
-
支持 Level 维度。
传输链路加密 SSL
-
支持客户端与 OceanBase 数据库服务器的传输链路加密,以及 OceanBase 数据库节点之间的数据传输加密。
-
除了支持 SSL 单向认证、X509 双向认证,还支持指定加密算法、指定发行方认证、指定 SSL 主题认证等特殊的双向认证。
不支持:
审计
-
不支持统一审计和 FGA 细粒度审计。
-
不支持权限审计和网络审计。
-
不支持删除审计数据。
标签安全
- 不支持 Compartment 和 Group 维度。
备份恢复
OceanBase 数据库也提供了备份恢复功能。有关 OceanBase 数据库物理备份恢复特性的介绍,请参见 备份恢复概述。
支持
不支持
-
支持 NFS、阿里云 OSS、AWS S3 及兼容 S3 协议的对象存储作为备份介质(例如,华为 OBS、Google GCS、腾讯云 COS)。
-
支持自动清理过期备份。
-
支持租户级别的备份与恢复。
-
支持数据库级和表级别的恢复。
-
支持指定路径的恢复。
-
支持日志归档和备份数据的校验。