注意點:mysql
一、因爲mysql的date類型只支持存儲日期,不能存儲時間,navicat在轉換時,若是是oracle的date,會自動轉成mysql的date,這樣會致使mysql的精度不夠而報錯,因此要提早將oracle的date類型轉換成timestamp類型。若是表的數量比較多,手工改太麻煩了,這裏寫了個存儲過程,自動將oracle中全部表中的DATE類型轉換成TIMESTAMP類型:sql
- create or replace procedure convert_date_to_timestamp
- /**************************
- function: 將數據庫中全部的表中含DATE類型的字段改成TIMESTAMP類型;
- 須要創建下列類型表:
- create table type_table_info (
- table_name varchar2(30),
- column_name varchar2(30),
- data_type varchar2(100)
- )
- ***************************/
- is
- v_query_base_sql varchar2(100) := 'SELECT table_name, column_name, data_type FROM all_tab_cols WHERE table_name = ''';
- v_query_table_sql varchar2(150);
- v_alter_sql varchar2(100);
-
- type table_type is table of type_table_info%rowtype;
- table_array table_type;
-
- begin
- for c_tabs in (
- select table_name from user_tables where table_name <> 'type_table_info'
- )
- loop
- v_query_table_sql := v_query_base_sql || c_tabs.table_name || '''';
- execute immediate v_query_table_sql bulk collect into table_array;
- for i in table_array.first .. table_array.last
- loop
-
- if table_array(i).data_type = 'DATE' then
- v_alter_sql := 'alter table ' || table_array(i).table_name || ' modify ' || table_array(i).column_name || ' timestamp';
- DBMS_OUTPUT.put_line(table_array(i).column_name || ': ' || v_alter_sql);
- execute immediate v_alter_sql;
- end if;
-
- end loop;
- end loop;
- end convert_date_to_timestamp;
二、異常信息:Specified key was too long; max key length is 767 bytes數據庫
我這邊是經過修改mysql字符集解決的,改成utf8oracle
工具-->數據傳輸,在「源」中選擇待複製的數據庫(oracle)信息,選中全部表,在「目標」中選擇目標數據庫(mysql),而後點擊「開始」,便可實現批量從oracle庫複製表到mysql庫了,在「信息日誌」欄中能夠查看日誌信息,若是有"unsuccessly"表示當前表未複製成功,能夠查看異常信息做相應處理後再轉換。
因爲語法差別,函數、視圖等不支持自動轉換,須要一個一個的複製修改了。
這裏簡單介紹下oracle與mysql的一些異同點,在轉換視圖、函數時會用到:
一、mysql查詢時,表名必須大寫(別名也區分大小寫);
二、mysql的使用函數時,函數名和括號之間不能有空格,>= 之間也不能有空格(如,> =會報錯);
三、mysql視圖中不支持子查詢,必須使用視圖嵌套;
四、mysql中的系統函數與oracle中的系統函數有不少差別,這裏須要特別注意下。函數
另外一種方法:工具
1.從源數據庫導出數據:
語法:oop
exp user1/pwd1@test1 file='E:test.dmp';
示例:spa
exp tianzhi_smart/tianzhi_smart@192.168.56.60:1521/orcl file='E:\tianzhi_smart.dmp';
2.向目標數據庫導入數據:
語法:日誌
imp user2/pwd@test2 file='E:test.dmp' full=y;
示例:code
imp tianzhi_smart/tianzhi_smart@192.168.10.129:1521/orcl file='E:\tianzhi_smart.dmp' full=y;