數據庫遷移工具Navicat Premium之OracleToMysql

1、問題mysql

因爲工做須要,須要把業務庫的數據庫從oracle簽到mysql,免費開源linux

2、解決辦法sql

2.1:ETL單個對象進行轉移(最笨的辦法,因此拋棄掉了)數據庫

2.2:使用Navicat Premium工具windows

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

安裝運行以後,咱們開始進行數據遷移吧數據結構

a:建立源和目標的鏈接,好比從oracle到mysql我就首先須要建立一個mysql和oracle的鏈接oracle

建立MySQL鏈接是傻瓜式的,我這裏不過多的去講app

主要說一下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,以下圖所示

相關文章
相關標籤/搜索