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嗎?

沒有留言:

張貼留言

VS CODE離線安裝套件方式-續

去年 vscode離線安裝 powershell nupkg 今年在一台無外網的 windwos 2025上安裝時遇到了powershell版本一直讀取到了5.1的版本,鬼打牆了一下午,在VM還原重測測了好幾回,應該是可行了。 將下載到的免安裝powershell 解壓縮到...