现状(自下而上)
1.Oracle数据库,表,序列,存储过程,视图
2.ibatis框架,映射xml中的sql语句
3.应用中通过指定字符串的形式获取查询结果
 
目标
1.置换数据库为PG数据库,迁移数据,表,序列,存储过程,视图
2.修改xml中的sql语句适配PG库语法
3.应用层做出适配性的调整
方案
数据库层
 
a.数据库层,使用ORA2PG实现表,序列,存储过程以及视图的迁移,使用阿里的dataworks做数据迁移。
 
a.1 dataworks迁移数据时注意事项
a.1.1 迁移数据到目标库的时候会出现“获取表:public.XXX的字段的元信息时失败. 请联系 DBA 核查该库、表信息. ”这种报错,尝试多次就可以了成功将数据入库了。
a.1.2 迁移数据的时候需要将分区键设置为空,去O的原则是先做平移,然后逐步使用对应的特性。
 
a.2 ora2pg工具导出表注意事项
a.2.1 核对表数量是否一致,在实际操作过程中发现凡是表名称为*_TODAY的表都没有被导出,这里需要注意,或采取遍历的方式逐个核对导出的表(导出脚本中create数量)和源数据库中的表数量(通过查询 USER_TABLES 表中用户所有表数量)是否一致。
a.2.2 注意导出的表结构中对于number的数据类型的转换,工具默认会将其转换为对应的bigint,float等等,需要将以下设置调整后就可以避免这类问题:
PG_NUMERIC_TYPE    0
PG_INTEGER_TYPE    0
DEFAULT_NUMERIC numeric
 
SQL语句层
 
b.xml调整需要注意的点主要是Oracle支持的语法但是PG不支持的语法需要做出调整。
b.1 不同数据类型通过string进行的比较运算PG是不支持的,需要针对语句进行调整。
b.2 dual表是Oracle特有的伪表,这个表是PG库所没有的,对应的sql中只需要去除dual表即可。
b.3 Oracle中涉及到的系统函数转换为PG中对应函数,sysdate转换为current_timestamp
b.4 序列调用方式调整,从序列名.nextval改为nextval(序列名)
 
应用层
c.应用层在获取数据以及驱动等等位置需要做出对应更改。
c.1 驱动以及数据库相关连接配置的调整
c.2 连接有效性验证sql修改
c.3 应用中通过map获取结果集中的列出现大小写不统一的问题,修改对应的SQL设置对应的列别名
 
技术总结
1.项目立项之初就需要考虑项目各个层面的横向迁移适配性,这个项目虽然使用的是ibatis相比使用hibernate的项目更灵活,但是相对应的横向迁移能力也就受到了限制,在迁移的过程中很是痛苦。
2.SQL语句尽量不要使用某一数据库提供的特殊语法,会导致语句迁移之后的可用性降低。
 
 
 
 
参考链接

