本文内容来自YashanDB官网,原文内容请见 https://doc.yashandb.com/yashandb/23.3/zh/%E4%BA%A7%E5%93%81%...

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等集合操作
  • 支持如下方式查看执行计划:

    • EXPLAIN
    • AUTOTRACE
  • 支持随机抽样查询能力
  • CTE支持递归功能

INSERT

  • 支持单行、多行插入,同时支持指定分区插入
  • 支持INSERT INTO SELECT语句
  • 支持INSERT ALL语句
  • 支持单表和多表插入

UPDATE

  • 支持单列和多列的更新
  • 支持使用子查询

DELETE

  • 支持单表和多表的删除
  • 支持使用子查询

(2)DDL类

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

  • HEAP表:

    • CREATE TABLE/CREATE TABLE AS
    • ALTER TABLE
    • DROP TABLE
    • TRUNCATE TABLE
  • 临时表

    • GLOBAL TEMPORARY TABLE
    • PRIVATE 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 VIEW
    • DROP VIEW
    • 视图支持SELECT/INSERT/UPDATE/DELETE
  • 物化视图

    • CREATE MATERIALIZED VIEW
    • ALTER MATERIALIZED VIEW
    • DROP 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则实现了直接的布尔型表达式运算。详见下表:

表达式运算类型YashanDBOracle数据库
二元运算加法支持支持
二元运算减法支持支持
二元运算乘法支持支持
二元运算除法支持支持
二元运算取余支持支持
一元运算取反支持支持
位运算与支持支持
位运算或支持支持
位运算异或支持支持
Boolean运算支持不支持

FILTER CONDITION


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

FILTER CONDITONYashanDBOracle数据库
ALL支持支持
ANY支持支持
AND支持支持
EQUAL支持支持
NOT EQUAL支持支持
EXISTS支持支持
NOT EXISTS支持支持
GREAT EQUAL支持支持
GREATE支持支持
IN支持支持
NOT IN支持支持
IS NULL支持支持
IS NOT NULL支持支持
LESS支持支持
LESS EQUAL支持支持
LIKE支持支持
NOT LIKE支持支持
REG LIKE支持支持
NOT REG LIKE支持支持
OR支持支持
SOME支持支持

数据类型


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

数据类型YashanDBOracle数据库
BOOLEAN支持不支持
TINYINT支持不支持
SMALLINT支持支持
INTEGER支持支持
BIGINT支持不支持
FLOAT支持支持
DOUBLE支持支持
NUMBER支持支持
DATE支持支持
TIMESTAMP支持支持
TIME支持不支持
INTERVAL YEAR TO MONTH支持支持
INTERVAL DAY TO SECOND支持支持
CHAR支持支持
VARCHAR支持支持
NCHAR支持支持
NVARCHAR支持支持
ST\_GEOMETRY支持支持
RAW支持支持
CLOB支持支持
NCLOB支持支持
BLOB支持支持
BIT支持不支持
ROWID支持支持
UROWID支持支持
CURSOR支持支持
JSON支持支持
XMLTYPE支持支持

Note

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

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

内置函数


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

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

