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

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

  • 支持如下集合操作:UNIONUNION ALLINTERSECTMINUS

  • 支持使用 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_clausePRIMARY KEYROWIDSEQUENCE)的默认行为与 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_DEBUGDBMS_LOBDBMS_LOCKDBMS_METADATADBMS_OUTPUTDBMS_RANDOMDBMS_SQLDBMS_XAUTL_I18NUTL_RAW 等。

  • PL 标签安全包,包括 SA_SYSDBASA_COMPONENTSSA_LABEL_ADMINSA_POLICY_ADMINSA_USER_ADMINSA_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 版本开始支持字符集:gb2312ujiseuckreucjpmscp932cp850hp8macroman 和 swe7

字符序

OceanBase 数据库 Oracle 模式支持的排序方式如下表所示。

字符序所属字符集说明
utf8mb4_general_ciutf8mb4使用通用排序规则。
utf8mb4_binutf8mb4使用二进制排序规则。
utf8mb4_unicode_ciutf8mb4使用基于 Unicode Collation Algorithm (UCA) 的排序规则。
binarybinary使用二进制排序规则。
gbk_chinese_cigbk使用中文语言排序规则。
gbk_bingbk使用二进制排序规则。
utf16_general_ciutf16使用通用排序规则。
utf16_binutf16使用二进制排序规则。
utf16_unicode_ciutf16使用基于 Unicode Collation Algorithm (UCA) 的排序规则。
gb18030_chinese_cigb18030使用中文语言排序规则。
gb18030_bingb18030使用二进制排序规则。
latin1_swedish_cilatin1使用瑞典语/芬兰语排序规则。
latin1_german1_cilatin1用于德国(German)语言环境下的 latin1 字符集的排序规则。
latin1_danish_cilatin1用于丹麦(Danish)语言环境下的 latin1 字符集的排序规则。
latin1_german2_cilatin1用于德语环境,适用于需要按照字典顺序进行字符比较的应用场景。
latin1_general_cilatin1用于需要不区分大小写且支持重音符号的场景,如某些欧洲语言的数据库设计。
latin1_general_cslatin1用于区分大小写的通用排序规则,支持多种语言(如西欧语言)。
latin1_spanish_cilatin1用于西班牙(Spanish)语言环境的排序规则。
latin1_binlatin1latin1 使用二进制排序规则。
gb18030_2022_bingb18030_2022使用二进制排序规则。Oracle 模式下该字符集的默认字符序。
gb18030_2022_chinese_cigb18030_2022使用拼音排序规则。不区分大小写。
gb18030_2022_chinese_csgb18030_2022使用拼音排序规则。区分大小写。
gb18030_2022_radical_cigb18030_2022使用部首笔画排序规则。不区分大小写。
gb18030_2022_radical_csgb18030_2022使用部首笔画排序规则。区分大小写。
gb18030_2022_stroke_cigb18030_2022使用笔画排序规则。不区分大小写。
gb18030_2022_stroke_csgb18030_2022使用笔画排序规则。区分大小写。
ascii_binascii使用二进制排序规则。
ascii_general_ciascii使用基于字母的不区分大小写的排序规则。它忽略了字符的大小写差异,将大写字母和小写字母视为相同的字符。
tis620_bintis620使用二进制排序规则。
tis620_thai_citis620使用泰语排序规则,不区分大小写。
gb2312_chinese_cigb2312使用 GB2312 字符集,按照中文排序规则进行不区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

gb2312_bingb2312使用 GB2312 字符集,按照二进制顺序进行区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

ujis_japanese_ciujis使用 UJIS 字符集,按照日语排序规则进行不区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

ujis_binujis使用 UJIS 字符集,按照二进制顺序进行区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

euckr_korean_cieuckr使用 EUCKR 字符集,按照韩语排序规则进行不区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

euckr_bineuckr使用 EUCKR 字符集,按照二进制顺序进行区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

eucjpms_japanese_cieucjpms使用 EUCJPMS 字符集,按照日语排序规则进行不区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

eucjpms_bineucjpms使用 EUCJPMS 字符集,按照二进制顺序进行区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

cp932_japanese_cicp932使用 CP932 字符集,按照日语排序规则进行不区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

cp932_bincp932使用 CP932 字符集,按照二进制顺序进行区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

cp850_general_cicp850使用 CP850 字符集,按照通用排序规则进行不区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

cp850_bincp850使用 CP850 字符集,按照二进制顺序进行区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

hp8_english_cihp8使用 HP8 字符集,按照英语排序规则进行不区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