项目去O实践的更多相关文章

  1. Immutable.js 以及在 react+redux 项目中的实践

    来自一位美团大牛的分享,相信可以帮助到你. 原文链接:https://juejin.im/post/5948985ea0bb9f006bed7472?utm_source=tuicool&ut ...

  2. TypeScript在react项目中的实践

    前段时间有写过一个TypeScript在node项目中的实践. 在里边有解释了为什么要使用TS,以及在Node中的一个项目结构是怎样的. 但是那仅仅是一个纯接口项目,碰巧赶上近期的另一个项目重构也由我 ...

  3. TypeScript在node项目中的实践

    TypeScript在node项目中的实践 TypeScript可以理解为是JavaScript的一个超集,也就是说涵盖了所有JavaScript的功能,并在之上有着自己独特的语法.最近的一个新项目开 ...

  4. Golang项目的测试实践

    Golang项目的测试实践 最近有一个项目,链路涉及了4个服务.最核心的是一个配时服务.要如何对这个项目进行测试,保证输出质量,是最近思考和实践的重点.这篇就说下最近这个实践的过程总结. 测试金字塔 ...

  5. 【Vuejs】335-(超全) Vue 项目性能优化实践指南

    点击上方"前端自习课"关注,学习起来~ 前言 Vue 框架通过数据双向绑定和虚拟 DOM 技术,帮我们处理了前端开发中最脏最累的 DOM 操作部分, 我们不再需要去考虑如何操作 D ...

  6. 前端项目模块化的实践3:使用 TypeScript 的收益

    以下是关于前端项目模块化的实践,包含以下内容: 搭建 NPM 私有仓库管理源码及依赖: 使用 Webpack 打包基础设施代码: 使用 TypeScript 编写可靠类库 使用 TypeScript ...

  7. 前端项目模块化的实践2:使用 Webpack 打包基础设施代码

    以下是关于前端项目模块化的实践,包含以下内容: 搭建 NPM 私有仓库管理源码及依赖: 使用 Webpack 打包基础设施代码: 使用 TypeScript 编写可靠类库 使用 TypeScript ...

  8. 前端项目模块化的实践1:搭建 NPM 私有仓库管理源码及依赖

    以下是关于前端项目模块化的实践,包含以下内容: 搭建 NPM 私有仓库管理源码及依赖: 使用 Webpack 打包基础设施代码: 使用 TypeScript 编写可靠类库 使用 TypeScript ...

  9. 关于idea跳过错误编译的理解, 跳过报错的代码启动项目去debug测试其他正常的代码

    关于idea跳过错误编译的理解 2018年07月13日 19:06:32 weixin_39669410 阅读数 1296   其实idea使用eclipse编译器可以实现跳过报错的代码启动项目去de ...

随机推荐

  1. 【模拟7.27】单(liu_runda学长的神题)

    好像用到一些高中数学知识...... 满分做法: case 0:已知a数组求b数组 因为是树状结构,设当前节点x 儿子to 我们从任意一点出发可求出b[root]来,之后我们可以通过寻找两两相连节点的 ...

  2. 源码学习之noop

    /** * Perform no operation. * Stubbing args to make Flow happy without leaving useless transpiled co ...

  3. Java的一些细节语法(不定时更新。。。)

    可信考试Java相关题目 目录 可信考试Java相关题目 ConcurrentHashMap不允许key为null,但是HashMap是可以的.TreeMap key不支持null. 以下代码里面,请 ...

  4. 基于ABP落地领域驱动设计-00.目录和小结

    <实现领域驱动设计> -- 基于 ABP Framework 实现领域驱动设计实用指南 翻译缘由 自 ABP vNext 1.0 开始学习和使用该框架,被其优雅的设计和实现吸引,适逢 AB ...

  5. Go语言中底层数组和切片的关系以及数组扩容规则

    Go语言中底层数组和切片的关系以及数组扩容规则 demo package main import ( "fmt" ) func main() { // 声明一个底层数组,长度为10 ...

  6. 【Azure 事件中心】在Service Bus Explorer工具种查看到EventHub数据在分区中的各种属性问题

    问题描述 通过Service Bus Explorer工具,查看到Event Hub的属性值,从而产生的问题及讨论: Size in Bytes:   这个是表示当前分区可以存储的最大字节数吗? La ...

  7. excel VBA使用教程

    1.选择文件--选项 2.选择自定义功能区--开发工具的√勾上

  8. 33、jQuery介绍

    33.1.jQuery是什么: (1)jQuery由John Resig创建,至今已吸引了来自世界各地的众多 javascript 高手加入其team. (2)jQuery是继prototype之后又 ...

  9. CRM系统不仅给企业带来更多收益而且提升销售效率

    将客户信息记录在CRM系统的数据库中,同时共享沟通数据给售前.售后.SDR等上下游,客户资源还能够按照分配规则分配给适合的销售人员,帮助更快成单.全面使用CRM系统会给企业带来更多业绩. 1.全方位客 ...

  10. Mysql/Oracle/达梦中数据字典表

    在mysql中,数据字典表存放在information_schema库中,,对应的两张表,分别是TABLES,和COLUMNS. 在oracle中有表空间(即用户空间或者库)和模式的概念.模式和表空间 ...