TDSQL兼容能力说明和迁移实践 数据库国产化实践 主讲人:黄琳 腾讯云数据库产品专家 目录 02 TDSQL产品迁移实践 01 TDSQL产品兼容能力说明 01 TDSQL产品兼容能力说明 重点阐述Oracle兼容能力 TDSQL产品概述 TDSQL是腾讯自主研发的一款国产数据库产品,同时支持单机、集中式主备和分布式部署模式,具备强一致、高可用、高SQL兼容度、高扩展、高性 能、高安全能力,支持完整分布式事务ACID能力,同时提供智能DBA、自动化运营、监控告警等配套设施,为客户提供完整的国产数据库解决方案。 TDSQL同一管控平台同时支持多架构部署形态 • • • 分布式 无共享分布式MPP架构 水平扩缩容 高并发/海量数据 • 集中式 具有主备数据复制能力,具有 高可用和高可靠的架构能力, •支持一主多备 单机版 •单台可部署 •基础管控能力 •管控能力可开关/插拔 一体化管控平台 一体化管控平台 TDSQL语法兼容性概述 TDSQL语法丰富,满足SQL2011标准,全面兼容MySQL语法、PostgreSQL语法;高度兼容Oracle语法和功能,同时提供配套迁移工具能帮助客户业务从传统MySQL/PostgreSQL/Oracle等数据库平滑地迁移到TDSQL数据库;TDSQL提供优越的性能,实现数据库自主可控。同一数据库集群同时支持不同语法兼容度的内核引擎,便于客户不同语法生态的业务应用共集群管理;同时同一内核引擎支持数据库级别的多语法模式。 TDSQL MySQL语法 Oracle语法 全面兼容平滑替换 语法兼容功能兼容架构升级 性能追平甚至超越 MySQL5.7-8.0 高度兼容平滑替换少量改造 Oracle8i-19c PostgreSQL语法 全面兼容 平滑替换 PG15.8以前 以内核兼容为基础,打造从驱动、工具、内核三个层面的Oracle兼容能力 驱动:JDBC、ODBC、OCI、Pro*C 工具 内核:Oracle语法兼容、Oracle功能兼容 TDSQLMigrationToolkits (评估、迁移、验证) 资源:底层硬件和操作系统适配 驱动层面兼容 内核层面兼容 工具层面兼容 •JDBC配合内核能力做用法兼容 •OCI对oracle接口用法做应用层兼容 •Pro*C在嵌入式SQL做代码层兼容 •对内置数据类型、SQL语法、内置系统函数、 PL/SQL等语法层面兼容 •对分区表、递归查询、DBlink、伪列等功能层面兼容 •异构数据库静态对象、应用SQL差异性评估 •异构迁移自动改造 •Oracle数据迁移和数据同步 TDSQLOracle语法兼容说明 TDSQL兼容大量的Oracle语法,包括数据类型、SQL语法、PL/SQL语法、系统包、视图、函数等等,提供配套兼容的驱动程序,同时提供自研迁移工具,保证业务从Oracle数据库迁移到TDSQL数据库平滑,业务应用尽可能平滑低成本迁移。全量兼容度提升85%以上,PL/SQL高达90%以上,金融行业兼容度高达98%以上。 词法语法Oracle视图元数据 存储 元数据 事务 元数据 词法语法PG视图元数据 TDSQL支持数据库级别Oracle/PG语法双模式 01 语法差异隔离 Oracle兼容语法与PG语法有大量差异,包括空值规则、大小写规则、SQL语法、PL/SQL 能力、系统视图、高级包等。TDSQL通过语法层/元数据层/视图层隔离减少系统复杂度。 02 一套引擎底层 在事务、行列存储、MPP框架、计算引擎、优化器等底层框架层面,则基本完整复用,通用的对PG/Oracle不同语法方言进行支持 03 用户灵活配置 用户可以在同一套集群里创建不同PG/Oracle语法模式的database,底层通过 PG/Oracle模式各自的模版库进行创建。 TDSQLOracle语法兼容-数据类型兼容 在TDSQL内核里,增加了Oracle数据类型,并对绝大多数类型做了兼容,保证数据可以平滑迁移: 数值类型 NUMBER、FLOAT、BINARY_FLOAT、BINARY_DOUBLE 字符类型 CHAR、NCHAR、VARCHAR2、 NVARCHAR2、LONG 大对象类型 BLOB、CLOB、NCLOB TDSQL 时间类型 DATE、TIMESTAMP、TIMESTAMPWITHTIMEZONE、TIMESTAMPWITHLOCALTIMEZONE、INTERVAL等 其他 如RAW、LONGRAW、BFILE、ROWID、UROWID TDSQLOracle语法兼容-PL/SQL兼容 在TDSQL内核里,支持PL/SQL语法高度兼容,90%以上兼容度,可以帮助客户复杂的存储过程和自定义包快速平滑迁移 存储过程、函数的创建函数、存储过程支持OUT出参 0% TDSQLPL/SQL兼容性 SQLStatementsforStoredPL/SQLUnits LanguageElementsErrorHandling PackagesSubprogramsDynamicSQLStaticSQL CollectionsandRecordsControlStatements DataTypes 0 50 100 150 200 250 300 350 400 450 TDSQLPL/SQL兼容点 Oracle全量PL/SQL兼容点 存储过程、函数支持 COMMIT、ROLLBACK事 务控制 支持存储过程、函数支持 SAVEPOINT 兼容游标属性支持:ISOPEN、 FOUND、NOTFOUND、 ROWCOUNT TDSQL 支持集合类型、包 其他PL语句支持,如:BULKCOLLECT、语句LABEL 支持预定义的系统包:DBMS_OUTPUT、DBMS_ASSERT、DBMS_JOG、 DBMS_LOB、存储过程调试包 DBMS_DEBUG等 TDSQLOracle语法兼容-存储过程/函数兼容 兼容差异示例 序号 Oracle PostgreSQL TDSQL 1 不带参数的存储过程不需要括号 需要括号 兼容Oracle/PG 2 is开始 as开始 兼容Oracle/PG 3 内容不需要$$包围 存储过程body体使用$$ 兼容Oracle/PG 4 支持”end存储过程名称“结束 不支持使用”end存储过程名称“结束 兼容Oracle/PG 5 使用“/“结束定义 使用languageplpgsql 兼容Oracle/PG 6 定义变量不需要declare声明开始 定义变量需要declare声明开始 兼容Oracle/PG 7 支持OUT返回值 存储过程不支持,使用INOUT来代替 兼容Oracle/PG 8 直接使用存储过程名字调用 存储过程中调用另一个存储过程需要使用CALL 兼容Oracle/PG 9 任意statement、block位置可以添加label 只能在循环前面加label 兼容Oracle/PG TDSQLOracle语法兼容-PACKAG语法兼容 PACKAGE支持 支持公共、私有包变量定义 支持包定义自定义类型 支持包初始化模块 包初始化块等 TDSQLOracle语法兼容-SQL兼容 在TDSQL内核里,高度兼容Oracle主流使用的SQL语法,帮助应用代码平滑迁移,重点包括: MERGEINTO、CONNECTBY、INSERTALL/FIRST等 兼容对象名大小写 兼容关键字、字段名别名、同义词等 各种伪列支持:ROWNUM、CONNECTBY相关伪列 如:LEVEL等 TDSQL FORCEVIEW、PIVOT/UNPIVOT子句、OFFSET…FETCH 子句等 支持HINT功能 DBLINK能力,TDSQL<->Oracle系统函数、系统视图支持 兼容Oracle创建和管理分区表语法,支持 HASH/RANGE/LIST/INTERVAL分区及二级分区 空串与NULL等价 DUAL伪表支持 自治事务 LockExcl(tbl) Deadlockexception 自治事务-running LockShared(tbl) 主事务–suspend TDSQLOracle兼容-自治事务 自治事务 自治事务由主事务启动;自治事务运行 时,主事务挂起 自治事务与启动它的主事务相互独立 冲突 自治事务可以用在存储过程、函数、匿名块以及触发器中 自治事务有自己提交和回滚能力,不影响外部事务 如果自治事务与主事务产生锁冲突,系统启动死锁检测,自治事务报告异常 提供PL/SQLChecker能力,提前编译检查 调用的函数/存储过程传入的参数类型不对 数据库对象不存在数据库对象权限不足 编译检查 提前识别 变量声明中的默认值不合法 不遗留到运行时 变量未定义就使用 变量赋值类型不同且不能转化复杂类型变量使用未定义的属性 TDSQLOracle兼容-JDBC驱动兼容 独立更新维护 是腾讯云独立更新和维护的、商业化的数据库驱动程序 JDBC规范适配 实现了JDBC4.0、JDBC4.1、JDBC4.2规范 适用于TDSQLPG数据库所有版本 JAVA语言适配 基于JAVA6和JAVA8平台编译构建,适配JAVA6、JAVA7、JAVA8及以上平 台使用 数据类型兼容 适配Oracle数据库的DATE、TIMESTAMP、VARCHAR2、 NVARCHAR2、ROWID等基本类型 兼容Oracle大对象CLOB、BLOB的使用方式,支持CLOB、BLOB对象的读写场景 兼容Oracle,支持INT字段在JDBC映射为BigDecimal类型 语法层面兼容 支持OracleJDBC驱动的:xxx绑定变量写法 兼容Oracle,支持SQL语句中不配对的块注释 JDBC appcode javaapp oracle javaapp TDSQL-JDBC appcode TDSQL 兼容Oracle,支持SQL语句中的中文括号、中文逗号、全角空格等 存储过程/函数兼容 支持Oracle方式创建存储过程/函数等操作 兼容Oracle,支持[CALLproc()]方式调用存储过程,支持[?=CALLfunc()] 方式调用函数 适配Oracle,在存储过程/函数调用中,允许 NUMBER/INT/FLOAT/VARCHAR等常用字段类型注册为其他类型 提供配套TStudio数据管理工具,并支持存储过程调试能力 支持对象的展现 支持自动补全增加对象搜索功能 TStudio 支持对象便捷的增删改 新增支持Arm架构 支持PL/SQL的调试 提供X86架构Windows、MacOS、Linux安装包 02 TDSQL产品迁移实践 Oracle迁移到TDSQL 迁移工程的挑战和应对 平台化数据库迁移平台 提供简单易用的数据库迁移平台 兼容程度不明确 成本高 工作量大 迁移过程无标准化流程 迁移技术复杂 专业化研发和运维实践 腾讯联合生态多年数据库运维和研发经验工程师的技术积累 自动化覆盖评估迁移改造 平台化的数据库对象和应用评估功能,全面完整的迁移评估报告 标准化异构迁移流程 从评估、改造、迁移、校验等标准化和经检验的迁移流程 TDSQL提供全套迁移解决方案和服务,产品+服务让客户放心 培训赋能方案设计数据迁移应用适配演练投产运维保障 工 作 小 组 SIT测试 信息收集 迁 生产重保 生产割接 迁移演练 PT测试 应用适配 数据迁移 移 流 UAT测试 架构设计 程 架构设计 《数据库信息收集表》 《工作量评估方案》 《集中式、分布式数据库选择》 《TDSQL与Oracle数据库物理资源配比》 《数据库架构设计及资源规划》 《标准数据库部署规划模板》 方案支撑 割接与迁移 《数据库迁移整体方案》 《Oracle数据库迁移流程》 《数据库演练割接方案》 《数据库演练割接计划表》 运维工作 开发规范