1. 程式人生 > >db2注意事項

db2注意事項

1.   db2 nullif()
     nullif('1','1')與nullif(1,1)雖然都返回null,但是兩條記錄union起來之後該欄位只能存放數值型別,或者‘2.5’這種可以強制轉化成數字型別的字串。
2.     DB2中 ‘’和‘’或者‘’和‘   ’,是可以匹配的,所以在連線兩個表時,一定要注意連線條件中欄位是否有‘’、‘  ’,否則會造成笛卡爾積!!!
3.   Load 和 import的主要差別
                                            Load                                     Import
大資料移動速度     將格式化的頁寫入資料庫所以更快               慢
4. 在關聯兩張表的時候儘量on後面只跟關聯條件,而且關聯條件一定不要帶任何函式,例如          sub(a.id,1,4)=b.id(效率非常慢)
5.     關於SUBSTR函式的用法
SELECT SUBSTR(NULL,1,2) FROM SYSIBM.DUAL --這條語句可以返回null。
SELECT SUBSTR('',1,2) FROM SYSIBM.DUAL--而這條語句會報錯
原因是因為DB2 NULL、’’的區別,所以在編寫程式一定要考慮被擷取的字串是否會為‘’,還有被擷取的字串位數是否>=結果字串位數 6. 關於user temporary tablespace的使用      建立表不能直接使用這個表空間,可以建立session臨時表是可以使用 7.關於DB2的除法。遇到一個很怪異的語句:SUM (CASE WHEN INDEX_NO = 'NIN0005508' THEN VALUE END)/ SUM (CASE WHEN INDEX_NO = 'GL00003852' THEN VALUE END)
計算出來結果只保留整數?!不知道DB2的機制      解決辦法:把其中一個轉換為double型別。CAST(SUM (CASE WHEN INDEX_NO = 'NIN0005508' THEN VALUE END) AS DOUBLE)/ SUM (CASE WHEN INDEX_NO = 'GL00003852' THEN VALUE END) 8.drop一張大表的時候,一定要先清空表中資料,再drop DB2錯誤和解決方法 1.     Lookup Error - : ERROR [57016] [IBM][DB2/AIX64] SQL0668N Operation not allowed for reason code "7" on table "DW.F_HX_CBOD_REACCACC".
解決辦法:reorg table DW.F_HX_CBOD_REACCACC;--重組表
其他:runstats on table <tbschema>.<tbname> 收集表 <tbname> 的統計資訊。
        reorgchk on table all 確定是否需要對錶進行重組,對於對所有表自動執行                runstats 很有用。
2.     DROP表
有時會遇到這種問題,drop一張表很慢,排除系統表被鎖之後,考慮此表是否被其他程序佔用。
解決辦法:force所有application,重啟資料庫,這時你會發現表已經被drop掉。(慎用,有可能引起資料庫回滾)
3.     SQLSTATE 57016: The table cannot be accessed, because it is inactive.
引起的原因:該表可能處於某種pending狀態(常常是load pending)
可以通過db2 load query table F_HX_CBOD_LNLNSLNS_H檢視load狀態,如果處於load pending,則可以通過
db2 load from /dev/null of del terminate into F_HX_CBOD_LNLNSLNS_H來解決(不會清空表) 4.runstats on table dw.xxxx on all columns時遇到一個錯誤 錯誤描述:SQL2314W  Some statistics are in an inconsistent state. The newly collected                  "TABLE" statistics are inconsistent with the existing "INDEX" statistics. 
                  SQLSTATE=01650 解決方案:RUNSTATS
 ON TABLE DW.XXXX ON ALL COLUMNS AND INDEX ALL 備註:造成這種錯誤的原因有可能是對錶的資訊收集和對索引的資訊收集不一致。 5.在命令列模式下編譯儲存過程出現錯誤      描述:[ODS-DB/home/dw/zj_dir/test]$db2 [email protected] -vf zj_test_porc.sql      錯誤:DB21007E  End of file reached while reading the command.                當view進去看的時候沒有異常,但是用cat進去看有大量亂碼。      原因:字符集問題      解決辦法:轉碼 6.系統重啟之後,表空間報錯 0x4000      原因:裸裝置的掛載和賦權沒有設定系統啟動自動執行      解決辦法:重新繫結和賦權裸裝置                     (1)繫結: raw /dev/raw/raw1 /dev/sdd1                     (2)賦權:chown dw:disk /dev/raw/raw1                     (3)重啟例項      可以把(1),(2)加到開機啟動指令碼rc.local中
7.建好一個數據庫之後,發現本地可以連線資料庫,但是遠端連線不上。      原因:本地連線資料庫使用IPC(程序間通訊),沒有配置遠端連線協議。      解決辦法:在命令列輸入                      db2set DB2COMM=tcpip或者
 db2set DB2COMM=ssl ,然後重啟資料庫