对于Oracle兼容,我们手拿把掐

日前,中国PostgreSQL数据库生态大会在北京顺利召开,会上公布了2022年度PostgreSQL中国技术评选获奖名单,凭借对PostgreSQL中国生态的重大推动与贡献,腾讯云TDSQL斩获“最佳数据库产品”奖。
图片
腾讯云TDSQL同时具备HTAP、分布式和Oracle兼容能力,可以帮助政企以极低改造成本从Oracle平滑迁移到TDSQL,在证券、基金、保险、银行等高要求的应用场景均有大量成功案例。主论坛上,腾讯云数据库专家邹立贤受邀进行了《腾讯云TDSQL助力政企实现数据库国产化》的主题分享,主要包括TDSQL内核Oracle兼容能力、TDSQL驱动Oracle兼容能力和Oracle to TDSQL迁移等方面的内容。
以下为分享精华集锦。
一、简介
1. 中国数据库发展历史和现状
图片
2. 国产当自强, 数据库自主可控破在眉睫
我们通过数据库的几点重要性,可以意识到数据库自主可控的重大意义:
基础软件“皇冠上的明珠”
三大“卡脖子”技术的大动脉
计算产业之“根”
大数据发展之“魂”
3. 国产数据库该如何去O?
Oracle兼容性是一个系统性的工作,不能满足于简单的SQL语法/语义兼容,主要有引擎、生态工具两个方面。
引擎包括:
1)SQL语法功能,如CONNECT BY,  P/L SQL, Packages;
2)Oracle功能特性,如压缩, 索引,结果集缓存,自动负载管理;
3)Oracle诊断能力,如错误码。
生态工具包括:
1)兼容性评估工具,包含异构数据库静态对象、应用SQL差异性评估、异构迁移自动改造、Oracle数据迁移和数据同步;
2)开发工具,包括SQL Developer, PL/SQL Developer;
3)数据访问接口,包括OCI, JDBC 等。
4. TDSQL Oracle兼容能力概述
以内核兼容为基础,打造从内核、驱动、工具三个层面的Oracle兼容能力。
驱动:JDBC、ODBC、OCI、Pro*C
内核:Oracle语法兼容、Oracle功能兼容
资源:底层硬件和操作系统适配
工具:DBbridge/TDSQL Migration Toolkits (评估、迁移、验证)
内核层面兼容
对内置数据类型、内置系统函数、PLSQL等语法层面兼容
对分区表、递归查询、DBlink、伪列等功能层面兼容
驱动层面兼容
JDBC配合内核能力做用法兼容
OCI对oracle接口用法做应用层兼容
Pro*C在嵌入式SQL做代码层兼容
工具层面兼容
异构数据库静态对象、应用SQL差异性评估
异构迁移自动改造
Oracle数据迁移和数据同步
二、内核层面
Oracle兼容能力
1. 数据类型兼容
在TDSQL内核里,增加了Oracle数据类型,并对绝大多数类型做了兼容
数值类型:NUMBER、FLOAT、BINARY_FLOAT、BINARY_DOUBLE
字符类型:CHAR、NCHAR、VARCHAR2、NVARCHAR2、LONG
大对象类型:BLOB、CLOB、NCLOB
兼容了DATE、TIMESTAMP、INTERVAL等
其他如:RAW、LONG RAW、BFILE、 ROWID、UROWID
2. SQL语法兼容
SQL语法兼容以及对象兼容支持
语法支持:MERGE INTO、UPDATE支持SUBQUUERY、CONNECT BY、INSERT ALL/FIRST、FORCE VIEW、PIVOT/UNPIVOT子句、OFFSET…FETCH子句等
增强了分区功能,例如:MERGE/SPLIT分区,DEFAULT分区维护
各种伪列支持:ROWNUM、CONNECT BY相关伪列 如:LEVEL等
支持HINT功能
同义词、DBLINK、系统函数、系统表支持
空串与NULL等价
3. PL/SQL语法兼容
PL/SQL语法兼容Oracle
存储过程、函数的创建,如:以IS作为PLSQL块定义开始、可以用/作为定义结束
存储过程、函数支持COMMIT、ROLLBACK事务控制
兼容游标属性支持:isopen、found、notfound、rowcount
函数、存储过程支持OUT出参,打破原有限制
支持集合类型、包、CREATE TYPE
其他PL语句支持,如:BULK COLLECT、语句LABEL
支持预定义的系统包:dbms_output、dbms_assert、dbms_lob、存储过程调试包dbms_debug等
4. 层次查询
层次查询语法支持start with connect by
树的深度遍历
增加Connect By算子,实现递归执行
优化器From表生成两个Path
将WHERE条件下推到不同的Path上
支持level、connect_by_isleaf、 connect_by_root、 sys_connect_by_path等
5. MERGE INTO
MERGE INTO语法支持:
优化器针对MERGE INTO生成LEFT JOIN,source table 作为left表
扩展ModifyTable算子功能,增加CMD_MERGE
执行器增加ExecMerge,当tuple与merge条件match时,更新tuple或删除tuple;当tuple与merge条件不match的时候,插入新的tuple
图片
6. ROWID & ROWNUM
ROWID支持:
建表支持指定 WITH ROWID参数
更新时,新元组的ROWID值不变
ROWID列存在索引,以ROWID查询时加快查询速度
图片
ROWNUM支持:返回记录编号,含有ROWNUM的查询禁止提升子查询
图片
7. 分区表能力
分区类型支持RANGE、LIST、HASH分区,以及这些类型的组合分区
支持对分区的单独访问,例如SELECT * FROM 表 PARTITION(子分区)
支持分区键更新
新增分区后,自动维护DEFAULT分区
支持分区合并、分裂
8. PL/SQL - 语法
Oracle存储过程/函数语法特点:
以IS作为代码块的起始定义
使用/作为结束定义结束
使用END procname作为函数代码块结束、等
PostgreSQL存储过程/函数语法特点:
以AS作为代码块的起始定义
使用;作为定义结束
使用$$定义整体代码块、等
9. PL/SQL - PACKAGE
PACKAGE支持:
支持公共、私有包变量定义
支持包定义自定义类型
支持包初始化模块
包初始化块等
图片
10. PL/SQL - 自治事务
自治事务:
自治事务由主事务启动;自治事务运行时,主事务挂起
自治事务与启动它的主事务相互独立
自治事务可以用在存储过程、函数、匿名块以及触发器中
如果自治事务与主事务产生锁冲突,系统启动死锁检测,自治事务报告异常
图片
图片
三、驱动层面应用兼容
  1. JDBC规范适配
