Web系統從Oracle遷移至MySQL

來源:互聯網
上載者:User

前兩天領導給了個活,資料庫遷移,原來的系統是用的Oracle資料庫,現在要改成MySql,當時沒多想就接下來了,原來的系統用的架構式SSI,於是大概想了下需要作調整無非以下幾點

第一 資料庫遷移

第二 應用程式的修改

下面詳細來說下這個過程

一 資料庫遷移

簡單那的來說就是把oracle資料庫裡面的所有資料都遷移到MySql,這個可以用MySQLMigration Toolkit工具

MySQL發布了一個將資料由SQL Server或Oracle中移植到MySQL中的工具包MySQLMigration Toolkit。這一工具包通過嚮導介面,輕鬆將已有資料匯入MySQL資料庫,可以迅速移植,包括各種資料庫中的表結構和視圖降低風險,運用了經過證實的移植策略,節約成本,整合化的工具包可大幅提高效率,減少日常維護工作Oracle-to-MySQL。

使用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

編輯內容為

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

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

2 遷移資料庫

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

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

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

3、進行資料庫連接測試,測試通過後按“Next”到Source Schemata Selection,點選準備進行資料移轉的Schemata後按“Next”繼續。

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

5、在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”繼續。

6、再到Manual Editing,在這裡可以修改建表指令碼。由於Oracle與MySQL之間文法規則的差異,通常需要對指令碼的資料類型以及預設值進行調整,比如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等等,這塊不難改就是比較麻煩,需要大量的測試

總結:平台的遷移,不難,比較麻煩,要細心,最主要的工作是測試。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.