在 Unix 作業系統環境下,DB2 使用者執行 db2 -td@ -vf <預存程序建立腳本檔案> 建立預存程序時可能遭遇失敗。查閱 db2diag.log 會發現類似以下的錯誤訊息:
--------------------------------------------------------------
2002-10-05-13.47.40.075759 Instance:db2inst1 Node:000
PID:1355876(db2agent (ABC) 0) TID:1 Appid:OC10103F.OD12.017302185202
oper system services sqloChangeFileOwnership Probe:100 Database:ABC
errno:
0x0FFFFFFFFFFF7AF0 : 0x00000001 ....
PID:1355876 TID:1 Node:000 Title: Path/Filename
/home/db2inst1/sqllib/function/routine/sqlproc/ABC/DB2INST1/tmp/
2002-10-05-13.47.40.166289 Instance:db2inst1 Node:000
PID:1355876(db2agent (ABC) 0) TID:1 Appid:OC10103F.OD12.017302185202
PSM - SQL Procedure psm_ctrl::psm_init_backend Probe:230 Database:ABC
DIA8402C A disk error has occurred.
ZRC=0x860F0004
PID:1355876 TID:1 Node:000 Title: SQL procedure initialization:
0x09000000031213BC : 696E 7374 616E 6365 206F 776E 6572 2064 instance owner d
0x09000000031213CC : 6F65 7320 6E6F 7420 6265 6C6F 6E67 2074 oes not belong t
0x09000000031213DC : 6F20 6665 6E63 6564 2075 7365 7227 7320 o fenced user's
0x09000000031213EC : 7072 696D 6172 7920 6772 6F75 70 primary group
--------------------------------------------------------------
錯誤訊息雖然顯示「磁碟錯誤」,但實際上是權限問題。Unix 平台上的 DB2 預存程序要求實例使用者必須屬於受防護用戶的主群組。若實例使用者未加入該群組,會導致存取權限不足,進而觸發此錯誤。
sqllib/adm 路徑。ls -l .fenced,輸出範例:-r--r--r-- 1 db2fencj db2fgrp2 0 Jul 30 09:57 .fenced
db2fencj 即為受防護用戶,所屬群組 db2fgrp2 即為其主群組。確認實例使用者已加入正確群組後,即可解決建立預存程序失敗的問題。