Oracle向MySQL遷移


1.下載navicat Premium 

2.選中工具

3.點開工具>數據傳輸(源為傳送數據庫連接名字,數據庫名字,目標為接收數據連接名字,數據庫名字)

 

4.填好點擊下一步后,點擊開始,顯示finally success,表明名倒入成功

5.視圖導入

Oracle視圖和MySQL視圖不同,前者多用視圖嵌套子查詢,而其剛好時MySQL不支持的,需要將視圖子查詢改為視圖嵌套視圖,,如:

  create view v_student as select * from (select * from t_student) t;

       ERROR 1349 (HY000): View's SELECT contains a subquery in the FROM clause

解決方法,view的嵌套:

       create view v_tea_stu as select * from t_student;

       Query OK, 0 rows affected (0.02 sec)

       create view v_student as select * from v_tea_stu;

       Query OK, 0 rows affected (0.00 sec)

6、Trigger、存儲過程、package

1)Oracle創建觸發器時允許or,MySQL不允許。所以遷移時如果有需要寫兩個。

2)兩種數據庫定義變量的位置不同,而且MySQL里不支持%type。這個在Oracle中用得比較頻繁。

 3)elseif的邏輯分支語法不同,並且MySQL里沒有for循環。

 4)在MySQL中不可以返回cursor,並且聲明時就要賦對象。

 5)Oracle用包來把存儲過程分門別類,且在package里可以定義公共的變量/類型,既方便了編程,又減少了服務器的編譯開銷。可MySQL里根本沒有這個概念。所以MySQL的函數也不可以重載。

 6)預定義函數。MySQL里沒有to_char() to_date()之類的函數,也並不是所有的Oracle都是好的,就像substring()和load_file()這樣的函數,MySQL有,Oracle卻沒有。

 7)MySQL里可以使用set和=號給變量賦值,但不可以使用:=。 而且在MySQL里沒 || 來拼接字符串。

 8)MySQL的注釋必須要求-- 和內容之間有一個空格。

 9)MySQL存儲過程中只能使用leave退出當前存儲過程,不可以使用return。

 10)MySQL異常對象不同,MySQL同樣的可以定義和處理異常,但對象名字不一樣。

 

7、分頁語句

 MySQL中使用的是limit關鍵字,但在Oracle中使用的是rownum關鍵字。所以每有的和分頁相關的語句都要進行調整。

 

8、JOIN

 如果你的SQL里有大量的(+),這絕對是一個很頭疼的問題。需要改寫。

 

9、group by語句

 Oracle里在查詢字段出現的列一定要出現在group by后面,而MySQL里卻不用。只是這樣出來的結果可能並不是預期的結果。造成MySQL這種奇怪的特性的歸因於sql_mode的設置,一會會詳細說一下sql_mode。不過從Oracle遷移到MySQL的過程中,group by語句不會有跑不通的情況,反過來遷移可能就需要很長的時間來調整了。

 

10、bitmap位圖索引

 在Oracle里可以利用bitmap來實現布隆過濾,進行一些查詢的優化,同時這一特性也為Oracle一些數據倉庫相關的操作提供了很好的支持,但在MySQL里沒有這種索引,所以以前在Oracle里利於bitmap進行優化的SQL可能在MySQL會有很大的性能問題。

目前也沒有什么較好的解決方案,可以嘗試着建btree的索引看是否能解決問題。要求MySQL提供bitmap索引在MySQL的bug庫里被人當作一個中級的問題提交了上去,不過至今還是沒有解決。

 

11、分區表(Partitioned table)

需要特殊處理,與Oracle的做法不同,MySQL會將分區鍵視作主鍵和唯一鍵的一部分。為確保不對應用邏輯和查詢產生影響,必須用恰當的分區鍵重新定義目標架構。

 

12、角色

MySQL8.0以前也沒有role的對象。在遷移過程中如果遇到的角色則是需要拼SQL來重新賦權。不過MySQL更好的一點是MySQL的用戶與主機有關。

 

13、表情和特殊字符

在Oracle里我們一般都選擇AL32UTF8的字符集,已經可以支付生僻字和emoji的表情了,因為在遷移的時候有的表包含了大量的表情字符,在MySQL里設置了為utf8卻不行,導過去之后所有的都是問號,后來改成了utf8mb4才解決問題,所以推薦默認就把所有的DB都裝成utf8mb4吧。

 

14.數據檢驗

可以通過count(*)查詢總條數,也可以通果etl工具校驗


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM