NO.75 Infomix庫向Oracle移植的一般步驟

[此部分內容爲本人借鑑,僅對部分內容調整]

【工具準備】(版本僅爲本人實際操作時使用,僅供參考)

  DbVisualizer V6(提取informix數據)

  PowerDesigner V12.5(informix數據文件向oracle轉換)

  PL.SQL.Developer.v7(向oracle中導數)

  Oracle 10g(客戶端即可)

  UltraEdit(編輯informix數據文件中的非法格式及字符)

  注:如果需要操作很大的文本文件,機器內存最好大一些,運行會比較順暢。

 

【數據導出】

  1. 在DbVisualizer中建立informix連接(步驟從略)
  2. 數據庫連接成功後,右單擊“Data Base”,選擇導出按鈕,選擇導出格式爲“sql”,同時勾選下邊的表結構、數據、索引、約束等;按需要我們分別導出一套含數據和一套不含數據的sql文件。 

【數據庫轉換】

  1. 打開 PowerDesigner 12,File -> Reverse     Engineer -> Database;
  2. DBMS選擇INFORMIX SQL 9.x(版本根據informix數據庫實際版本而定)然後點擊【確定】按鈕;
  3. 選擇要導入的數據結構sql文件,點擊【確認】按鈕,這樣我們從informix數據庫中導出的數據結構便導入到PowerDesigner中了;
  4. 數據結構導入後,我們進行數據庫變更操作 Datebase ->     Change Current DBMS;
  5. 在new DBMS裏選擇oracle 10g,點擊確定後,PowerDesigner會將informix中導出的數據結構文件轉換成oracle可用的語法;
  6. 數據結構轉換完成後,我們要生成oracle可用的執行sql,並生成相應腳本文件Database -> Generate Database;
  7. 在【General】標籤輸入選擇生成腳本路徑及腳本文件名;
  8. 在【Options】標籤中將所有物理選項(Physical Options)勾選框去掉,這樣在導出文件中指定表空間的語句就會自動被去掉;
  9. 生成建庫sql,將【Preview】標籤下sql複製出來,做成sql文件。 

【完善數據結構sql】

(以下批量替換是指:利用UltraEdit編輯器,CTRL+R,並且勾選只匹配整個詞語替換。)

  1. CHAR數據類型替換爲VARCHAR2;
  2. SMALLINT數據類型替換爲NUMBER(20);
  3. INTEGER數據類型替換爲NUMBER(20);
  4. DATETIME數據類型替換爲DATE;
  5. 由於“level”爲oracle保留字,需要調整字段名,比如將level字段批量替換爲****Level;
  6. Informix中自增序號字段轉換之後會變成非法數值,通過正則表達式替換文檔中非法數據類型,例如NUMBER(16,255)替換爲NUMBER(16,2),搜索用到的正則表達式:”^(number(^)^(*^)^(,^)^(255)^)”;
  7. 建表sql中的“CONSTRAINT  CHECK…”調整,舉例如下: 
CONSTRAINT           CHECK((endhour >= 0 ),

constraint pk_** primary key (quotationno),

constraint CKT_*** check (r <= 24),

constraint Rule_11 check (24)

改爲:

CONSTRAINT CKT_****_ENDHOUR  CHECK((endhour >= 0 ),

constraint pk_**** primary key (quotationno)

 

  1. 核心數據結構中的dual表需要刪除或者修改表名,因爲dual爲oracle系統表。

 

【在Oracle中導入數據結構及數據】

創建Oracle用戶等操作從略。

  1. Informix導出的sql文件完善;
  2. 由於informix中的null與oracle中null的定義存在差異,在導入時,需要根據執行情況,將一些在數據結構中定義爲非空的字段暫時設置爲可空:

       Informix中非空的定義爲:notnull,表示空值('')或非空值(not '')

       Oracle中非空的定義爲:notnull,表示非空值(not '')

  1. 則有類似操作
alter table tablename modify columnname null; 

 

[以下是個人實踐中碰到問題的處理]

1.腳本整理

1.1結構替換

    將類似 NUMBER(10,255)  替換爲  NUMBER(10)

    將varchar 替換爲 varchar2

 

1.2數據替換

  • 將類似TO_DATE('2010-04-07 09:41:59', '%Y-%m-%d %H:%M:%S'中的

              %Y-%m-%d %H:%M:%S 替換爲 YYYY-MM-DD HH24:MI:SS

              %Y-%m-%d 替換爲 YYYY-MM-DD 

  • 將 & 替換爲 '||'&'||'

 

2.在庫上執行注意點

  2.1 禁用所有外鍵

    執行此語句生成的腳本即可

 

  select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints where constraint_type='R';


  2.2 執行腳本:如果數據量較大,建議在服務器上執行SQL腳本。

 

  2.3 啓用所有外鍵

    執行此語句生成的腳本即可

  

   select 'alter table '||table_name||' enable constraint '||constraint_name||';' from user_constraints  where constraint_type='R';


3.部分數據處理

由於部分數據值中尾部有多餘空格,需要做類似清理,下例是一般基礎數據表的清理:

update tablename set columnname=replace(columnname,' ','') ;


 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章