暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

腾讯云数据库 2023-03-02
804

日前,中国PostgreSQL数据库生态大会在北京顺利召开,会上公布了2022年度PostgreSQL中国技术评选获奖名单,凭借对PostgreSQL中国生态的重大推动与贡献,腾讯云TDSQL斩获最佳数据库产品”


腾讯云TDSQL同时具备HTAP、分布式和Oracle兼容能力,可以帮助政企以极低改造成本从Oracle平滑迁移到TDSQL,在证券、基金、保险、银行等高要求的应用场景均有大量成功案例。主论坛上,腾讯云数据库专家邹立贤受邀进行了《腾讯云TDSQL助力政企实现数据库国产化》的主题分享,主要包括TDSQL内核Oracle兼容能力、TDSQL驱动Oracle兼容能力和Oracle to TDSQL迁移等方面的内容。
以下为分享精华集锦。



一、简介


1. 中国数据库发展历史和现状


2. 国产当自强, 数据库自主可控破在眉睫

我们通过数据库的几点重要性,可以意识到数据库自主可控的重大意义:
  1. 基础软件“皇冠上的明珠”
  2. 三大“卡脖子”技术的大动脉
  3. 计算产业之“根”
  4. 大数据发展之“魂”


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 (评估、迁移、验证)
内核层面兼容
  1. 对内置数据类型、内置系统函数、PLSQL等语法层面兼容
  2. 对分区表、递归查询、DBlink、伪列等功能层面兼容

驱动层面兼容
  1. JDBC配合内核能力做用法兼容
  2. OCI对oracle接口用法做应用层兼容
  3. Pro*C在嵌入式SQL做代码层兼容

工具层面兼容
  1. 异构数据库静态对象、应用SQL差异性评估
  2. 异构迁移自动改造

  3. Oracle数据迁移和数据同步




二、内核层面

Oracle兼容能力



1. 数据类型兼容

在TDSQL内核里,增加了Oracle数据类型,并对绝大多数类型做了兼容
  1. 数值类型:NUMBER、FLOAT、BINARY_FLOAT、BINARY_DOUBLE
  2. 字符类型:CHAR、NCHAR、VARCHAR2、NVARCHAR2、LONG
  3. 大对象类型:BLOB、CLOB、NCLOB
  4. 兼容了DATE、TIMESTAMP、INTERVAL等
  5. 其他如:RAW、LONG RAW、BFILE、 ROWID、UROWID


2. SQL语法兼容

SQL语法兼容以及对象兼容支持
  1. 语法支持:MERGE INTO、UPDATE支持SUBQUUERY、CONNECT BY、INSERT ALL/FIRST、FORCE VIEW、PIVOT/UNPIVOT子句、OFFSET…FETCH子句等
  2. 增强了分区功能,例如:MERGE/SPLIT分区,DEFAULT分区维护
  3. 各种伪列支持:ROWNUM、CONNECT BY相关伪列 如:LEVEL等
  4. 支持HINT功能
  5. 同义词、DBLINK、系统函数、系统表支持
  6. 空串与NULL等价


3. PL/SQL语法兼容

PL/SQL语法兼容Oracle
  1. 存储过程、函数的创建,如:以IS作为PLSQL块定义开始、可以用/作为定义结束
  2. 存储过程、函数支持COMMIT、ROLLBACK事务控制
  3. 兼容游标属性支持:isopen、found、notfound、rowcount
  4. 函数、存储过程支持OUT出参,打破原有限制
  5. 支持集合类型、包、CREATE TYPE
  6. 其他PL语句支持,如:BULK COLLECT、语句LABEL
  7. 支持预定义的系统包:dbms_output、dbms_assert、dbms_lob、存储过程调试包dbms_debug等


4. 层次查询

