现状(自下而上)
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. WIN10无法进行Android应用开发真机调试解决方案

    在WIN10操作系统进行ANDROID开发真机调试时,遇到的问题主要归纳一下有以下几点: 一.没有打开"USB调试"项.这点不再赘述: 二.没有安装ADB Interface驱动: ...

  2. 聊聊 Feign 的实现原理

    What is Feign? Feign 是⼀个 HTTP 请求的轻量级客户端框架.通过 接口 + 注解的方式发起 HTTP 请求调用,面向接口编程,而不是像 Java 中通过封装 HTTP 请求报文 ...

  3. 图解 Redis | 不多说了,这就是 RDB 快照

    大家好,我是小林. 虽说 Redis 是内存数据库. 但是它为数据的持久化提供了两个技术,分别是「 AOF 日志和 RDB 快照」. 这两种技术都会用各用一个日志文件来记录信息,但是记录的内容是不同的 ...

  4. 一文说透 Go 语言 HTTP 标准库

    本篇文章来分析一下 Go 语言 HTTP 标准库是如何实现的. 转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/561 ...

  5. js笔记6

    1.函数都有返回值,人为return,返回什么就是什么,否则,他的返回值就是undefined 而方法的本质也是函数,所以也有返回值 document.getElementById()返回的是获取的标 ...

  6. excel VBA使用教程

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

  7. CSS3转换(transform)基本用法介绍

    一个炫酷的网页离不开css的transform.transition.animation三个属性,之前一直没有涉及到这块内容,刚好最近要做一个相关东西,趁此机会好好学一学这三个属性. 一.功能 实现元 ...

  8. POJ 1082 Calendar Game 原来这题有个超简单的规律

    万能的discuss.只需要月份和天数同奇同偶即可,9月30和11月30例外 #include <iostream> #include <cstdio> using names ...

  9. nginx限流模块(防范DDOS攻击)

    Nginx限流模式(防范DDOS攻击) nginx中俩个限流模块: 1.ngx_http_limit_req_module(按请求速率限流) 2.ngx_http_limit_conn_module( ...

  10. html javascript checkbox实现全选功能

    html代码 <input type="checkbox" id="all" />all</input> <input type= ...