实现了 JDBC4.0、JDBC4.1、JDBC4.2 规范
适用于 PostgreSQL 8.2 及以上版本
适用于 TDSQL数据库所有版本
基于 JAVA6 和 JAVA8 平台编译构建,适配 JAVA6、JAVA7、JAVA8 及以上平台使用
  2. JDBC实现兼容
1) 适配Oracle数据库的Date、CLOB、BLOB、VARCHAR2、NVARCHAR2、ROWID等类型
2) 适配Oracle数据库方式创建函数、存储过程等操作
3. TDSQL OCI功能兼容
支持了初始化环境、用户连接/断开、多会话、OCI句柄和属性、错误消息处理、SQL执行、事务、DirPath、DateTime、LOB、Number等12大类接口。大约100个函数
4. TDSQL Pro*C功能兼容
支持了变量声明、建立连接、基础SQL语句、预编译语句、游标、简单动态 SQL、ANSI 动态 SQL、错误处理语句等8类场景,约24个语法用法的兼容
四、Oracle to TDSQL迁移
1. 迁移工程面临问题解决
1. 成本高工作量大,可通过数据库迁移平台提供简单易用的数据库迁移平台,减少人工手动操作。
2. 迁移技术复杂,可通过专业化的研发和运维实践解决,腾讯联合生态多年数据库运维和研发经验工程师的技术积累。
3. 兼容程度不明确,通过自动化覆盖评估迁移改造,平台化的数据库对象和应用评估功能,全面完整的迁移评估报告。
4. 迁移过程无标准化流程,通过标准化异构迁移流程,从评估、改造、迁移、校验等标准化和经检验的迁移流程。
2. 迁移工具技术架构
图片
3. 兼容性评估
对象兼容评估报告:
数据库静态对象,例如:表、索引、视图、函数、存储过程、物化视图、触发器、包、数据类型等信息
应用兼容评估报告:
应用端发送给源端执行的SQL评估
评估效果和运行时间、抓取得SQL有关
4. 迁移全流程介绍
图片
5. 双轨运行方案
双轨制运行的收益:
增加回退选择
增加业务可靠性
增加数据保护
双轨制运行成本:
流量镜像复杂性
数据映射复杂性
增加迁移复杂性
图片
6. TDSQL成功去O部分案例
案例一:国信证券反洗钱系统数据库替换
从应用场景、兼容语法体系两个维度考虑TDSQL版对证券应用系统的适配。平滑迁移Oracle数据库,大幅提升性能
案例二:阳光保险OA系统
生产环境更新表结构效率提升50%,数据库扩展性得到提升
高度Oracle兼容能力帮助业务短期迁移上线
同城容灾双中心,提升系统的可靠性
案例三:某省公安系统(含:治安、党建、人口、缉毒系统)
汇聚系统最大性能3.9w条/秒查询速度
物理节点超过300台