Oracle 數據庫遷移到MySQL (kettle,navicate,sql developer等工具
1 kettle
--第一次使用kettle玩遷移,有什么不足之處和建議,請大家指正和建議。
下載軟件,官網比較慢,國內有一些鏡像
下載完成,解壓
pdi-ce-7.0.0.0-25.zip
G:\download\pdi-ce-7.0.0.0-25\data-integration
雙擊Spoon.bat 運行
提示找不到javaw.exe
下載jdk安裝(這里在oracle官網上選擇相應的進行下載安裝jdk-8u191-windows-x64.exe),路徑C:\Program Files\Java\jdk1.8.0_191
添加環境變量 C:\Program Files\Java\jdk1.8.0_191
在雙擊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
2 Navicat 遷移 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
3 sql develope Mysql遷移到oracle
這個工具只能把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";
--連接oracle
--連接mysql
--選擇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;