主论坛上,腾讯云数据库专家邹立贤受邀进行了《腾讯云TDSQL助力政企实现数据库国产化》的主题分享,主要包括TDSQL内核Oracle兼容能力、TDSQL驱动Oracle兼容能力和Oracle to TDSQL Oracle兼容性是一个系统性的工作,不能满足于简单的SQL语法/语义兼容,主要有引擎、生态工具两个方面。 TDSQL Oracle兼容能力概述 以内核兼容为基础,打造从内核、驱动、工具三个层面的Oracle兼容能力。 驱动:JDBC、ODBC、OCI、Pro*C 内核:Oracle语法兼容、Oracle功能兼容 资源:底层硬件和操作系统适配 工具:DBbridge/TDSQL Migration Toolkits ( 接口用法做应用层兼容 Pro*C在嵌入式SQL做代码层兼容 工具层面兼容 异构数据库静态对象、应用SQL差异性评估 异构迁移自动改造 Oracle数据迁移和数据同步 二、内核层面 Oracle
在其他某些功能上YashanDB会与Oracle数据库的表现有所差异或者暂时没有进行兼容,这可能是因为:YashanDB与Oracle数据库的底层架构、产品形态等并不相同。 本文将从如下方面具体说明,在单机部署和行式存储模式下,YashanDB对Oracle数据库的兼容情况:SQL语法表达式运算FILTER CONDITION数据类型内置函数PL系统视图字符集SQL引擎数据库安全工具兼容其他兼容 Hint支持OutLine支持like和reglike的模糊匹配能力数据库安全权限管理兼容Oracle数据库的系统级权限兼容常见的对象权限,支持table、view对象级权限管理及使用支持授权与移除权限 profile支持用户密码管理审计兼容Oracle数据库的统一审计工具兼容imp支持FULL,FROM/TOUSER和TABLES模式的维度导入支持指定元数据和数据导入支持覆盖已存在的表,即truncate 模式exp支持FULL,OWNER和TABLES模式的维度导出支持指定元数据和数据导出其他兼容统计信息YashanDB的统计信息体系兼容了Oracle数据库大部分的特性,包括:支持收集表(分区表)、索引
在企业级开发中,经常会遇到MySQL 与 Oracle 双库兼容的场景,而 GROUP BY 分组查询是最容易踩坑的点之一。 两者的 GROUP BY 语法规则、默认配置差异极大,直接写原生 SQL 很容易出现「MySQL 能跑、Oracle 报错」或「Oracle 兼容、MySQL 不执行」的问题。 本文将带你彻底理清 MySQL 与 Oracle GROUP BY 的核心区别,给出一套兼容双库的通用写法,解决跨库分组兼容难题。一、核心痛点:两者 GROUP BY 的本质差异1. 这是 MySQL 和 Oracle 都认可的「通用规则」,也是跨库兼容的唯一标准。 四、正确兼容写法(3 种通用方案)以下 3 种写法,MySQL 和 Oracle 都能直接执行,推荐优先使用方案 1。
Oracle分层查询 Oracle中START / WITH / CONNECT BY提供分层查询的能力,从START WITH开始遍历记录,递归查询结果集直到拿到所有满足条件的结果。 / / \ \ level 1: 2 3 4 5 / level 2: 5 业务上如果需要查询跟节点1的所有子节点,在Oracle 从id=3中得到: 5 3 level 2 Postgresql分层查询改造 Oracle
1 背景描述 Postgresql中时间减法运算结果都是interval,但是在Oracle中sysdate与date减法结果是numeric,差异会导致一些函数无法正确使用,比如 ceil 、 round 2 场景分析 Oracle中并不是所有的时间减法都是会等于浮点型,这里分析几种场景。 date - date:返回整型 Oracle select date '2020-02-01' - date '2020-01-01' from dual; 31 Postgresql select date '2020-02-01' - date '2020-01-01' ; 31 timestamp - timestamp:一致 Oracle select timestamp '2015- 2015-04-10 14:52:19.000' - timestamp '2014-03-11 13:55:29.000'; 395 days 00:56:50 timestamp - date:一致 Oracle
然而,在国产化替代的浪潮中,许多企业却陷入了另一种困境:为了“逃离”Oracle,却掉进了“伪兼容”的深坑,最终付出了更高的代价。 语义兼容语法兼容:SQL语句能被解析执行,不报错。这是基础门槛。语义兼容:执行结果、行为逻辑与Oracle完全一致。 根据官方资料,其Oracle常用能力兼容性已达100%,真实案例中甚至实现了银行系统百万行PL/SQL代码零修改迁移上线。2. 金仓数据库的兼容能力覆盖了:数据类型与函数:全面兼容Oracle数据类型,新增支持 ANYDATASET、TIMESTAMPADD 等复杂函数,甚至兼容 DUMP 等诊断函数。 客户端接口:不仅兼容JDBC、ODBC,更深度兼容Oracle原生的 OCI、OCCI、Pro*C 接口。这对于使用C/C++开发的老旧核心系统至关重要,意味着应用驱动层可能无需修改。
原理与解决方案 Oracle中round(date)实现的功能是四舍五入到指定的单位上。
这不是个别现象,而是Oracle迁移中高频复现的典型困局:为什么总卡在触发器兼容?这一痛点背后,是大量用户在认知阶段反复确认的共性困惑:“我的触发器逻辑明明没改,为什么就是迁不过去?”“是代码问题? 我们从真实迁移现场出发,一层层剥开Oracle迁移触发器兼容性问题的隐性肌理。这些Oracle迁移触发器困扰,你是否也遇到过? Oracle迁移触发器兼容性问题频发的核心成因数据库对象兼容≠行为逻辑兼容很多用户默认:“能创建出触发器对象=功能可用”。但现实是:触发器的本质不是静态代码,而是动态执行契约。 此外,应推动建立触发器资产台账,对每个触发器标注用途、影响范围、依赖对象、关键变量及Oracle版本兼容性说明,逐步将“黑盒式维护”转化为“白盒化治理”。 总结:这不是你的错,而是迁移必经的认知关口Oracle迁移卡在触发器兼容,绝非操作失误或能力不足,而是异构数据库演进过程中必然遭遇的结构性摩擦。
TDSQL-A 全面兼容 PostgreSQL,高度兼容 Oracle 语法,采用无共享架构,支持行列混合存储,在具备业界领先的数据分析能力的同时还具有完整支持分布式事务ACID的能力。 3 企业级Oracle兼容能力解读 3.1 分区表能力 首先是最常用的分区表能力。 3.3 存储过程能力 另一个重要的 Oracle兼容能力就是存储过程,TDSQL-A中也是支持的。比如说,存储过程中可以指定,在i是偶数的时候,对这个事物进行提交,它是奇数的时候,对它进行回滚。 3.4 函数扩展语法能力 此外,为了全面兼容oracle,TDSQL-A的函数在创建调用语法上也进行了适配。 3.10 其他兼容能力 此外我们还支持Oracle中List AGG、SQL hints、同义词、Dual表、各种日期、时间、字符串、表达式等常用函数,可以做到Oracle常用语法的90%以上兼容。
其核心差异化卖点在于高度兼容Oracle语法,旨在实现从Oracle数据库的平滑、低成本迁移。产品在同一管控平台内支持多架构部署,并提供从驱动、工具到内核的全方位Oracle兼容能力。 三、 应用框架和功能介绍 功能框架 TDSQL构建了驱动层、内核层、工具层三位一体的Oracle兼容架构: 驱动层:提供兼容的JDBC、ODBC、OCI、Pro*C驱动程序。 内核层:实现Oracle语法、数据类型、功能的深度兼容。 工具层:提供迁移评估、数据同步、管理运维等配套工具。 硬核指标与兼容能力 PL/SQL兼容度:高达98%以上(来源:产品资料)。 产品优势 语法深度兼容: PL/SQL兼容:兼容Oracle存储过程/函数(如无需括号、IS开始、END名称结束、/结束定义、自治事务等)、PACKAGE、游标属性、集合类型等。 TDSQL-JDBC驱动:独立维护,兼容Oracle的绑定变量、块注释、数据类型映射及存储过程调用方式。
支持各种窗口分析函数,高度兼容Oracle常用函数和语法。 (Oracle兼容开关打开就是Oracle模式,不打开就是PG模式)。 2.2 存储过程语法差异 Oracle创建存储过程的语法与PostgreSQL有很大差异。 2.3 其他兼容性介绍 其他兼容方面,TDSQL PG版支持Oracle特有的package及200多个Oracle常用的系统函数。 目前TDSQL PG版可以兼容98%以上的运营商、保险行业常用Oracle语法,兼容85%以上的银行机构常用Oracle语法,有效降低传统IT企业的国产化及信创门槛。 传统数据库架构瓶颈 4. 4.4 兼容性评估报告 下图是一份对象兼容报告,分为三种颜色:蓝色代表完全兼容,不用做任何改造就可以将Oracle中对象在TDSQL PG版中进行使用;绿色代表内部转换,针对Oracle的使用语法或类型
Oracle兼容性是目前国产数据库的关键任务之一,其直接影响到商业迁移的成本和竞争力。 我们经常发现,部分国产数据库声称与 Oracle兼容性高达90%,但在实际迁移过程中,仍需要频繁地修改业务应用的代码。为何实现与Oracle高兼容度的数据库产品如此困难? 以下将从YashanDB SQL引擎技术、Oracle兼容性的开发原则等方面,阐述YashanDB如何解决Oracle兼容性的开发难题以及如何实现与Oracle的原生兼容。 YashanDB从设计之初,就定下Oracle全面兼容的目标。 图3 Oracle四层生态兼容Oracle兼容性的开发原则下面将以语法兼容层面的数据类型、SQL语法功能、部分高级特性角度,详细阐述YashanDB在Oracle兼容性上面临的挑战和应对的开发原则。
背景:协助客户做验证,客户使用的是RHEL7.6环境,我这边是OEL7.6环境,开始以为区别不大,结果acfs兼容还是遇到问题,特此记录下。 [grid@db193 ~]$ lsmod|grep oracle 这里依然没有结果显示,再次尝试安装还是报错当前OS版本不被支持: [root@db193 bin]# pwd /u01/app/19.3.0 [grid@db193 ~]$ acfsdriverstate -orahome $ORACLE_HOME supported ACFS-9459: ADVM/ACFS is not supported 实际上我们知道OEL有两个内核可选择,一个是UEK内核,另一个就是兼容红帽的RHCK内核,而我的环境默认是UEK内核,很遗憾这个内核对应的7.6版本就是不支持ACFS的。 Linux Server (4.14.35-1818.3.3.el7uek.x86_64 with Unbreakable Enterprise Kernel) 7.6 1 : Oracle Linux
业务场景 本博客记录一下Oracle列转行函数在Oracle11的一些不兼容问题,vm_concat在一些业务场景是必须的。 这个函数在Oracle12是没有的,在Oracle11是不太兼容的,Oracle10可以正常使用。最近遇到这个问题,网上博客很多都写到了自定义列转行函数的办法去解决。 首先分析一下,Oracle11不兼容vm_concat列转行函数,并不代表其它函数不兼容,或许可以找到其它代替的,通过找资料,发现了Oracle11提供的另外一个函数:listagg()函数 语法:listagg 首先通过SQL获取一下oracle版本号 <! banner LIKE 'Oracle%' </select> 下面代码仅供参考,就是获取oracle版本号,然后传到mybatis的xml文件 String oracleVersion = approveConfigDao.getOracleVersion
业务场景 本博客记录一下Oracle列转行函数在Oracle11的一些不兼容问题,vm_concat在一些业务场景是必须的。 这个函数在Oracle12是没有的,在Oracle11是不太兼容的,Oracle10可以正常使用。最近遇到这个问题,网上博客很多都写到了自定义列转行函数的办法去解决。 首先分析一下,Oracle11不兼容vm_concat列转行函数,并不代表其它函数不兼容,或许可以找到其它代替的,通过找资料,发现了Oracle11提供的另外一个函数:listagg()函数 语法:listagg 首先通过SQL获取一下oracle版本号 <! banner LIKE 'Oracle%' </select> 下面代码仅供参考,就是获取oracle版本号,然后传到mybatis的xml文件 String oracleVersion = approveConfigDao.getOracleVersion
遥想当年 转眼间,离2013年6月26日已经近五年之久,在那一天 Oracle 发布了12cR1正式版,给用户带来了很多强大的新特性。 其中的容器数据库 (CDB) 特性应该算得上 Oracle 历史上最大的架构变化之一了。在那之前,一个实例只能与一个数据库相关联(RAC环境下可以为多对一)。 Oracle 圈子里大家都有着“用偶不用奇”的优良传统,所以从2013年到2017年这四年间,12cR1 的使用量并不高。 但随着去年3月发布的 Oracle 12cR2,容器数据库的普及率已大幅提高,不少新上线的系统纷纷采用容器数据库架构。因此,众多监控以及管理软件供应商纷纷开始对容器数据库进行支持。 因为绝大多数 Oracle 数据库监控软件仅能配置实例级别的告警。 举个例子,有一个叫做ORCL的CDB,此时如果这个CDB下存在一个叫做 ORCLPDB 的PDB,它的可用性非常值得关注。
在使用 YMP 工具进行 Oracle 数据库迁移至 YashanDB 时,有用户遇到了不兼容的授权语句问题,导致迁移评估任务中断。别担心,这种情况处理起来非常简单,下面带你快速了解原因及解决方法。 一、问题现象在迁移评估过程中,出现以下不兼容语句提示:grant execute on sys.dbms_stats to user1;导致迁移任务报告不兼容,需要人工干预。 三、问题原因分析出现这个问题的原因在于:在 Oracle 中,DBMS_STATS 包属于 SYS 用户下,访问时通常需要显式授权;而在 YashanDB 的实现中,DBMS_STATS 并不属于 SYS 因此,原本在 Oracle 中必要的授权操作,在 YashanDB 环境下变成了无效语句,自然导致迁移工具识别为不兼容。 六、小结建议在迁移 Oracle 至 YashanDB 时,注意授权类 DDL 语句的兼容性;类似对 DBMS_STATS、DBMS_LOB 等系统包的授权操作,通常在崖山无需显式授权;迁移过程中遇到不兼容项
TDSQL通过提供同一集群内支持多语法生态(如PostgreSQL和Oracle)的底层引擎,配合自研的自动化迁移评估工具链,使得企业能够以极低的应用改造成本摆脱对传统国外商业数据库(尤其是Oracle 通过语法层、元数据层、视图层隔离,在同一套集群内支持灵活创建不同PG/Oracle语法模式的Database。 三层Oracle兼容体系: 驱动层面: 提供独立更新维护的JDBC、ODBC、OCI、Pro*C驱动,自动进行应用层语法和类型映射。 版本兼容范围: 全面兼容 MySQL 5.7-8.0、PostgreSQL 15.8以前版本;高度兼容 Oracle 8i-19c。 Oracle兼容度数据: 全量兼容度提升至 85%以上。 数据类型兼容优势: 原生兼容绝大多数Oracle数据类型,包含数值类(NUMBER等)、字符类(VARCHAR2等)、大对象(BLOB/CLOB等)、时间类(TIMESTAMP WITH TIME ZONE
本文档提供了Oracle数据库19c和21c版本以及相关Oracle技术中包含的特性和增强功能的概述。 它甚至支持与MongoDB兼容的API - 这是最受欢迎的文档存储之一。另外(与NoSQL产品不同),Oracle数据库还提供了对JSON文档进行复杂SQL查询、报告、分析和机器学习的功能。 适用于自治数据库的Oracle数据库API for MongoDB 所有的Oracle自治数据库 - 包括自治JSON数据库 - 都与MongoDB兼容:为MongoDB编写的工具、驱动程序和应用程序可以使用 还可以从关系数据生成JSON,并将结果作为与MongoDB兼容的集合公开,以便轻松将查询结果或关系数据提供给MongoDB应用程序。 (所有Oracle云数据库)以及本地:简单的Oracle文档访问(SODA)API。
核心差异化: 多模兼容引擎: 支持数据库级别配置 Oracle/PostgreSQL 双模式,同一套集群可同时管理不同语法生态的业务应用。 去O能力: 高度兼容 Oracle 语法(8i-19c),全量兼容度提升 85%以上,PL/SQL 行业兼容度高达 98%以上。 功能框架 TDSQL 构建了从底层硬件适配到上层应用工具的完整 Oracle 兼容生态: 驱动层: 提供 JDBC、ODBC、OCI、Pro*C 兼容驱动。 硬核指标与兼容能力 指标维度 具体参数/能力 Oracle 兼容度 全量兼容度 85%+;PL/SQL 兼容度 98%+;PL/SQL 语法兼容 90%+ SQL 标准 满足 SQL2011 标准;全面兼容 产品优势(全量提取) 存储过程/函数兼容: 兼容 Oracle 存储过程定义习惯(如不带参数不需括号、使用 is 开始、/ 结束定义、支持 OUT 返回值、直接调用过程等)。