写点什么

YashanDB 与 Oracle 兼容性说明

作者:YashanDB
  • 2025-02-14
    广东
  • 本文字数:2749 字

    阅读完需:约 9 分钟

本文内容来自 YashanDB 官网,原文内容请见https://doc.yashandb.com/yashandb/23.3/zh/%E4%BA%A7%E5%93%81%E6%8F%8F%E8%BF%B0/%E4%B8%8EOracle%E5%85%BC%E5%AE%B9%E6%80%A7%E8%AF%B4%E6%98%8E.html


YashanDB 在 SQL 语法、表达式运算、FILTER CONDITION、数据类型、内置函数、系统视图和 PL 等基本功能上均与 Oracle 数据库兼容,数据库管理和开发人员不需要花费大量的时间去学习新知识,在已交付特性上直接查阅 Oracle 相关文档,也可流畅地操作使用 YashanDB,实现从 Oracle 数据库到 YashanDB 的平滑迁移。

在其他某些功能上 YashanDB 会与 Oracle 数据库的表现有所差异或者暂时没有进行兼容,这可能是因为:

  • YashanDB 与 Oracle 数据库的底层架构、产品形态等并不相同。

  • YashanDB 摒弃了一些旧的不符合当前主流业务框架的方法,并增加了自己的特性。

本文将从如下方面具体说明,在单机部署和行式存储模式下,YashanDB 对 Oracle 数据库的兼容情况:

  • SQL 语法

  • 表达式运算

  • FILTER CONDITION

  • 数据类型

  • 内置函数

  • PL

  • 系统视图

  • 字符集

  • SQL 引擎

  • 数据库安全

  • 工具兼容

  • 其他兼容

SQL 语法

YashanDB 支持 Oracle 数据库中主流的 SQL 语法,其他少数因功能性缺失导致的不兼容将报语法不支持错误,此时应联系我们的技术支持提供变通方案。 更多 SQL 语法详细说明请查阅开发手册SQL语句文档。

(1)DML 类

SELECT

  • 支持大部分查询功能,包括单、多表查询,子查询,内连接,半连接,外连接,分组及聚合,层次查询等

  • 支持 UNION、UNION ALL、INTERSECT、MINUS 等集合操作

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

  • 支持随机抽样查询能力

  • CTE 支持递归功能

INSERT

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

  • 支持 INSERT INTO SELECT 语句

  • 支持 INSERT ALL 语句

  • 支持单表和多表插入

UPDATE

  • 支持单列和多列的更新

  • 支持使用子查询

DELETE

  • 支持单表和多表的删除

  • 支持使用子查询

(2)DDL 类

YashanDB 兼容 Oracle 数据库大部分的对象及对象管理操作,包括:

  • HEAP 表:CREATE TABLE/CREATE TABLE ASALTER TABLEDROP TABLETRUNCATE TABLE

  • 临时表 GLOBAL TEMPORARY TABLEPRIVATE TEMPORARY TABLE

  • 分区表支持 RANGE/INTERVAL/LIST/HASH 类型分区支持 ADD|DROP|TRUNCATE PARTITION 支持分区行迁移支持 SPLIT 分区二级分区

  • 外部表支持创建目录,CREATE DIRECTORY 支持创建和删除外部表

  • 约束包括 in_line 约束/out_of_line 约束支持 UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK、(NOT) NULL 类型约束

  • 视图 CREATE VIEW/CREATE OR REPLACE FORCE VIEWDROP VIEW 视图支持 SELECT/INSERT/UPDATE/DELETE

  • 物化视图 CREATE MATERIALIZED VIEWALTER MATERIALIZED VIEWDROP MATERIALIZED VIEW 支持本地物化视图,不支持远程物化视图

  • BTree 索引包括全局索引和本地(LOCAL)索引包括唯一(UNIQUE)索引和非唯一索引包含反向键索引和函数索引支持对索引 REBUILD|UNUSABLE|COALESCE|PARALLEL|RENAME 支持在相同列上创建多个索引

  • 同义词包括私有同义词和公共(PUBLIC)同义词

  • 序列包括升序序列和降序序列,可指定 CYCLE|NOCYCLE、CACHE|NOCACHE、ORDER|NOORDER 序列支持 NEXTVAL 和 CURRVAL

  • DBLINK 支持 Oracle 到 YashanDB、YashanDB 到 Oracle 和 YashanDB 到 YashanDB 的远程连接支持 PUBLIC 和 PRIVATE 模式的 LINK 支持表和视图的连接支持在 YashanDB 创建远端对象的同义词、在 YashanDB 上调用远端存储过程和查看 LOB 数据

(3)HINT

YashanDB 支持使用 HINT 并采用了 Oracle 的 HINT 语法,可实现 join 方式、join order、table scan、index scan 等的指定能力。关于 HINT 的详细说明,请查阅开发手册hint文档。

表达式运算