函数类型支持函数列表YashanDBOracle数据库
数学运算函数ABS,ACOS,ASIN,ATAN,ATAN2,COS,COT, CEIL,DIV,EXP,FLOOR,LOG,LN,MOD,PI,POW,POWER,ROUND,SIGN,SIN,SINH,STDDEV,STDDEV\_POP,STDDEV\_SAMP,SQRT,TAN,TANH,TRUNC,VARIANCE,VAR\_POP,VAR\_SAMP,……支持支持
字符处理函数ASCII,CHR,CONCAT,INITCAP,INSTR,INSTRB,LEFT,LENGTH,LENGTH2,LOWER,LPAD,LTRIM,NLSSORT,POSITION,REPLACE,RIGHT,RPAD,RTRIM,SPLIT,STRPOS,SUBSTR,SUBSTRB,SOUNDEX,TRIM,TRANSLATE ... USING,UNISTR,UPPER,empty\_LOB,……支持支持
正则匹配函数REGEXP\_LIKE,REGEXP\_COUNT,REGEXP\_INSTR,REGEXP\_REPLACE,REGEXP\_SUBSTR,……支持支持
转换函数BIN\_TO\_NUM,CAST,NUMTODSINTERVAL,NUMTOYMINTERVAL,ROWIDTOCHAR,TRANSLATE,TO\_CHAR,TO\_DATE,TO\_DSINTERVAL,TO\_NUMBER,TO\_TIMESTAMP,TO\_YMINTERVAL,……支持支持
集合处理函数COALESCE,DECODE,GREATEST,LEAST,NVL,NVL2,……支持支持
聚集函数AVG,COUNT,GROUP\_CONCAT,LISTAGG,MAX,MIN,SUM,MEDIAN,PERCENTILE\_CONT,……支持支持
窗口函数AVG,COUNT,FIRST,FIRST\_VALUE,LAST,LAST\_VALUE,LEAD,MAX,SUM,RANK,ROW\_NUMBER,……支持支持
系统函数SCN\_TO\_TIMESTAMP,TIMESTAMP\_TO\_SCN,USERENV,……支持支持
时间处理函数ADD\_MONTHS,CURRENT\_TIMESTAMP,EXTRACT,LAST\_DAY,NOW,NEXT\_DAY,OVERLAPS,……支持支持
条件处理函数IF,IFNULL,ISNULL,NULLIF支持不支持
JSON处理函数JSON,JSON\_ARRAY\_GET,JSON\_ARRAY\_LENGTH,JSON\_EXISTS,JSON\_FORMAT,JSON\_PARSE,JSON\_QUERY,JSON\_SERIALIZE,……支持支持
随机函数RANDOM支持不支持
其他函数HEXTORAW,SQLCODE,SQLERRM,SYS\_CONNECT\_BY\_PATH,……支持支持

PL


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

  • 数据类型
  • 流程控制
  • 静态SQL
  • 动态SQL
  • 异常处理

    • 系统定义异常
    • 用户自定义异常
  • 游标

    • BULK COLLECT
  • 存储过程

    • 过程体加密wrap功能
  • 触发器

    • 支持行级、语句级触发器。
    • 目前仅支持在表上创建触发器,不支持在视图上创建触发器
  • 用户自定义高级包

    • 支持子过程
    • 支持全局变量和TYPE定义
  • 用户自定义函数

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

    • OBJECT TYPE
    • VARRAY TYPE
    • TABLE TYPE
    • 支持EXECUTE、UNDER ON对象级的权限控制
  • JOB

内置高级包


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

高级包名称
DBMS\_AUDIT\_MGMT
DBMS\_APPLICATION\_INFO
DBMS\_CRYPTO
DBMS\_DESCRIBE
DBMS\_HM
DBMS\_IJOB
DBMS\_JOB
DBMS\_LOB
DBMS\_LOCK
DBMS\_METADATA
DBMS\_MVIEW
DBMS\_OUTPUT
DBMS\_RANDOM
DBMS\_RESOURCE\_MANAGER
DBMS\_ROWID
DBMS\_SCHEDULER
DBMS\_SESSION
DBMS\_SQL
DBMS\_STANDARD
DBMS\_STATS
DBMS\_UTILITY
DBMS\_XA
OWA\_UTIL
UTL\_ENCODE
UTL\_FILE
UTL\_I18N
UTL\_RAW

系统视图


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

