Oracle 數據庫遷移到MySQL (kettle,navicate,sql developer等工具java
--第一次使用kettle玩遷移,有什麼不足之處和建議,請你們指正和建議。mysql
下載軟件,官網比較慢,國內有一些鏡像 sql
下載完成,解壓數據庫
pdi-ce-7.0.0.0-25.zipwindows
G:\download\pdi-ce-7.0.0.0-25\data-integrationoracle
雙擊Spoon.bat 運行ide
提示找不到javaw.exe工具
下載jdk安裝(這裏在oracle官網上選擇相應的進行下載安裝jdk-8u191-windows-x64.exe),路徑C:\Program Files\Java\jdk1.8.0_191測試
添加環境變量 C:\Program Files\Java\jdk1.8.0_191spa
在雙擊Spoon.bat 運行
ojdbc5.jar ojdbc6.jar mysql-connector-java-5.1.47.jar
拷貝到kettle的lib路徑 G:\download\pdi-ce-7.0.0.0-25\data-integration\lib
在啓動kettle以前拷貝進去,這裏從新運行
--mysql鏈接
--鏈接oralce,因爲oralce是11g r2 rac環境,以前一直報錯
Error connecting to database: (using class oracle.jdbc.driver.OracleDriver)
Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
--因此這裏直接指定一個sid,即bol1,選擇第一個節點,ip是scan ip
新建一個job,建立2個db的鏈接,source,target,在菜單中找到[複製多表導向],點擊進行關聯操做
工具--嚮導--複製多表導向
--點擊 finish
--開始執行
--日誌
--登陸mysql進行查詢,發現數據和表已經同步
--問題,oracle遷移到mysql的表,字段是number類型,遷移到mysql以後,變成了double類型,數據存儲的是整數。字段是date類型而且有default值,遷移後到mysql,只是爲not null屬性,沒有default值。
-- oracle
-- mysql
--分別建立oracle和mysql的鏈接
--選擇工具--數據傳輸
基本上table 到table的遷移是沒什麼問題
--遷移比較慢
--date字段 遷移到mysql 出錯--未解決
[Msg] [Dtf] Create table: `AIRCRAFT`
[Err] [Dtf] 1426 - Too big precision 7 specified for column 'AIRCRAFTDATE'. Maximum is 6.
[Msg] [Dtf] Get table data for: .AIRCRAFT
這個工具只能把mysql遷移到oracle
自行在oracle 官網上下載相應的sql developer版本,只能是其它數據庫導入oracle
下載安裝包
--sqldeveloper-18.3.0.277.2354-x64.zip
--mysql-connector-java-5.1.47.zip
--oracle 用戶設置
CREATE TABLESPACE TEST DATAFILE
'+DATA/bol/datafile/test01.dbf' SIZE 50M AUTOEXTEND OFF
LOGGING
ONLINE
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;
create user TEST identified by TEST DEFAULT TABLESPACE TEST;
grant connect to TEST;
grant resource to TEST;
grant dba to TEST;
--mysql 用戶設置
grant ALL PRIVILEGES ON *.* TO 'test'@'10.15.%' IDENTIFIED BY "testmysql";
--選擇mysql-connector-java-5.1.47.zip 該包解壓出的的bin.jar
--建立鏈接
複製表
若是不用遷移整個數據,只是遷移表的數據,則能夠直接在mysql數據庫中選擇要轉移的表,點擊右鍵 選擇複製到oracle便可。此時會把錶轉移到sql developer連接oracle數據庫的用戶下,而且該用戶下不能有同名的表
複製表要比遷移數據庫的效率低,若是是複製全部表,最好是移植數據庫
移植數據庫
--選擇test庫測試
--指定轉換規則,能夠根據本身的狀況設定字段轉換,也能夠添加新的規則
修改oracle用戶名
由於轉換過來的數據默認存放在users表空間,並且會建立一個和mysql如出一轍的oracle用戶,並把mysql數據庫導入到該用戶下。能夠exp出來新用戶的數據後,而後在導入到正確的用戶下,這樣數據會存在正確的表空間下面,若是數據量大,exp/imp比較耗時,建議數據量大的時候不要採用。
先建立好用戶名(用戶名|mysql數據庫的庫名),定義好默認的表空間,而後在作mysql到oracle的轉換,也能夠改變數據庫的默認表空間防止自動建立用戶的默認表空間使用user表空間
SQL> alter database default tablespace m_data;
改過名字的用戶,權限會繼承,可是默認表空間不會繼承,須要手工設定
SQL> alter user oa identified by oa default tablesapce m_data temporary tablespace TEMP;
修改oracle用戶名須要sys用戶,或者操做user$表權限
SQL> GRANT SELECT ON USER$ TO SYSTEM;
SQL> GRANT UPDATE ON USER$ TO SYSTEM;
SQL> SELECT USER#,NAME FROM SYS.USER$ WHERE NAME=’TEST’;
SQL> UPDATE USER$ SET NAM=NEW_NAME WHERE USER#=93;
SQL> COMMIT;
SQL> ALTER SYSTEM CHECKPOINT;
SQL> ALTER USER NEW_USER IDENTIFIED BY PASS
SQL> ALTER SYSTEM FLUSH SHARED_POOL;
SQL> CONN NEW_USER/PASS@ORCL;