现状(自下而上)
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. 【模拟8.01】big(trie树)

    一道trie树的好题 首先我们发现后手对x的操作就是将x左移一位,溢出位在末尾补全 那么我们也可以理解为现将初值进行该操作,再将前i个元素异或和进行操作,与上等同. 那么我们等于转化了问题:     ...

  2. Java基础篇(JVM)——类加载机制

    这是Java基础篇(JVM)的第二篇文章,紧接着上一篇字节码详解,这篇我们来详解Java的类加载机制,也就是如何把字节码代表的类信息加载进入内存中. 我们知道,不管是根据类新建对象,还是直接使用类变量 ...

  3. C、C++、python、Java、php、C#六种编程语言大PK 哪个好学习?

    作为程序员吃饭的工具,编程语言之间也形成了某种鄙视链,各大论坛里弥漫着剑拔弩张的气氛,众口难调.也难怪有很多初学者会有疑惑,为什么会有这么多编程语言,我到底应该学什么语言? 其实各种语言都各有千秋.接 ...

  4. release模式下打断点调试 配置选项

    最近调试一个离职的同事留下的工程,DEBUG模式下顺利,RELEASE的时候就崩溃了,显示为"帧不在模块中"--简直一头雾水 于是我修改配置,为了能够在Release模式中打断点调 ...

  5. 大数据 | 分布式文件系统 HDFS

    HDFS全称Hadoop Distributed File System,看名字就知道是Hadoop生态的一个组件,它是一个分布式文件系统. 它的出现解决了独立机器存储大数据集的压力,它将数据集进行切 ...

  6. AcWing 1143. 联络员

    Tyvj已经一岁了,网站也由最初的几个用户增加到了上万个用户,随着Tyvj网站的逐步壮大,管理员的数目也越来越多,现在你身为Tyvj管理层的联络员,希望你找到一些通信渠道,使得管理员两两都可以联络(直 ...

  7. JavaScript模块化的演变

    自执行函数(IIFE): 作用:马上执行这个函数,自执行函数(IIFE),不易读 (function(x){console.log(x);})(3); 易读版本: (function(x){ retu ...

  8. 常见链表操作-链表中环的检测(JAVA实现)

    问题如何检测一个单链表中是否有环,例如下图的例子. 解决思路1:快慢指针法这是最常见的方法.思路就是有两个指针P1和P2,同时从头结点开始往下遍历链表中的所有节点. P1是慢指针,一次遍历一个节点.P ...

  9. 大数据-Hadoop 本地运行模式

    Grep案例 1. 创建在hadoop-2.7.2文件下面创建一个input文件夹 [atguigu@hadoop101 hadoop-2.7.2]$ mkdir input 2. 将Hadoop的x ...

  10. webpack(10)webpack-dev-server搭建本地服务器

    前言 当我们使用webpack打包时,发现每次更新了一点代码,都需要重新打包,这样很麻烦,我们希望本地能搭建一个服务器,然后写入新的代码能够自动检测出来,这时候就需要用到webpack-dev-ser ...