首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

解決 Unix 平台上 DB2 建立預存程序權限錯誤

     編輯:DB2 教學

問題現象

在 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 預存程序要求實例使用者必須屬於受防護用戶的主群組。若實例使用者未加入該群組,會導致存取權限不足,進而觸發此錯誤。

解決方案

  1. 將實例使用者加入受防護用戶的主群組。
  2. 若加入後問題仍存在,需確認加入的群組是否正確(即該受防護用戶的主群組)。

查找受防護用戶及其主群組

  1. 切換至實例使用者 Home 目錄下的 sqllib/adm 路徑。
  2. 執行 ls -l .fenced,輸出範例:
    -r--r--r-- 1 db2fencj db2fgrp2 0 Jul 30 09:57 .fenced
  3. 輸出中,檔案擁有者 db2fencj 即為受防護用戶,所屬群組 db2fgrp2 即為其主群組。

確認實例使用者已加入正確群組後,即可解決建立預存程序失敗的問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved