项目去O实践

现状(自下而上) 1.Oracle数据库,表,序列,存储过程,视图 2.ibatis框架,映射xml中的sql语句 3.应用中通过指定字符串的形式获取查询结果   目标 1.置换数据库为PG数据库,迁移数据,表,序列,存储过程,视图 2.修改xml中的sql语句适配PG库语法 3.应用层做出适配性的调整 方案 项目去O实践 数据库层   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   项目去O实践 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(序列名)   项目去O实践 应用层 c.应用层在获取数据以及驱动等等位置需要做出对应更改。 c.1 驱动以及数据库相关连接配置的调整 c.2 连接有效性验证sql修改 c.3 应用中通过map获取结果集中的列出现大小写不统一的问题,修改对应的SQL设置对应的列别名   技术总结 1.项目立项之初就需要考虑项目各个层面的横向迁移适配性,这个项目虽然使用的是ibatis相比使用hibernate的项目更灵活,但是相对应的横向迁移能力也就受到了限制,在迁移的过程中很是痛苦。 2.SQL语句尽量不要使用某一数据库提供的特殊语法,会导致语句迁移之后的可用性降低。         参考链接 【1】https://help.aliyun.com/document_detail/124685.html?spm=a2c4g.11186623.6.673.52c43baf8uNQJw
上一篇:【大页内存】Oracle数据库配置大页内存


下一篇:2021-09-05 Windows环境下 postgresql12 增量备份及恢复实践