现状(自下而上)
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语句尽量不要使用某一数据库提供的特殊语法,会导致语句迁移之后的可用性降低。
 
 
 
 
参考链接

最新文章

  1. iOS -- 给model赋值时走了[self setValuesForKeysWithDictionary:dic]不走setvalue: forked:
  2. 各大OJ
  3. Ensemble Learning 之 Adaboost
  4. iOS 原生地图(MapKit、MKMapView)轨迹渐变
  5. Drawable和Bitmap转换
  6. LRU在MySQL缓存池的实现
  7. awk简明教程
  8. Hash table in PowerShell
  9. Linux下find命令具体解释
  10. sql server 高可用故障转移(3)
  11. Failed to load package MonoAndroidDesignerPackage
  12. WCF发布到IIS 7.0,并以https访问
  13. 从零开始学习html(七)CSS样式基本知识
  14. dubbo 学习资料
  15. Python 字典的嵌套
  16. ios 利用UIScrollView实现图片缩放
  17. ECMA-Script5
  18. Vue项目上线后刷新报错404问题(apache,nginx,tomcat)
  19. RBAC (基于角色的访问控制)
  20. Address already in use: JVM_Bind,tomcat启动异常

热门文章

  1. 精尽Spring Boot源码分析 - 内嵌Tomcat容器的实现
  2. C#调用JAVA(二)调用方法
  3. lms框架服务注册中心
  4. 12.10、elk实用案例
  5. bootstrap validate 验证插件 动态添加和动态删除验证项
  6. 『心善渊』Selenium3.0基础 — 18、使用Selenium操作浏览器的弹窗
  7. LeSS 的诞生(一):大规模团队该何去何从
  8. Gym 101147G 第二类斯特林数
  9. Linux alias 或者 unalias 设置别名
  10. mysql导入脚本