YashanDB 与 Oracle 兼容性说明
本文内容来自 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 操作、闪回查询功能
版权声明: 本文为 InfoQ 作者【YashanDB】的原创文章。
原文链接:【http://xie.infoq.cn/article/fddceefb9b22603afde40a8c8】。文章转载请联系作者。
评论