视图名称
AUDITABLE\_SYSTEM\_ACTIONS
AUDIT\_UNIFIED\_ENABLED\_POLICIES
AUDIT\_UNIFIED\_POLICIES
COL
DBA\_ARGUMENTS
DBA\_AUDIT\_MGMT\_CLEANUP\_JOBS
DBA\_AUDIT\_MGMT\_LAST\_ARCH\_TS
DBA\_COLL\_TYPES
DBA\_COL\_COMMENTS
DBA\_CONSTRAINTS
DBA\_CONS\_COLUMNS
DBA\_DATA\_FILES
DBA\_DB\_LINKS
DBA\_DEPENDENCIES
DBA\_EXTERNAL\_TABLES
DBA\_FREE\_SPACE
DBA\_HISTOGRAMS
DBA\_INDEXES
DBA\_IND\_COLUMNS
DBA\_IND\_EXPRESSIONS
DBA\_IND\_PARTITIONS
DBA\_IND\_STATISTICS
DBA\_IND\_SUBPARTITIONS
DBA\_JOBS
DBA\_LOBS
DBA\_LOB\_PARTITIONS
DBA\_LOB\_SUBPARTITIONS
DBA\_LOG\_GROUPS
DBA\_MVIEWS
DBA\_NESTED\_TABLES
DBA\_OBJECTS
DBA\_OUTLINES
DBA\_OUTLINE\_HINTS
DBA\_PART\_COL\_STATISTICS
DBA\_PART\_HISTOGRAMS
DBA\_PART\_INDEXES
DBA\_PART\_KEY\_COLUMNS
DBA\_PART\_TABLES
DBA\_PROCEDURES
DBA\_PROFILES
DBA\_RECYCLEBIN
DBA\_ROLES
DBA\_ROLE\_PRIVS
DBA\_SCHEDULER\_JOBS
DBA\_SEGMENTS
DBA\_SEQUENCES
DBA\_SOURCE
DBA\_SUBPARTITION\_TEMPLATES
DBA\_SUBPART\_KEY\_COLUMNS
DBA\_SYNONYMS
DBA\_SYS\_PRIVS
DBA\_TABLES
DBA\_TABLESPACES
DBA\_TAB\_COLS
DBA\_TAB\_COLUMNS
DBA\_TAB\_COL\_STATISTICS
DBA\_TAB\_COMMENTS
DBA\_TAB\_MODIFICATIONS
DBA\_TAB\_PARTITIONS
DBA\_TAB\_PRIVS
DBA\_TAB\_STATISTICS
DBA\_TAB\_STAT\_PREFS
DBA\_TAB\_SUBPARTITIONS
DBA\_TEMP\_FILES
DBA\_TRIGGERS
DBA\_TRIGGER\_COLS
DBA\_TRIGGER\_ORDERING
DBA\_TYPES
DBA\_TYPE\_ATTRS
DBA\_TYPE\_METHODS
DBA\_USERS
DBA\_VIEWS
UNIFIED\_AUDIT\_TRAIL

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

视图名称
V$2PC\_PENDING
V$ARCHIVE\_DEST
V$ARCHIVE\_DEST\_STATUS
V$ARCHIVE\_GAP
V$ARCHIVED\_LOG
V$BUFFER\_POOL
V$BUFFER\_POOL\_STATISTICS
V$CONTROLFILE
V$DATABASE
V$DATAFILE
V$DIAG\_INCIDENT
V$DIAG\_PROBLEM
V$FIXED\_TABLE
V$FIXED\_VIEW\_DEFINITION
V$HM\_CHECK
V$HM\_CHECK\_PARAM
V$HM\_FINDING
V$HM\_RUN
V$INSTANCE
V$LOCK
V$LOCKED\_OBJECT
V$LOGFILE
V$MYSTAT
V$OPEN\_CURSOR
V$OSSTAT
V$PARAMETER
V$PQ\_TQSTAT
V$PROCESS
V$PX\_SESSION
V$RECOVERY\_PROGRESS
V$RESERVED\_WORDS
V$ROLLBACK
V$SEGMENT\_STATISTICS
V$SESS\_TIME\_MODEL
V$SESSION
V$SESSION\_EVENT
V$SESSION\_WAIT
V$SESSTAT
V$SGA
V$SGASTAT
V$SQL
V$SQL\_BIND\_CAPTURE
V$SQL\_PLAN
V$SQL\_PLAN\_STATISTICS
V$SQLAREA
V$SQLSTATS
V$SQLTEXT
V$STATNAME
V$SYSSTAT
V$SYSTEM\_EVENT
V$SYSTEM\_PARAMETER
V$SYSTEM\_WAIT\_CLASS
V$TABLESPACE
V$TEMP\_EXTENT\_POOL
V$TRANSACTION
V$UNDOSTAT
V$VERSION

字符集


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 option
    • with 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操作、闪回查询功能

YashanDB
1 声望0 粉丝

崖山数据库系统YashanDB是深圳计算科学研究院自主设计研发的新型数据库管理系统,融入原创的有界计算、近似计算、并行可扩展和跨模融合计算理论,可满足金融、政企、能源等关键行业对高性能、高并发及高安全性的...