您的浏览器禁用了JavaScript(一种计算机语言,用以实现您与网页的交互),请解除该禁用,或者联系我们。 [腾讯]:TDSQL-PG Oracle平滑迁移实践 - 发现报告

TDSQL-PG Oracle平滑迁移实践

信息技术 2024-09-10 李晋钢 腾讯 华仔
报告封面

李晋钢腾讯云数据库高级工程师 2018–至今 国内外数据库百家争鸣 全球数据库因云变革国产数据库百家争鸣 国外数据库产业愈发成熟国产数据库产业初具雏形 商业格局形成,海外数据库主导国内多为理论研究 Oracle是否份额逐年降低被AWS、Azure取代 萨师煊黑板报国防、军工核心领域 国产数据库趋于成熟助力核心业务换“心” MySQL在互联网兴起 Oracle占比最高“IOE”模式占领全球市场 云厂商加入国产DB建设分布式数据库能力领先 生态 以内核兼容为基础,打造从驱动、工具、内核三个层面的Oracle兼容能力 驱动:JDBC、ODBC、OCI、Pro*C 工具:DBbridge/TDSQLMigrationToolkits(评估、迁移、验证) 内核:Oracle语法兼容、Oracle功能兼容 资源:底层硬件和操作系统适配 内核层面兼容 驱动层面兼容 工具层面兼容 üJDBC配合内核能力做用法兼容üOCI对oracle接口用法做应用层兼容üPro*C在嵌入式SQL做代码层兼容 ü对内置数据类型、内置系统函数、PLSQL等语法层面兼容ü对分区表、递归查询、DBlink、伪列等功能层面兼容 ü异构数据库静态对象、应用SQL差异性评估ü异构迁移自动改造üOracle数据迁移和数据同步 在TDSQL-PG内核里,完美兼容绝大多数Oracle类型,相关行为保持一致: Ø数值类型:NUMBER、FLOAT、BINARY_FLOAT、BINARY_DOUBLEØ字符类型:CHAR、NCHAR、VARCHAR2、NVARCHAR2、LONGØ大对象类型:BLOB、CLOB、NCLOBØ时间类型:DATE、TIMESTAMP、INTERVAL等Ø其他如:RAW、LONGRAW、BFILE、ROWID、UROWID 高级语法 数据分区 ØMERGEINTOØCONNECTBYØINSERTALL/FIRSTØPIVOT/UNPIVOTØOFFSET...FETCH Ø分区类型:RANGE、LIST、HASH、组合 Ø分区管理:MERGE/SPLIT分区 Ø分区裁剪、分区索引 Øpartitionwisejoin 系统函数/包 其它 ØDBLINK:元数据管理、分布式ØHINT:访问路径、关联策略、关联顺序、并行执行Ø伪列:ROWNUM、ROWID、CONNECTBY相关伪列 start with connect by语法支持 树的遍历 增加ConnectBy算子,实现递归执行 优化器From表生成两个Path 支持level、connect_by_isleaf、connect_by_root、sys_connect_by_path等 MERGE INTO语法支持 ü支持表、视图、子查询作为目标ü扩展ModifyTable算子功能,增加CMD_MERGEü增强分布式场景下性能ü执行器增加ExecMerge,当tuple与merge条件match时,更新tuple或删除tuple;当tuple与merge条件不match的时候,插入新的tuple 分区表兼容 ü分区类型支持RANGE、LIST、HASH分区,以及这些类型的组合分区ü支持对分区的单独访问,例如SELECT*FROM表PARTITION(子分区)ü支持分区键更新ü新增分区后,自动维护DEFAULT分区ü支持分区表的合并&拆分 PLSQL兼容: Ø存储过程、函数的创建,如:以IS作为PLSQL块定义开始、可以用/作为定义结束Ø存储过程、函数支持COMMIT、ROLLBACK事务控制、自治事务Ø兼容游标属性支持:isopen、found、notfound、rowcountØ函数、存储过程支持OUT出参Ø支持集合类型、包Ø其他PL语句支持,如:BULKCOLLECT、语句LABELØ支持预定义的系统包:dbms_output、dbms_assert、dbms_lob、存储过程调试包dbms_debug等 •WITH FUNCTION语法支持 函数编译后不存入系统表,存入Query结构体中,随着query的清理而被清理 üüWITHFUNCTION中定义的函数,在后面的调用优先级高于其他同名函数,优先查找本Query,没有找到再查系统定义 CREATE[ORREPLACE]PACKAGEpkg_name 支持公有自定义类型支持公有游标支持公有变量&常量支持公有存储函数&存储过程 CREATE[ORREPLACE]PACKAGEBODYpkg_name ü支持私有自定义类型ü支持私有游标ü支持私有变量&常量 自治事务 ü自治事务由主事务启动;自治事务运行时,主事务挂起ü自治事务与启动它的主事务相互独立ü自治事务可以用在存储过程、函数、匿名块以及触发器中ü如果自治事务与主事务产生锁冲突,系统启动死锁检测,自治事务报告异常 •JDBC规范适配 ü实现了JDBC4.0、JDBC4.1、JDBC4.2规范ü适用于PostgreSQL8.2及以上版本ü适用于TDSQL数据库所有版本ü基于JAVA6和JAVA8平台编译构建,适配JAVA6、JAVA7、JAVA8及以上平台使用 •JDBC实现兼容 ü适配Oracle数据库的Date、CLOB、BLOB、VARCHAR2、NVARCHAR2、ROWID类型ü适配Oracle数据库方式创建函数、存储过程等操作 •TDSQLOCI功能兼容 支持了初始化环境、用户连接/断开、多会话、OCI句柄和属性、错误消息处理、SQL执行、事务、DirPath、DateTime、LOB、Number等12大类接口。大约100个函数 •TDSQLPro*C功能兼容 ü支持了变量声明、建立连接、基础SQL语句、预编译语句、游标、简单动态SQL、ANSI动态SQL、错误处理语句等8类场景,约24个语法用法的兼容。 应用兼容评估报告 •对象兼容评估报告 ü应用端发送给源端执行的SQL评估ü评估效果和运行时间、抓取得SQL有关 ü数据库静态对象,例如:表、索引、视图、函数、存储过程、物化视图、触发器、包、数据类型等信息 双轨制运行的收益 Ø增加回退选择Ø增加业务可靠性Ø增加数据保护 双轨制运行成本 Ø流量镜像复杂性Ø数据映射复杂性Ø增加迁移复杂性