要將Oracle數據庫中的大量數據遷移到MySQL中, 用SQLULDR2生成格式化文本文件, 然後用mysqlimport來導入到目標庫, 是一個高效免費的方案. 最近正好有這樣的一個數據遷移需求, 並做了一些測試, 速度很不錯, 但MySQL對於空值(NULL)的處理有些特殊, 在以前的SQLULDR2中, 空值輸出成空的字符串, 如下所示. ICOL$,TABLE,4
CON$,TABLE,
UNDO$,TABLE,
C_COBJ#,CLUSTER,
PROXY_ROLE_DATA$,TABLE,
......
用mysqlimport導入數據時, 第三列上的空值(Oracle中)導入到MySQL中時, 就不是空值(NULL)了, 而是長度為0的字符串, 如果導入到數字類型中, 則全變成0, 很顯然這不是我們想要的結果. mysqlimport在默認情況下, 會將\\N處理成NULL值, 因此從Oracle導出成文本時, 需要將空值處理一下, 以方便在MySQL中准確導入.
ICOL$,TABLE,4
CON$,TABLE,\\N
UNDO$,TABLE,\\N
C_COBJ#,CLUSTER,\\N
PROXY_ROLE_DATA$,TABLE,\\N
......
在使用SQLULDR2時, 指定NULL命令行選項即可, 如下所示.
SQLULDR2 sys QUERY=tab NULL=\\N
前幾天還在想SQLULDR2都這麼多命令行選項了, 應當齊了吧, 沒想到又多了一個用戶需求導致的命令行選項. 用戶需求真是值得我們好好研究.