YashanDB与 Oracle 兼容性说明

简介: 与 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
支持随机抽样查询能力
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 则实现了直接的布尔型表达式运算。详见下表:

表达式运算类型 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,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 操作、闪回查询功能

相关文章
|
7月前
|
Oracle 关系型数据库 数据库
【YashanDB知识库】YashanDB与Oracle数据类型对齐
【YashanDB知识库】YashanDB与Oracle数据类型对齐
【YashanDB知识库】YashanDB与Oracle数据类型对齐
|
7月前
|
存储 Oracle 关系型数据库
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
在YMP校验过程中,从yashandb同步至Oracle的数据出现timestamp(0)字段不一致问题。原因是yashandb的timestamp(x)存储为固定6位小数,而Oracle的timestamp(0)无小数位,同步时会截断yashandb的6位小数,导致数据差异。受影响版本:yashandb 23.2.7.101、YMP 23.3.1.3、YDS联调版本。此问题会导致YMP校验数据内容不一致。
|
7月前
|
Oracle 关系型数据库 Java
【YashanDB知识库】Flink CDC实时同步Oracle数据到崖山
本文介绍通过Flink CDC实现Oracle数据实时同步至崖山数据库(YashanDB)的方法,支持全量与增量同步,并涵盖新增、修改和删除的DML操作。内容包括环境准备(如JDK、Flink版本等)、Oracle日志归档启用、用户权限配置、增量日志记录设置、元数据迁移、Flink安装与配置、生成Flink SQL文件、Streampark部署,以及创建和启动实时同步任务的具体步骤。适合需要跨数据库实时同步方案的技术人员参考。
【YashanDB知识库】Flink CDC实时同步Oracle数据到崖山
|
7月前
|
存储 Oracle 关系型数据库
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
|
7月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
|
7月前
|
Oracle 关系型数据库
【YashanDB知识库】YMP从oracle到yashan迁移评估报OCI相关错误
本文来自YashanDB官网,主要解决在使用YMP(yashan-migrate-platform)进行迁移评估时出现的OCI版本检查错误问题。错误原因为操作系统重装后,OCI所需依赖缺失(如`libnsl.so.1`、`libnnz19.so`等)。文章提供了排查步骤和解决方法:一是检查并配置环境变量`LD_LIBRARY_PATH`,二是若依赖仍缺失,则需手动下载并安装对应依赖文件。适用于使用YMP迁移平台的用户遇到OCI相关问题时参考。
|
7月前
|
SQL 存储 Oracle
【YashanDB知识库】对比Oracle和YashanDB对象不一致的方法
本文来自YashanDB官网,介绍从Oracle迁移到YashanDB后的数据校验方法。通过YMP工具迁移数据后,可使用其内置校验功能,或采用本文提供的复杂对比思路:将Oracle的DBA_*数据字典视图保存为用户表,借助YMP同步至YashanDB,再利用SQL查询两数据库间的差异。具体包括视图、存储过程、索引和约束等对象的对比方法,提供详细SQL示例以供参考和修改。
|
7月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
本文来自YashanDB官网,介绍如何处理Oracle客户端sql*plus中使用@@调用同级目录SQL脚本的场景。崖山数据库23.2.x.100已支持@@用法,但旧版本可通过Python脚本批量重写SQL文件,将@@替换为绝对路径。文章通过Oracle示例展示了具体用法,并提供Python脚本实现自动化处理,最后调整批处理脚本以适配YashanDB运行环境。
|
7月前
|
存储 Oracle 关系型数据库
【YashanDB知识库】YMP校验从yashandb同步到oracle的数据时,字段timestamp(0)出现不一致
【YashanDB知识库】YMP校验从yashandb同步到oracle的数据时,字段timestamp(0)出现不一致
|
13天前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
188 93

推荐镜像

更多