最近在公司搞一個項目重構遷移問題,舊項目一直在線上跑,重構的項目則還沒上線。重構之后數據庫表結構,字段,類型等都有變化,而且重構的數據庫由oracl改為mysql。這樣就設計到數據遷移問題,別人推薦下用了kettle。由於資料比較少,剛開始搞了半天沒成功過一次。現在終於有點開竅了,記錄下以備后用,同時給用到的同學一點幫助也好,現在還是剛用的第二天,所以寫的太淺顯,望莫恥笑。
1、數據類型轉換
由於大多數的數據結構都差不多,所以大多轉換就如下圖所示:
如果有字段變化在在“字段選擇”中做映射,如我原來庫中字段為UUID,在新庫中字段叫ID
由於新的mysql中所有日期類型都采用時間戳來存儲,所以在數據轉換的時候也要考慮。這里在查詢數據的時候,也就是“表輸入”時候進行數據轉換,首先寫了一個oracle的函數:
create or replace function oracle_to_unix(in_date IN DATE) return number is begin return( (in_date -TO_DATE('19700101','yyyymmdd'))*86400 - TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))*3600)*1000; end oracle_to_unix;
然后在查詢數據的時候調用此函數進行轉換:
select oracle_to_unix(CREATE_DATE) as create_date from t_1
這樣就完成了oracle date類型到時間戳的轉換了。
2、增加ID
在老的系統上有需要表都沒有ID,這樣在遷移數據的時候就需要同時生成ID,這里采用的是kellten“增加序列”來自動生成ID,轉換過程如下
在增加序列中“值的名稱”填入“表輸出”中表的ID字段名稱,或者隨便寫一個,在“字段選擇”中進行映射即可,這里我直接寫的ID。
3、性能提升
在測試遷移過程中,一開始的數據速度竟然是20多條/s,真是讓人抓狂,3000W的數據這要遷移到明年了。。。,網上搜索了下,修改如下鏈接參數可以提高效率:
useServerPrepStmts=false rewriteBatchedStatements=true useCompression=true
設置上試了下果然是鳥槍換炮啊,立馬速度增加到2000條/S
暫時記錄到此,后續有問題再更新。
http://www.cnblogs.com/lcxdever/p/4335358.html