web系統從oracle遷移至MySql

前兩天領導給了個活,數據庫遷移,原來的系統是用的oracle數據庫,如今要改爲MySql,當時沒多想就接下來了,mysql

原來的系統用的框架式SSI,因而大概想了下須要做調整無非如下幾點sql

第一   數據庫遷移數據庫

第二   應用程序的修改數據結構


下面詳細來講下這個過程oracle


一    數據庫遷移app

簡單那的來講就是把oracle數據庫裏面的全部數據都遷移到MySql,這個能夠用MySQLMigration Toolkit工具框架

MySQL發佈了一個將數據由SQL Server或Oracle中移植到MySQL中的工具包MySQLMigration Toolkit。這一工具包經過嚮導介面,輕鬆將已有數據導入MySQL數據庫,能夠迅速移植,包括各類數據庫中的表結構和視圖下降風險,運用了通過證明的移植策略,節約成本,集成化的工具包可大幅提升效率,減小平常維護工做Oracle-to-MySQL。jvm

使用MySQLMigration Toolkit移植後,表的字段類型會有所變化(從Oracle到Mysql):VARCHAR2→VARCHAR,DATE→DATETIME,TIMESTAMP→DATETIME,NUMBER→DECIMAL,INTEGER→DECIMAL(22,0)。函數

在遷移操做MigratedObjects步驟中會報row size too large的錯,選擇有問題的表,點左下方的Advanced,將varchar(4000)的列類型改成TEXT就行。工具

表的主鍵、外鍵不會出問題,覈對下便可。表的索引(Oraclede的位圖索引)會被轉換成BTree索引。同時表和字段的註釋信息會丟失。

注意:我遷移的時候,只是把表和數據作了遷移,一些視圖、觸發器、函數、存儲過程之類都是手動作的

下面是具體的操做步驟

1  安裝MySQLMigration Toolkit這個就不作具體介紹了,網上一找都是一堆,安裝完成後,打開MySQLMigration Toolkit時遇到了錯誤以下


Migration Toolkit an error occured during the initialzation of the runtimes system.please make sure........;

網上不少的解決方法可是我試了都不行,找了好久總算找到了一個方法,具體操做以下

在MySQLMigrationTool.exe的目錄裏面新建MySQLMigrationTool.cmd
編輯內容爲

[plain] view plaincopy在CODE上查看代碼片派生到個人代碼片

  1. MySQLMigrationTool.exe -jvm "D:\Program Files (x86)\Java\jdk1.7.0_01\jre\bin\client\jvm.dll" 

jvm.dll的用你機器上真實的路徑,而後直接用MySQLMigrationTool.cmd啓動,問題解決


2 遷移數據庫

一、 運行MySQL Migration Toolkit,一路「Next」到「Source Database」,在Database System中選擇Oracle Database Server,若是第一次使用會告之要求加載驅動程序ojdbc14.jar 

 

加載驅動程序以後,界面將變成以下的形式,在其中填寫Oracle數據庫的鏈接信息,按「Next」繼續。

 

 

二、 Target Database中默認Database SystemMySQL Server,在Connection Parameters中填寫相應的MySQL數據庫的鏈接信息,按「Next」繼續。

 

 

    3、進行數據庫鏈接測試,測試經過後按「Next」到Source Schemata Selection,點選準備進行數據遷移的Schemata後按「Next」繼續。

 

    4、在Object Type Selection,點Detailed selection按鈕,在下方左側列表中選擇不進行遷移的表,將其放入右側列表中,即左側列表剩餘的表都將進行數據遷移。選擇好以後按「Next」繼續。

 

    5、在Object MappingMigration of type Oracle Schema,若是要設置參數,點Set Parameter按鈕。若是默認數據庫表爲UTF8的話,則選擇Multilanguage;若是默認數據庫表爲GBK的話,則須要選擇User defined,並在下方填寫charset=gbk, collation=gbk_general_ciMigration of type Oracle Table中要設置參數點Set Parameter按鈕。若是默認數據庫表爲UTF8的話,則選擇Data consistency/multilanguage;若是默認數據庫表爲GBK的話,則須要選擇User defined,並在下方填寫addAutoincrement=yes, charset=gbk, collation=gbk_general_ci, engine=INNODB。選擇好以後按「Next」繼續。

 

    6、再到Manual Editing,在這裏能夠修改建表腳本。因爲OracleMySQL之間語法規則的差別,一般須要對腳本的數據類型以及默認值進行調整,好比Oracle中一般會對Timestamp類型的數據設置默認值sysdate,但在MySQL中是不能識別的。在Filter中選擇Show All Objects,而後在Migrated Objects中選擇要修改腳本的表,再點擊左下方的Advanced就能夠進行腳本編輯了。修改完以後點擊右側Apply Changes按鈕保存,按「Next」繼續。

 

7、而後一路「Next」,若是沒有提示出錯的話,就能夠將指定表中的數據導入MySQL了。若是有提示出錯信息,則須要返回到Manual Editing處對腳本從新進行修改。

 

須要補充一點,在導大容量數據特別是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的數據了,固然這數值能夠根據須要做調整

這裏須要注意的是:在第五步操做的時候,參數必定要設置,剛開始沒設置,數據結構都能導入成功,可是不少表的數據都沒有進去或者少了不少數據,我把igration of type Oracle Schema、Migration of type Oracle Table參數設置成UTF-8後就沒有問題,具體緣由不清楚

3 手動的遷移函數、視圖、存儲過程等,若是有多用戶的話也是要遷移的,這裏很差作詳細說明,具體的操做課到網上找


第二 程序的調整

平臺的遷移是比較麻煩的事情,由於咱們的框架是ssi,裏面與不少的sql.xml,這個也很差詳細說明,

只能列出幾個注意點:

1 分頁的修改 2 sql中函數的修改 如 to_char等等,

這塊不難改就是比較麻煩,須要大量的測試

總結:平臺的遷移,不拿 比較麻煩,要細心,最主要的工做是測試

相關文章
相關標籤/搜索