數據庫遷移工具Navicat Premium之OracleToMysql


一、問題

由於工作需要,需要把業務庫的數據庫從oracle簽到mysql,免費開源

二、解決辦法

2.1:ETL單個對象進行轉移(最笨的辦法,所以拋棄掉了)

2.2:使用Navicat Premium工具

官網地址:https://www.navicat.com.cn/download,提供14天的試用權限(如下圖所示)

安裝運行之后,我們開始進行數據遷移吧

a:創建源和目標的連接,比如從oracle到mysql我就首先需要創建一個mysql和oracle的連接

創建MySQL連接是傻瓜式的,我這里不過多的去講

主要說一下navicat創建Oracle連接,官方文檔如下

Navicat 支持兩種 Oracle 服務器連接:在 Basic 模式中,Navicat 通過 Oracle Call Interface (OCI) 連接到 Oracle。
OCI 是一個應用程序界面,讓程序開發人員使用第三代語言原有進程或函數呼叫來訪問 Oracle 數據庫及控制全部 SQL
語句運行的階段。OCI 是一個標准數據庫訪問的庫和動態鏈接庫形式檢索函數。
在 TNS 模式中,Navicat 使用在 tnsnames.ora 文件中的別名項目通過 Oracle Call Interface (OCI) 連接到 Oracle
服務器。OCI 是一個應用程序界面,讓程序開發人員使用第三代語言原有進程或函數呼叫來訪問 Oracle 數據庫及控制
全部 SQL 語句運行的階段。OCI 是一個標准數據庫訪問的庫和動態鏈接庫形式檢索函數。

大概就是需要在navicat的選項中指定oci.dll文件的位置,如下圖

但是我按照操作安裝了oracle client之后指定client中的oci.dll文件的路徑一直不行,還是報錯,oracle連接一直創建不成功,接下來給出終極

解決方法:

把Oracle安裝目錄D:\app\Administrator\product\11.2.0\dbhome_1\BIN(根據你的實際安裝目錄)下的oci.dll文件替換Navicat安裝目錄D:\software\Navicatfor Oracle\instantclient_10_2(根據你的實際安裝目錄)下的oci.dll就可以了

確實解決了問題

b:開始遷移數據庫

如下圖所示,在native中選擇工具-數據傳輸可以看到如下界面,我們定義好源和目標,選擇好遷移的對象

遺憾的地方是:Oracle到mysql只能遷移表,視圖過程什么的可能是因為語法不一樣而被禁用了,或者是因為我這里是使用版的問題,這就不知道了

點擊開始遷移,我們可以看到遷移日志,如下圖所示

不幸的是,中途卻報錯了

錯誤1:[Err] [Dtf] 2006 - MySQL server has gone away With statement: INSERT INTO `T_XX_MESSAGE`

這個錯誤是因為要插入的字段中含有BLOB、CLOB的大文本字段,MySQL處理能力有限

解決辦法:

修改MySQL的my.ini文件(windows),linux為my.cnf,如window解壓版的mysql沒有my.ini只有my-default.ini

那就復制一個my-default.ini重命名為my.ini在后面加上

max_allowed_packet=16M

結果如下圖所示

修改保存后重啟mysql服務  net   stop mysql   net start mysql

錯誤2:

[Msg] [Dtf] Create index: `IDX_MEETING_FILENAME`
[Err] [Dtf] 1170 - BLOB/TEXT column 'FILE_NAME' used in key specification without a key length

解決辦法:

原來Mysql數據庫對於BLOB/TEXT這樣類型的數據結構只能索引前N個字符。所以這樣的數據類型不能作為主鍵,也不能是UNIQUE的。所以要換成VARCH,但是VARCHAR類型的大小也不能大於255,當VARCHAR類型的字段大小如果大於255的時候也會轉換成小的TEXT來處理。所以也同樣有問題。

作為索引的字符不能太長,修改的短一點吧

繼續處理可以發現處理OK,如下圖所示

 


免責聲明!

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



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