YashanDB 包含了主流的计算框架实现对表达式的运算,此外,Oracle 本身由于没有布尔类型(只在其 PL 中支持)需要使用其他数据类型替代运算,YashanDB 则实现了直接的布尔型表达式运算。详见下表:

FILTER CONDITION

YashanDB 的 FILTER CONDITON 类型完全兼容 Oracle 数据库的 FILTER CONDITON 类型。详见下表:


数据类型

YashanDB 目前包含了 27 种数据类型,与 Oracle 数据库对比情况见下表:



Note

YashanDB 的大对象(CLOB/BLOB)数据类型有较强的存储能力,但大对象存取性能不推荐在复杂场景下使用。

YashanDB 的 XMLTYPE 数据类型底层以 CLOB 进行存储,与 Oracle 存储方式不同,在函数调用时可能存在差异。

内置函数

YashanDB 目前实现了超过 120 个内置函数,具体清单及说明请查阅开发手册内置函数文档。

与 Oracle 数据库的内置函数对比情况见下表:


PL

YashanDB 兼容了 Oracle 数据库大部分的 PL 功能,包括:

  • 数据类型

  • 流程控制

  • 静态 SQL

  • 动态 SQL

  • 异常处理系统定义异常用户自定义异常

  • 游标 BULK COLLECT

  • 存储过程过程体加密 wrap 功能

  • 触发器支持行级、语句级触发器。目前仅支持在表上创建触发器,不支持在视图上创建触发器

  • 用户自定义高级包支持子过程支持全局变量和 TYPE 定义

  • 用户自定义函数 SQL 语言的 UDF 外置 JAVA 语言 UDF 外置 C 语言的 UDF

  • 用户自定义数据类型 OBJECT TYPEVARRAY TYPETABLE TYPE 支持 EXECUTE、UNDER ON 对象级的权限控制

  • JOB

内置高级包

YashanDB 兼容了 Oracle 数据库部分的内置高级包,包括:



系统视图

YashanDB 兼容 Oracle 数据库的 DBA 视图清单如下:(ALL/USER 视图兼容清单与 DBA 视图对应相同)




YashanDB 兼容 Oracle 数据库的动态视图清单如下:



字符集

YashanDB 支持如下字符集:

  • ASCII

  • GBK

  • UTF8

  • ISO88591

  • GB18030

同时,YashanDB 支持如下字符集排序方式:

  • ASCII_GENERAL_CS

  • ASCII_GENERAL_CI

  • GBK_GENERAL_CS

  • GBK_GENERAL_CI

  • UTF8_GENERAL_CS

  • UTF8_GENERAL_CI

  • UTF8_PINYIN_CS

  • UTF8_PINYIN_CI

  • ISO88591_GENERAL_CS

  • ISO88591_GENERAL_CI

  • GB18030_GENERAL_CS

  • GB18030_GENERAL_CI

  • GB18030_PINYIN_CS

  • GB18030_PINYIN_CI

SQL 引擎

YashanDB 的 SQL 引擎兼容了 Oracle 数据库大部分的特性,包括:

  • 支持查询改写

  • 支持预编译语句

  • 支持基于成本的优化器

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

  • 支持执行计划缓存

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

  • 支持执行计划绑定

  • 支持 Optimizer Hint

  • 支持 OutLine

  • 支持 like 和 reglike 的模糊匹配能力

#数据库安全

权限管理

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

  • 兼容常见的对象权限,支持 table、view 对象级权限管理及使用

  • 支持授权与移除权限 with admin optionwith grant option

  • 支持创建用户自定义角色

  • 支持 DBA 和 PUBLIC 系统预定义角色及其权限认证

  • 提供视图查询权限相关内容

身份鉴别

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

  • profile 支持用户密码管理

审计

  • 兼容 Oracle 数据库的统一审计

工具兼容

imp

  • 支持 FULL,FROM/TOUSER 和 TABLES 模式的维度导入

  • 支持指定元数据和数据导入

  • 支持覆盖已存在的表,即 truncate 模式

exp

  • 支持 FULL,OWNER 和 TABLES 模式的维度导出

  • 支持指定元数据和数据导出

其他兼容

统计信息

YashanDB 的统计信息体系兼容了 Oracle 数据库大部分的特性,包括:

  • 支持收集表(分区表)、索引、列等维度统计信息

  • 支持动态采样功能

  • 支持锁定统计信息

  • 支持收集列直方图统计信息

  • 支持通过 JOB 配置收集统计信息任务

  • 支持使用高级包 DBMS_STATS 导入导出统计信息

表空间

  • 支持 ONLINE/OFFLINE

  • 支持 RENAME

可靠性

  • 支持闪回 DML 操作、闪回查询功能

发布于: 刚刚阅读数: 5
用户头像

YashanDB

关注

全自研国产新型大数据管理系统 2022-02-15 加入

还未添加个人简介

评论

发布
暂无评论
YashanDB与Oracle兼容性说明_数据库_YashanDB_InfoQ写作社区