OceanBase与 Oracle 兼容性

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)。

支持自动清理过期备份。

支持租户级别的备份与恢复。

支持数据库级和表级别的恢复。

支持指定路径的恢复。

支持日志归档和备份数据的校验。

3 个赞

666

1 个赞

建议发到实战分享版块 这个版块作为技术交流和问题

1 个赞

总结的好全面,学习了

1 个赞

加油