1. 程式人生 > >將oracle的資料匯入到mysql的四種方法

將oracle的資料匯入到mysql的四種方法

一.Navicat Premium中的資料遷移工具

為了生產庫釋放部分資源,需要將API模組遷移到MySQL中,及需要導資料。

嘗試了Oracle to mysql工具,遷移時報錯不說,這麼大的資料量,用這種簡陋的工具不大可靠。

意外發現平時用的資料庫檢視工具Navicat Premium中有資料遷移工具,意外的好用。這個工具本身支援mysql,oracle,sqlLite,PostgreSql資料庫,因此而也提供了在不同資料庫之間遷移資料的功能。

遷移之前,先確保你建立了這兩個資料庫的connection。選擇Tools/DataTransfer。

\

選擇源資料庫,選擇你要遷的表,目標資料庫。
<喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PGltZyBzcmM9"http://www.2cto.com/uploadfile/Collfiles/20141101/2014110109051329.png" alt="\">

選擇周邊。

\

遷移過程,左上角為進度。


-----------------------------------------------------------------------------------------------------------------------
二.使用MySQL Migration Toolkit快速將Oracle資料匯入MySQL
使用MySQL Migration Toolkit快速將Oracle資料匯入MySQL
上來先說點廢話
本人最近在學習一些資料庫方面的知識,之前接觸過Oracle和MySQL,最近又很流行MongoDB非關係型資料庫,所以乾脆一起研究一下,對比學習中找不同,首先說一下本人使用的資料庫版本和視覺化工具
Oracle10G—PL/SQL Developer9
MySQL5.5.29—MySQL Workbench6.0
MongoDB2.4.9(32bit最大2G)—Robomongo0.8.4

為了保持資料的一致,把現有Oracle中的一部分資料移植到MySQL中,百度之後發現MySQL Migration Toolkit不錯,現將步驟寫出跟大家分享
一、安裝MySQL Migration Toolkit
先到http://dev.mysql.com/downloads/gui-tools/5.0.html下載MySQL GUI Tools(其實就是一個MySQL管理工具),其中就包括MySQL Migration Toolkit工具,一路next安裝完畢
二、第一次執行需要載入ojdbc14.jar包

執行MySQL Migration Toolkit,一路“Next”到“Source Database”,在Database System中選擇Oracle Database Server,如果第一次使用會告之要求載入驅動程式ojdbc14.jar,然後重新啟動MySQL Migration Toolkit。


三、載入驅動程式之後,來到Source Database介面將變成如下的形式,在其中填寫Oracle資料庫的連線資訊,按“Next”繼續。


四、在Target Database中預設Database System為MySQL Server,在Connection Parameters中填寫相應的MySQL資料庫的連線資訊,按“Next”繼續。


五、經過Connecting to Server測試通過後按“Next”,到Source Schemata Selection,點選準備進行資料遷移的資料庫後按“Next”繼續。


六、經過Reverse Engineering測試通過後按“Next”,在Object Type Selection,點Detailed selection按鈕,在下方左側列表中選擇不進行遷移的表,將其放入右側列表後,即左側列表剩餘的表都將進行資料遷移。選擇好之後按“Next”繼續。


七、在Object Mapping的Migration of type Oracle Schema,如果要設定引數,點Set Parameter按鈕。如果預設資料庫表為UTF8的話,則選擇Multilanguage;如果預設資料庫表為GBK的話,則需要選擇User defined,並在下方填寫charset=gbk, collation=gbk_general_ci。

Migration of type Oracle Table中要設定引數點Set Parameter按鈕。如果預設資料庫表為UTF8的話,則選擇Data consistency/multilanguage;如果預設資料庫表為GBK的話,則需要選擇User defined,並在下方填寫addAutoincrement=yes, charset=gbk, collation=gbk_general_ci, engine=INNODB。選擇好之後按“Next”繼續。


八、經過Migration測試通過後,再到Manual Editing,在這裡可以修改建表指令碼。由於Oracle與MySQL之間語法規則的差異,通常需要對指令碼的資料型別以及預設值進行調整,比如Oracle中通常會對Timestamp型別的資料設定預設值sysdate,但在MySQL中是不能識別的。在Filter中選擇Show All Objects,然後在Migrated Objects中選擇要修改指令碼的表,再點選左下方的Advanced就可以進行指令碼編輯了。修改完之後點選右側Apply Changes按鈕儲存,按“Next”繼續。


九、在Object Creation Options中,選擇本地磁碟儲存資料表結構,按“Next”繼續。


十、經過Creating Objects建立所有表的結構完畢,表中並沒有資料,按“Next”繼續。


十一、一路“next”來到Data Mapping Options,選擇本地磁碟儲存資料表中的資料,按“Next”繼續。


十二、經過Bulk Data Transfer建立所有表中的資料完畢,按“Next”繼續。


十三、來到summary顯示此次資料轉換的資訊,可以儲存成檔案,按“Finish”完成。


需要補充一點,在導大容量資料特別是CLOB資料時,可能會出現異常:“Packets larger than max_allowed_packet are not allowed”。這是由於MySQL資料庫有一個系統引數max_allowed_packet,其預設值為1048576(1M),可以通過如下語句在資料庫中查詢其值:show VARIABLES like '%max_allowed_packet%';修改此引數的方法是在mysql資料夾找到my.ini檔案,在my.ini檔案[mysqld]中新增一行:max_allowed_packet=16777216
重啟MySQL,這樣將可以匯入不大於16M的資料了,當然這數值可以根據需要作調整。
十四、使用MySQL Workbench匯入資料
點選Data Import/Restore先匯入一次表結構,再匯入一次表資料,完成資料庫遷移

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 三. 先把oracle表中的資料另存在excel表中,再把excel表中資料匯入到mysql中

這裡要將oracle中表eventlogs的資料匯入到mysql中。步驟如下:

    1、在PL/SQL中用select * 搜尋到eventlogs表的所有資料,然後右鍵點選"Copy to Excel";如下圖所示:

          

     2、將資料儲存為excel表,並重名;如下圖:

         

    3、開啟mysql的視覺化工具,我這裡是Navicat,選擇表,點選匯入嚮導;如下圖所示:

 

    4、選擇上圖中"匯入型別"的"execel檔案",然後點選"下一步";如下圖所示:

        

    5、接下來會讓你選擇檔案,選擇你已經儲存的excel檔案,並選擇“SQL Result”,如下圖所示:

 

    6、然後一直點下一步直至步驟6,填充目標欄位。第一個欄位一般是空的,根據你的需要填。我這裡填為"_id",並設為主鍵。如下圖所示:


   7、然後一直點選下一步,最後一步點選開始。會出現一個“sql result”的表,重新命名為你想要的表即可。如圖所示:


     資料已經匯入了。其中表中資料型別若不合你的要求,你可以再設計表。


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 四,手動匯入Navicat
這可能是最蠢最低效的辦法,但也是最靠譜的辦法。在以上3中方法都不適用的前提下,一張一張表自己在navicat for mysql裡建。或者,從oracle裡匯出的.sql檔案不能在navicat裡執行sql檔案來匯入,因為裡面有些欄位屬性不適用於mysql,oracle與mysql語法和欄位屬性還是有區別的,所以要把建立表sql語句一一修改後,再在navicat裡執行來建立表。