#与Oracle兼容性说明

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
  • 支持随机抽样查询能力

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
    • 支持表和视图的连接

(3)HINT

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

# 表达式运算

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

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

# FILTER CONDITION

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

FILTER CONDITON YashanDB Oracle数据库
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数据库对比情况见下表:

数据类型 YashanDB Oracle数据库
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数据库的内置函数对比情况见下表:

函数类型 支持函数列表 YashanDB Oracle数据库
数学运算函数 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,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,…… 支持 支持
窗口函数 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,…… 支持 支持
条件处理函数 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
  • JOB

# 内置高级包

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

高级包名称
DBMS_AUDIT_MGMT
DBMS_CRYPTO
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_SQL
DBMS_STANDARD
DBMS_STATS
DBMS_UTILITY
OWA_UTIL
UTL_FILE

# 系统视图

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$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配置收集统计信息任务

表空间

  • 支持ONLINE/OFFLINE
  • 支持RENAME

可靠性

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