---
title: Oracle 到平凯数据库的迁移方案（中）—— 数据库对象改造与应用适配
author: ['']
date: 
summary: 本阶段工作主要集中在应用改造与数据库对象改造上，对于某些异构数据库不兼容的特性，还需通过重构应用的方式来进行迁移。
tags: ['Oracle 迁移','异构数据库迁移']
category: 基础架构解决方案
url: /solution/oracle-migration-2
order: 3
---

## 挑战  

从 Oracle 迁移到平凯数据库的主要流程为：[Oracle 信息收集、分析与工作量评估](/solution/oracle-migration-1)，数据库对象改造与应用适配，数据迁移与生产切换。数据库对象改造与应用适配是整个迁移中工作量最大、成本最高的部分。对于某些年代久远的应用，往往只能借助应用更新换代的契机来进行数据库迁移替换。

## 解决方案  

平凯数据库兼容 MySQL 5.7 的语法与行为，部分不兼容特性，已经在[文档](https://docs.pingcap.com/zh/tidb/stable/mysql-compatibility#%E4%B8%8E-mysql-%E5%85%BC%E5%AE%B9%E6%80%A7%E5%AF%B9%E6%AF%94)中标出，Oracle 到平凯数据库对象改造应用适配中的大部分工作，可以参考 Oracle 到 MySQL 的方式进行迁移改造。  

**一、数据库对象改造**

- Schema 改造：平凯星辰公司提供了 Oracle 表结构转换到平凯数据库表结构的自动化工具，该工具的字段转换规则总结于平凯星辰过往实施的客户项目，用户也可以根据自己的需求对字段转换规则进行配置。需要注意的是，Schama 转换可能是有损的，需要去除平凯数据库不支持的特性，比如有些超出平凯数据库 timestamp 类型最大精度的 Oracle timestamp 记录需要阶段后几位精度，等等。

- 物化视图改造：用实体表替代，数据处理逻辑和数据加载需要在数据库之外实现。

- dblink 改造：用实体表代替，数据通过第三方 CDC 工具（如 DSG、OGG 等）加载。

**二、应用改造**

- SQL 改造： SQL 改造往往是迁移工作量最大的部分，尤其是使用了抽象程度不高的开发框架，比如 Mybatis 等，需要把散落在各处的 SQL 都找到并改写。在功能测试时，也要尽量覆盖到完整的业务逻辑，避免改写出现遗漏。

- Sequence 改造：平凯数据库支持 Sequence 功能，其语法与 Oracle 略有差别。也可通过应用实现分布式序列号生成器。

- Build-in Function & UDF：平凯数据库不支持 UDF，另外平凯数据库和 Oracle 的 Build-in Function 并不完全兼容，对于不兼容的 Build-in Function 和 UDF，需要通过应用逻辑来实现。

- CTE 与树形查询（Start with ... Connect by）：平凯数据库支持 CTE，不支持树形查询，树形查询需要改写为 CTE。

**三、迁移的契机**

如前文所述，由于成本的原因，我们很难通过数据库迁移来推动应用改造，更现实的策略是借助应用的换代升级来进行数据库迁移，应用的升级换代涵盖了应用语言更换、ORM 框架更换、应用功能加强、架构升级（如单机应用向分布式应用演进、微服务化、单元化改造）等。除此之外，平凯数据库所不支持的特性（如存储过程、触发器等）也需要在应用逻辑中实现。
