oracle移植mysql方案_系统从MySQL迁移至ORACLE实现方案
一、数据库脚本迁移
1、数据结构同步
打开Navicat Premium,点击菜单【工具】-【数据传输】,在弹出的对话框中选择对应的源库和目标库。
为使用方便,请在TAB页【高级】中,将【转换对象名为】勾选,并选择【大写】。设置完成后点击【开始】按钮即可进行数据脚本同步。
注意:数据传输过程中,可能会因为MySQL数据库设计的不规范导致出现异常,请及时修正源库对应的数据结构。Oracle中标识符的最大长度是30个字符,标识符包括但不限于表名、字段名、视图名、序列名、主键。
2、表结构调整
Navicat Premium数据同步时,不对列长度进行精确设置(保留默认长度),故需要在数据结构同步完成以后再将Oracle数据库脚本导出并对列的长度进行精确的设置。
注意:Oracle数据库表中有数据时不能直接修改表结构,所以建议导出数据库脚本,在脚本中进行修改。另外,Navicat Premium导出的SQL包含前缀和双引号,请在导出后去除。
3、添加sequence
Oracle表的主键自增是通过sequence实现的,故需要为表自增主键添加sequence,sequence创建示例如下:
CREATE SEQUENCE SEQ_ACCOUNT_INFO INCREMENT BY 1 START WITH 1 minvalue 1 NOMAXVALUE NOCACHE;
二、系统配置调整
1、pom文件中添加Oracle数据库驱动
com.oracle
ojdbc14
10.2.0.4.0
system
${project_basedir}/lib/ojdbc14-10.2.0.4.0.jar
2、调整数据源
jdbc.properties配置调整
db.driverClassName=oracle.jdbc.driver.OracleDriver
db.url=jdbc:oracle:thin:@10.10.1.107:1521:orcl
db.username=root
db.password=root
db.mapper=classpath:mybatis/oracle/*Mapper.xml
validationQuery=SELECT 'x' FROM DUAL
三、Java后台调整
1、 Mapper文件中,自增主键调整为Oracle的sequence方式
原MySQL的方式如下:
SELECT LAST_INSERT_ID()
Oracle的sequence方式如下:
SELECT SEQ_ACCOUNT_INFO.NEXTVAL FROM DUAL
2、日期(时间)类型调整
日期格式化
MySQL数据库通过DATE_FORMAT(date,format)函数将日期格式化为字符串,其中format可用的标识符有:%Y(年)、%m(月)、%H(小时)、%i(分钟)、%S(秒)等等,常用的格式有'%Y-%m-%d'、'%H:%i:%S'、'%Y%m'等。
Oracle数据库使用TO_CHAR(date,format)函数对日期进行格式化,如对当前日期进行格式化:TO_CHAR(SYSDATE,'yyyy-mm-dd HH:mi:ss')。
另外,MySQL是弱类型的数据类型,在字符串转日期(其他类型也一样)时只要符合日期格式不需要进行类型转换,但是Oracle必须进行类型转换。Oracle提供了TO_DATE(date_str,'yyyy-mm-dd hh24:mi:ss')函数将字符串转换为日期类型。
取当前日期的函数
MySQL常用取当前日期(时间)的函数有:NOW()、SYSDATE()、CURDATE()、CURTIME()等。Oracle中使用SYSDATE。
计算时间差
MySQL数据库使用TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)函数来计算时差,其中interval可以是YEAR(年)、QUARTER(季度)、MONTH(月)、WEEK(星期)、DAY(天)、HOUR(小时)、MINUTE(分钟)、SECOND(秒) 、FRAC_SECOND(毫秒),如计算2017年五一劳动节距今的天数:
SELECT TIMESTAMPDIFF(day,'2017-05-01',now());
MySQL还有很多计算时间差的函数,如DATEDIFF(date1,date2)等。
Oracle数据库直接通过两日期相减来实现时间差的计算,如计算2017年五一劳动节距今的天数:
SELECT FLOOR(SYSDATE-TO_DATE('2017-5-1','yyyy-mm-dd')) FROM DUAL ;
计算2017年五一距今的小时数:
SELECT FLOOR(TO_NUMBER(SYSDATE-TO_DATE('2017-5-1 00:00:00','yyyy-mm-dd hh24:mi:ss'))*24) FROM DUAL ;
3、模糊查询
MySQL使用
concat('%',#{keywords},'%')
Oracle中使用
'%'||#{keywords}||'%'
四、 常见问题
1、去除重复列,防止在oracle分页查询时报错:ORA-00918: 未明确定义列。
2、出现ORA-00942: 表或视图不存在错误,可能是数据库表名错误,也可能是没有权限或者账号不存在等等。
3、MySQL 字符串支持单引号和双引号,但Oracle只支持单引号。
4、Oracle里进行分组统计时,非聚合列必须全部放在group by 子句中。如果还涉及到排序,排序的列也必须在group by 子句中。MySQL 5.7之前对分组统计没有强制约束,5.7之后 和oracle遵循相同的标准。
5、不能在Oracle的GROUP BY子句中使用列别名。
6、Oracle 中别名不能加单引号。
7、MySQL 的批量插入、更新转换为 Oracle 的批量插入、更新时需加上begin end
BEGIN
statement
; END ;
oracle移植mysql方案_系统从MySQL迁移至ORACLE实现方案相关推荐
- mysql 上云迁移方案_数据库上云迁移方案
自建业务数据库正在面临的挑战 1. 有活动上线,压力突增,数据库却来不及扩容了: 2. 采用读写分离,刚更新的数据,却查询不到了: 3. 数据的主从复制经常中断: 4. 多台应用服务器用同一台数据库, ...
- oracle锁表查询_专业解决 MySQL 查询速度慢与性能差
Java识堂,一个高原创,高收藏,有干货的微信公众号,一起成长,一起进步,欢迎关注 什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS: QueriesPerSe ...
- 阿里高可用mysql搭建方案_阿里云环境迁移记录 - MYSQL高可用搭建
MYSQL高可用方案主要分为两大类,一类是前置管理,一类是后置管理. 前置管理的思想是利用各种前置管理工具,动态切换或者分发请求到不同的实例并切换master,如keepalived.MHA.pack ...
- Alibaba之MySQL宝典_阿里巴巴内部 MySQL宝典 意外流出!极致经典,堪称数据库的天花板...
MySQL 是一个关系型数据库,使用 SQL 语言进行增删改查操作,目前属于 Oracle 旗下的产品. MySQL 数据库开源免费,能够跨平台,支持分布式,性能也不错,可以和 PHP.Java 等 ...
- 怎么重启网站mysql数据库_如何重启MySQL数据库服务
服务器的启动和停止 停止:net stop mysql 启动:net start mysql -------------------------mysql mode相关问题-------------- ...
- mysql猎豹_猎豹网校MySQL数据库
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 猎豹网校MySQL数据库 链接:http://pan.baidu.com/s/1i3wyPjn 密码:qxhm 教程目录 第1章 了解SQL 1.1 数据 ...
- 无法为您重置MySQL密码_无法重置MySQL的root密码
问题描述 我需要重置本地mysql安装的root密码,但不会让我.我已经试过了: $ sudo /etc/init.d/mysql stop * Stopping MySQL database ser ...
- mysql关系数据库_关系型数据库MySql简介
什么是关系型数据库? 数据库就是用来存储数据的仓库,是一种特殊的文件. 根据存储的数据不同,划分为关系型数据库和非关系型数据库. 关系型数据库就是指 建立在关系模型基础上的数据库,通俗来讲这种数据库就 ...
- 黑马程序员mysql答案_干货|MySQL常见问题及答案汇总
MySQL是一种开放源代码的关系型数据库管理系统.数据库按照数据结构来组织.存储和管理数据的仓库.每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据. 在学习MySQ ...
最新文章
- android 当前置顶的控件,Android利用RecyclerView实现全选、置顶和拖拽功能示例
- 三步更改win7开机密码
- Winform中自定义ZedGraph右键复制成功后的提示
- 走近分形与混沌(part12)--随机过程与混沌
- 通过简单的Spring方面摆脱null参数
- Java中key可以重复的Map集合:IdentityHashMap
- 聊聊RocksDB Compact
- java 取pdf 文本域_使用PDFBox获取文本行的位置
- Java学习笔记(13)——Java注释
- flex发布的release程序要配release的Flash Player,速度飞快!如果有一方是debug版本的,速度就降下来了,要注意!...
- R实践 第二篇:创建数据集
- PhotoScissors for Mac破解版(抠图软件)
- [css]画圆形标签
- python暑假培训班
- 从入门到精通我是这样学习算法的
- 华为系统gps定位服务器地址,很多手机的定位功能都叫GPS,为什么偏偏华为手机的定位功能叫“位置信息”?...
- 逻辑漏洞之无密码登录(vlcms)
- 程序员同事表演加班一个月后,我离职了
- Java经典面试题 带答案(三)
- 攻击篇--远程控制(一)生成被控端与主控端
热门文章
- linux ntp同步日志,Linux使用入门教程之Rsyslog日志管理、NTP和Rsync备份同步
- AI圈内卷?天池团聚请来专家集体“问诊”
- 如何通过Graph+AI的方法打造高精度风控模型?
- 如何更高效地压缩时序数据?基于深度强化学习的探索
- 2020 云原生 7 大趋势预测
- python tkinter 循环显示文本_Python简易音乐播放器
- 荒野乱斗角色设计浅谈
- 剑与远征“超能力”玩家,恶魔瑟可斯上线第1天就被他拉满
- Java多线程精讲(非高并发-授课专用)附synchronized
- 零基础学Python(第四章 变量类型)