日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

oracle移植mysql方案_系统从MySQL迁移至ORACLE实现方案

發布時間:2024/8/1 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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实现方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。