hp8_binhp8使用 HP8 字符集,按照二进制顺序进行区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

macroman_general_cimacroman使用 MacRoman 字符集,按照通用排序规则进行不区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

macroman_binmacroman使用 MacRoman 字符集,按照二进制顺序进行区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

swe7_swedish_ciswe7使用 SWE7 字符集,按照瑞典语排序规则进行不区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

swe7_binswe7使用 SWE7 字符集,按照二进制顺序进行区分大小写的排序。
说明

对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持该字符序。

数据库对象管理

支持:

表管理

  • 创建表:支持创建表,建表时可以指定分区、约束等信息。有关创建表的详细语法,请参见 CREATE TABLE

  • 修改基表:支持通过 ALTER TABLE 语句添加、删除、修改列;添加、删除约束;添加、删除、修改分区。有关修改表的详细语法,请参见 ALTER TABLE

  • 删除基表:支持删除表,并级联约束。有关删除表的详细语法,请参见 DROP TABLE

约束

  • 支持 CHECKUNIQUE 和 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)。

  • 支持自动清理过期备份。

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

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

  • 支持指定路径的恢复。

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

<think>好的,用户想在本地安装OceanBase Oracle数据库。首先,我需要明确OceanBase是否支持Oracle兼容模式。根据引用[1],OceanBase确实有MySQL租户,但用户提到的是Oracle数据库,可能需要确认是否有对应的Oracle兼容租户。 接下来,查看引用[2],里面提到可以通过Docker或Linux服务器快速部署OceanBase。但这里可能需要区分是部署OceanBase数据库本身,还是配置Oracle兼容模式。用户可能混淆了OceanBaseOracle的关系,实际上OceanBase是兼容MySQL和Oracle的分布式数据库,但需要特定的租户类型。 然后,引用[3]展示了连接Oracle数据库的方式,但用户的问题是关于安装OceanBaseOracle兼容环境。因此,正确的步骤应该是安装OceanBase,并创建Oracle模式的租户。 需要指导用户安装OceanBase,可能使用Docker方式更简单。然后,在部署时创建Oracle租户,而不是MySQL租户。同时,连接时可能需要使用Oracle客户端,如SQL*Plus,类似于引用[3]中的方法,但需要调整连接字符串指向OceanBase实例。 可能的问题点:用户可能没有分清OceanBase本身支持Oracle兼容,但安装过程可能普通Oracle不同。需要确保步骤清晰,包括安装OceanBase、创建租户、配置客户端连接。同时,提醒用户注意版本兼容性和配置参数,如驱动、端口等。</think>### 本地安装 OceanBase Oracle 数据库环境步骤 1. **选择部署方式** OceanBase 支持通过 Docker 或 Linux 直接部署。**Docker 方式更适合本地测试**,步骤如下: ```bash # 下载 OceanBase 镜像 docker pull oceanbase/oceanbase-ce # 启动容器(分配至少6GB内存) docker run -d --name ob-oracle -p 2881:2881 -p 2883:2883 -e MINI_MODE=0 -e OB_COMPATIBILITY_MODE=oracle oceanbase/oceanbase-ce ``` 参数说明: - `OB_COMPATIBILITY_MODE=oracle` 表示启用 Oracle 兼容模式[^1][^2]。 2. **验证数据库状态** 进入容器执行命令: ```bash docker exec -it ob-oracle bash obd cluster list ``` 若显示 `STATUS` 为 `running`,则部署成功。 3. **创建 Oracle 租户** 通过 `sys` 用户登录后执行: ```sql CREATE TENANT oracle_tenant CHARSET='utf8mb4', ZONE_LIST=('zone1'), PRIMARY_ZONE='zone1', RESOURCE_POOL_LIST=('pool1'); ``` 需提前配置资源池和单元规格。 4. **本地连接数据库** 使用 Oracle 客户端工具(如 SQL*Plus)连接: ```bash sqlplus sys@//localhost:2883/oracle_tenant AS SYSDBA ``` 注意端口 `2883` 是 OceanBaseOracle 模式访问端口[^3]。 --- ### 关键配置说明 - **兼容性模式**:必须显式指定 `OB_COMPATIBILITY_MODE=oracle`,否则默认使用 MySQL 语法。 - **驱动依赖**:Java 应用需使用 OceanBase 提供的 JDBC 驱动(非 Oracle 官方驱动)。 - **数据类型**:部分 Oracle 特有类型(如 `NCLOB`)需检查 OceanBase 版本支持情况。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值