层次查询语法支持start with connect by
  1. 树的深度遍历
  2. 增加Connect By算子,实现递归执行
  3. 优化器From表生成两个Path
  4. 将WHERE条件下推到不同的Path上
  5. 支持level、connect_by_isleaf、 connect_by_root、 sys_connect_by_path等

5. MERGE INTO

  1. MERGE INTO语法支持:
  2. 优化器针对MERGE INTO生成LEFT JOIN,source table 作为left表
  3. 扩展ModifyTable算子功能,增加CMD_MERGE
  4. 执行器增加ExecMerge,当tuple与merge条件match时,更新tuple或删除tuple;当tuple与merge条件不match的时候,插入新的tuple

6. ROWID & ROWNUM

ROWID支持:
  1. 建表支持指定 WITH ROWID参数
  2. 更新时,新元组的ROWID值不变
  3. ROWID列存在索引,以ROWID查询时加快查询速度
ROWNUM支持:返回记录编号,含有ROWNUM的查询禁止提升子查询

7. 分区表能力

  1. 分区类型支持RANGE、LIST、HASH分区,以及这些类型的组合分区
  2. 支持对分区的单独访问,例如SELECT * FROM 表 PARTITION(子分区)
  3. 支持分区键更新
  4. 新增分区后,自动维护DEFAULT分区
  5. 支持分区合并、分裂

8. PL/SQL - 语法

Oracle存储过程/函数语法特点:
  1. 以IS作为代码块的起始定义
  2. 使用/作为结束定义结束
  3. 使用END procname作为函数代码块结束、等

PostgreSQL存储过程/函数语法特点:
  1. 以AS作为代码块的起始定义
  2. 使用;作为定义结束
  3. 使用$$定义整体代码块、等

9. PL/SQL - PACKAGE

PACKAGE支持:
  1. 支持公共、私有包变量定义
  2. 支持包定义自定义类型
  3. 支持包初始化模块
  4. 包初始化块等

10. PL/SQL - 自治事务

自治事务:
  1. 自治事务由主事务启动;自治事务运行时,主事务挂起
  2. 自治事务与启动它的主事务相互独立
  3. 自治事务可以用在存储过程、函数、匿名块以及触发器中
  4. 如果自治事务与主事务产生锁冲突,系统启动死锁检测,自治事务报告异常



三、驱动层面应用兼容


  1. JDBC规范适配

  1. 实现了 JDBC4.0、JDBC4.1、JDBC4.2 规范
  2. 适用于 PostgreSQL 8.2 及以上版本
  3. 适用于 TDSQL数据库所有版本
  4. 基于 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. 兼容性评估

对象兼容评估报告:
数据库静态对象,例如:表、索引、视图、函数、存储过程、物化视图、触发器、包、数据类型等信息
应用兼容评估报告:
  1. 应用端发送给源端执行的SQL评估
  2. 评估效果和运行时间、抓取得SQL有关


4. 迁移全流程介绍

5. 双轨运行方案

双轨制运行的收益:
  1. 增加回退选择
  2. 增加业务可靠性
  3. 增加数据保护

双轨制运行成本:
  1. 流量镜像复杂性
  2. 数据映射复杂性
  3. 增加迁移复杂性

6. TDSQL成功去O部分案例

案例一:国信证券反洗钱系统数据库替换
从应用场景、兼容语法体系两个维度考虑TDSQL版对证券应用系统的适配。平滑迁移Oracle数据库,大幅提升性能
案例二:阳光保险OA系统
  1. 生产环境更新表结构效率提升50%,数据库扩展性得到提升
  2. 高度Oracle兼容能力帮助业务短期迁移上线

  3. 同城容灾双中心,提升系统的可靠性




案例三:某省公安系统(含:治安、党建、人口、缉毒系统)
  1. 汇聚系统最大性能3.9w条/秒查询速度

  2. 物理节点超过300台




-- 更多精彩 --

金融数字化转型落地实践,腾讯云数据库的三问三答


点击阅读原文,了解更多优惠

文章转载自腾讯云数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论