2010年10月26日 星期二

Informix dbload大量資料

infmrox 更改欄位型態时, 因為有些table 太大,若在buffer log下使用alter 方式來修改,容易造成long transaction

有時即使切換成nolog模式, alter也不見會成功

所以應使用unload and dbload的方法來重轉資料

informix沒有GUI的管理介面, shell又不太熟, 就土法煉鋼一步一步做吧.

(心中不禁佩服那些在unix terminal mode下做事的偉人...,慶幸我活在SQL Server 的陰影下)

1.unload data (可以包成shell, 用nohup backgroud執行,若筆數過大,建議放成幾個.unl檔)
   set isolation to dirty read;
   unload to a.unl delimiter ';'
   select * from yourTable;

  事後要再切割.unl檔,可以使用 split -10000 a.unl
  表示將a.unl 每10000筆切割一個檔案, 會產生xaa,xab,xac......的檔案

2.create your temp table (要放unload的資料)
  
3.create a.com ( dbload要用到的command file, 其中160是欄位數)
   FILE a.unl DELIMITER ';' 160;
   INSERT INTO   table_tmp;

4.prepare dbload.sh (執行a.com,將資料轉入 table_tmp, 每1000筆commit一次, errorlog 寫到 a.err
  dbload -d yourdb -c a.com -l a.err -e 0 -n 1000

以上可都可寫成shell後,用nohup time sh xx.sh >> xx.out 2>&1 &的方式執行, 一來可background作業, 二來可以記錄每次作業的時間, 就不用一直守著陽光守著結果了.. ..

ps.為什麼不用SSIS呢? 因為用SSIS 轉informix資料真是一大折磨,問題多多, 原本SQL 2000 DTS連結informix超級完美, 但SSIS 2005後,問題一堆... 使用官方的driver測試後的效果實在差到不行, 光是一個簡單的單一table 做data flow task, 就嗝屁了. 是我程度太LOW嗎?

沒有留言:

張貼留言

自動記錄滑鼠點選操作

為了一個需求,需要人工去點選幾個滑鼠的點選行為,找了幾種工具,覺得GS Auto Clicker最實用,極符合我的需求,尤其是多個固定位置的button點擊,解決了一個很耗時間的工作。 最後設定完預設hotkey F8為啟用鍵,就可以開始自動做工了。再按F8結束工作。 GS Au...