很高興,你閱讀此篇我自己整理的文章,首先需要說明一下,此篇文章適合初學和剛接觸DB2的開發人員閱讀,如果你自認覺得能力很好,可以繞開。
此篇文章也是結合我實際經驗對其進行整理,也是自己的一個總結。在前段時間給銀行做項目,由於銀行的數據是由第三方公司開發,故我們需要的接口數據需要我們自己來處理,經過幾次交涉,最終決定我們自己來處理數據。當看到數據中心發來的數據文件時,哇,一下處理16張表,表關系如何,我們還要自己去分析。經過一周時間對表關系進行分析,然後著手准備如何將16張表數據整理成一張我們系統需要的接口表,這也是一個難題。
在這裡大概說一下處理數據的要求:
1. 根據業務關系從16張表取出一張表數據。
2. 在銀行提供的16張表對應的txt文件有一半的數據量在百萬以上。並且每天都是全量
3. 必須每天將16張表數據導入DB2數據庫中,導入之前需要先清空16張表
4.必須在早上把數據處理完畢。不能影響白天業務。
根據以上要求,自己開始著手寫處理數據,想到對數據處理,就采用了DB2的存儲過程。但是像清空表等很多都是影響效率的。
第一:清空表優化
開始我們清空表用的是
db2 delete from tablename;
但是這樣速度是超級慢,並且如果采用delete會記錄日志,影響數據庫性能。
後來我們采用的是:
db2 import from d:\empty.del of del replace into tablename
empty.del是一個空的文件。這樣執行起來只需幾秒時間就將一個表清空了。
還可以采用:
DECLARE VAR_sql varchar(128);--
SET VAR_sql='ALTER TABLE AUTEK.UTMCA ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE';--
EXECUTE IMMEDIATE VAR_sql; --這種刪除也是很快的
第二:刪除優化
在處理DB2數據過程中少用刪除delete操作,用select比刪除操作快很多。
第三:重組表結構
當我們使用load from 數據時候突然中斷就會導致 SQL0668N 具體參考:
http://www.BkJia.com/database/201203/122520.html
此時我們需要db2 load from d:\empty.del of del terminate into tablename.
作者 cuiran