Unix/Linux 平台執行 db2 -td@ -vf <stored_proc_script> 建立存儲過程失敗,db2diag.log 記錄:
DIA8402C A disk error has occurred. ZRC=0x860F0004
...
instance owner does not belong to fenced user's primary group
雖然日誌提示「磁碟錯誤」,實際上是**權限不足**導致無法寫入存儲過程編譯暫存目錄 ~/sqllib/function/routine/sqlproc/<DB>/<INSTANCE>/tmp/。
DB2 存儲過程編譯/執行機制要求:
DB2 實例擁有者必須屬於 Fenced User(受防護用戶)的主群組(Primary Group)成員。
若實例用戶未加入該群組,編譯器無法以 fenced user 身分存取暫存目錄,拋出偽裝成磁碟錯誤的 ZRC=0x860F0004。
cd ~/sqllib/adm
ls -l .fenced
# 輸出範例:
# -r--r--r-- 1 db2fenc1 db2fgrp1 0 Jul 30 09:57 .fenced
# → Fenced User = db2fenc1,Primary Group = db2fgrp1
groups db2inst1
# 若輸出不含 db2fgrp1,即為根因
# root 執行
usermod -a -G db2fgrp1 db2inst1
# 驗證
groups db2inst1
# 必須顯示 db2fgrp1
常見陷阱:已加入群組但問題持續 → 檢查是否加錯群組(如加入 fenced user 的次要群組而非主群組),或群組名稱拼寫錯誤。必須與 .fenced 檔案顯示的群組**完全一致**。
db2stop; db2start)使群組生效db2diag.log 不再出現 DIA8402C「磁碟錯誤」實為權限遮蔽。記住鐵律:**Instance Owner ∈ Primary Group of Fenced User**。排查三步驟(看 .fenced → 查 groups → 改 usermod)即可秒解,避免在磁碟硬體、檔案系統層面無謂排查。