mysql遷移oracle資料庫-ag真人国际官网
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的數據了,當然這數值可以根據需要作調整。
2. 數據從mysql遷移到oracle需要注意些什麼
答:以下是mysql遷到oracle需要掌握的注意事項,希望對你有所幫助。 1.自動增長的數據類型處理 mysql有自動增長的數據類型,插入記錄時不用操作此欄位,會自動獲得數據值。oracle沒有自動增長的數據類型,需要建立一個自動增長的序列號,插入記錄時要把序列號的下一個值賦於此欄位。 create sequence 序列號的名稱 (最好是表名 序列號標記) increment by 1 start with 1 maxvalue 99999 cycle nocache; 其中最大的值按欄位的長度來定, 如果定義的自動增長的序列號 number(6) , 最大值為999999 insert 語句插入這個欄位值為: 序列號的名稱.nextval 2. 單引號的處理 mysql里可以用雙引號包起字元串,oracle里只可以用單引號包起字元串。在插入和修改字元串前必須做單引號的替換:把所有出現的一個單引號替換成兩個單引號。 3. 翻頁的sql語句的處理 mysql處理翻頁的sql語句比較簡單,用limit 開始位置, 記錄個數;php里還可以用seek定位到結果集的位置。oracle處理翻頁的sql語句就比較繁瑣了。每個結果集只有一個rownum欄位標明它的位 置, 並且只能用rownum80。 以下是經過分析後較好的兩種oracle翻頁sql語句( id是唯一關鍵字的欄位名 ): 語句一: select id, [field_name,...] from table_name where id in ( select id from (select rownum as numrow, id from table_name where 條件1 order by 條件2) where numrow > 80 and numrow < 100 ) order by 條件3; 語句二: select * from (( select rownum as numrow, c.* from (select [field_name,...] from table_name where 條件1 order by 條件2) c) where numrow > 80 and numrow < 100 ) order by 條件3; 4. 長字元串的處理 長字元串的處理oracle也有它特殊的地方。insert和update時最大可操作的字元串長度小於等於4000個單位元組, 如果要插入更長的字元串, 請考慮欄位用clob類型,方法借用oracle里自帶的dbms_lob程序包。插入修改記錄前一定要做進行非空和長度判斷,不能為空的欄位值和超出長 度欄位值都應該提出警告,返回上次操作。 5. 日期欄位的處理 mysql日期欄位分date和time兩種,oracle日期欄位只有date,包含年月日時分秒信息,用當前資料庫的系統時間為sysdate, 精確到秒,或者用字元串轉換成日期型函數to_date(『2001-08-01』,』yyyy-mm-dd』)年-月-日 24小時:分鍾:秒 的格式yyyy-mm-dd hh24:mi:ss to_date()還有很多種日期格式, 可以參看oracle doc.日期型欄位轉換成字元串函數to_char(『2001-08-01』,』yyyy-mm-dd hh24:mi:ss』) 日期欄位的數學運算公式有很大的不同。mysql找到離當前時間7天用 date_field_name > subdate(now(),interval 7 day)oracle找到離當前時間7天用 date_field_name >sysdate - 7; 6. 空字元的處理 mysql的非空欄位也有空的內容,oracle里定義了非空欄位就不容許有空的內容。按mysql的not null來定義oracle表結構, 導數據的時候會產生錯誤。因此導數據時要對空字元進行判斷,如果為null或空字元,需要把它改成一個空格的字元串。 7. 字元串的模糊比較 mysql里用 欄位名 like '%字元串%',oracle里也可以用 欄位名 like '%字元串%' 但這種方法不能使用索引, 速度不快,用字元串比較函數 instr(欄位名,'字元串')>0 會得到更精確的查找結果。 8. 程序和函數里,操作資料庫的工作完成後請注意結果集和指針的釋放。