1、阿里云智能事业群杜贵彬Oracle兼容性需求兼容性需求 业界需求 公有云已经进入了深水区,需要更多地深入线下的存储和计算场景 当今政治环境下,迫切的去O需求 阿里兼容性需求向导 公有云和线下业务积累 ADAM兼容性筛选目录目录 兼容性的考虑 架构的兼容性 Oracle迁往POLARDB的考量 语法兼容性的实现剖析兼容性兼容性的考虑的考虑 工具和生态工具和生态:兼容DBA、开发者等相关人员的使用习惯;SQL语法语法:对应用而言需要改造成本接近于零;性能性能:避免性能退化;成本成本:可以将成本做到极低;Architecture of POLARDBRDMA PolarStore/SANParser
2、OptimizerPLPGSQLExtensionPostgreSQLpgAdminpsqlDMSlibpqjdbcSDKClientRDMA ASMParserOptimizerPLSQLPackageOracleOEMsqlplusOCIojdbcSDKClient操作界面应用开发架构兼容Highly Compatible with Oracle安全可靠DMS兼容性评估性能评估ADAMEvaluationTestingMigrationCost兼容性测试性能压测真实业务SQL测试Benchmark全量迁移增量迁移数据回流DTS存储按使用量计费计算和存储可弹性扩展ElasticityData
3、base Migration Cycle Management生命周期管理账户管理,备份管理SQL审计,日志管理DMS&ConsolePerformance慢SQL分析全链路诊断SQL Timing分析Performance InsightADAM数据库和应用迁移(Advanced Database&Application Migration,以下简称ADAM),是阿里云结合阿里巴巴多年内部业务系统数据库和应用异构迁移的经验,自主研发的、迁移ORACLE数据库和应用上云的企业级迁云产品和解决方案,能帮助企业最大限度降低ORACLE数据库和应用迁移上云的风险、技术难度和实施周期。评估系统改造系统
4、迁移系统画像系统客观ORACLE数据库画像自动发现业务系统架构,确定边界识别关键用法评估技术可行性评估实施工作量自动生成解决方案自动兼容性转换自动规格计算结构、数据迁移校验、治理离线+在线、可扩展SQL翻译工具数据库改造工具应用改造工具PLSQL2JAVA改造工具采集系统采集Oracle采集应用安全、脱敏语法兼容性实现方法的选型原则语法兼容性实现方法的选型原则 语法优先 插件优先 Rewrite优先 慎重增加执行算子 兼顾新旧版本的兼容语法兼容性的实现方法语法兼容性的实现方法 PL+Extension 内核修改 Rewrite 增加执行算子 内核修改+Extension 控制流程PL+Exte
5、nsionAnyData创建方法创建方法使用方式使用方式CREATE TYPE SYS.AnyData AS OBJECT(dtTypeName VARCHAR2,dtValue CLOB,/*获取数据类型函数*/MEMBER FUNCTION GetTypeName(self IN AnyData)RETURN VARCHAR2 DETERMINISTIC,/*INT类型到AnyData类型的转换函数*/STATIC FUNCTION ConvertInteger(num IN INTEGER)RETURN AnyData,/*访问函数 for AnyData*/MEMBER FUNCTIO
6、N AccessInteger(self IN AnyData)RETURN INTEGER,/*其他类型的转换函数、访问函数*/);CREATE EXTENSION polar_anydata;CREATE TABLE t1(c1 SYS.AnyData);INSERT INTO t1 VALUES(AnyData.ConvertInteger(12);INSERT INTO t1 VALUES(AnyData.ConvertVarchar(Test AnyData);SELECT SYS.AnyData.GetTypeName(c1)typename,(CASE SYS.AnyData.G
7、etTypeName(c1)WHEN SYS.INTEGER THEN SYS.AnyData.AccessNumber(c1):varchar2 WHEN SYS.VARCHAR THEN SYS.AnyData.AccessVarchar(c1):varchar2END)ctFROM t1;RewritePivotselect*from SalesOrder pivot(sum(sales)for product in(A,B);RewritePivotImp_cols,-for each agg_func(CASE WHEN for_col=in_val THEN agg_param E
8、ND)-未出现在Pivot clause中的列Imp_cols,增加执行算子增加执行算子UnPivotSELECT*FROM Pivot_SalesOrderUNPIVOT(total_sales FOR product IN(A as P_A,B as P_B,C as P_C);增加执行算子增加执行算子UnPivotSELECT*FROM pivot_SalesOrderUNPIVOT(total_sales FOR product IN(a as P_A,B as P_B,C as P_C);select s.shop,t.*from pivot_salesorder s cross j
9、oin lateral(values (P_A,s.a),(P_B,s.b),(P_C,s.c)as t(product,total_sales)where t.total_sales is not null;HighCostRewrite+ExtensionConnect By98 100 102 101 103 104 SELECT*FROM employeeSTART WITH ENO=100CONNECT BY PRIOR eno=mno;Replace104ERROR:CONNECT BY loop in user data.Rewrite+ExtensionConnect By,A
10、RRAY AS recursionpath,Array_append(prior.recursionpath,)AS recursionpatrecursiveRewrite+ExtensionConnect ByJoinquals:prior.=ANDpolar_cyclechecker_notice(=ANY(prior.recursionpath)-EXTENSION:CREATE OR REPLACE FUNCTION pg_catalog.polar_cyclechecker_noticer(need_report BOOLEAN)RETURNS boolean AS$BEGIN I
11、F need_report THEN RAISE CONNECT BY loop in user data.;END IF;RETURN TRUE;END;$LANGUAGE plpgsql IMMUTABLE;控制流程控制流程SavePoint in procedure /PG_TRY();/foreach(s,stmts)/begin /exec_stmt_commit /exec_stmts;/PL stmt /exec_stmt_rollback /(1)exec_stmt;exec_stmt_savepoint (2)spl_exec_function /exec_stmt_rollback_to /PG_CATCH();exec_stmt_other exec_stmt_block;/exception exec_stmts;PG_RE_THROW();(1)执行失败不能直接回滚,有SavePoint的情况下需要到Exception部分处理。(2)SavePoint语句开启的子事务,语句级事务开启时,注意不能提交。