我爱电脑技术论坛's Archiver

不和人说话 发表于 2008-5-15 08:15

DB2数据库创建存储过程时遇到的错误现象

问:在 Unix 操作系统下,有时会发生当 DB2 用户使用如: :j1d pcM'j$\y"S
C\/\$rXw\[-W[ q8w

A I3G/`VA7g.x'N db2 -td@ -vf <存储过程创建脚本文件>
lt`X^{*D@q+}1p
g2Y.EyFz[Yb m'U#dWN e(n
创建存储过程失败的情况,而查看 db2diag.log 文件则发现有类似如下报错信息: ;N p!G Q2_ kMZy
b,NCp k vo{U
"E+@%?0dp/S\
t.T0@i*Rrsq
,W,W1M7CG/X.vX'Js
2002-10-05-13.47.40.075759 Instance:db2inst1 Node:000 2k7YqK%BPIU

7?ztD\i PID:1355876(db2agent (ABC) 0) TID:1 Appid:OC10103F.OD12.017302185202 t.t[E%?

g{fD!]4c oper system services sqloChangeFileOwnership Probe:100 Database:ABC 6sFPK0y#e ~3T

I2]&^/db
A7at;{0@5a errno: DHD,^*h)_'NH

i]0A d:Kf+g};} 0x0FFFFFFFFFFF7AF0 : 0x00000001 ....
a-z J0Q%]0GnPK
:I T!?x%U jd1EA ]D:?U6ps7Fi&jv
PID:1355876 TID:1 Node:000 Title: Path/Filename )`f^Kun#v

'D:M(^5OLNy8] /home/db2inst1/sqllib/function/routine/sqlproc/ABC/DB2INST1/tmp/
bOy-@(U5@cF]
1B8J)y\,AK3u
4Iw+k5l0GSk4}5AJ$s 2002-10-05-13.47.40.166289 Instance:db2inst1 Node:000 P"rLk3?K"lH
0W;H W1[U/\Z_
PID:1355876(db2agent (ABC) 0) TID:1 Appid:OC10103F.OD12.017302185202
.T+G.s yjJ-Exa
N;q.L'FU;]^*j/Y V PSM - SQL Procedure psm_ctrl::psm_init_backend Probe:230 Database:ABC (Hkx#yu3@_
!qWq$o4{YR5{
GpHnh
DIA8402C A disk error has occurred. G@.q,B!e!S s8`2r

Y!l$T,s-rcNHe:H ZRC=0x860F0004
9[DfS(N r)k3Cyi1xCJ^l0Y0X/S

L6Z,x8lw'}g? PID:1355876 TID:1 Node:000 Title: SQL procedure initialization:
eej4UX5FV(@W:@ {Zh:F:RJwvT
0x09000000031213BC : 696E 7374 616E 6365 206F 776E 6572 2064 instance owner d
4O,q;zIJ[ 5m~:K6A]hg
0x09000000031213CC : 6F65 7320 6E6F 7420 6265 6C6F 6E67 2074 oes not belong t ,A Kl$Sn$h f

+m#KQK5Oo 0x09000000031213DC : 6F20 6665 6E63 6564 2075 7365 7227 7320 o fenced user's
Ki'HdW(lA h8`#[b+] p3uu2wQ
0x09000000031213EC : 7072 696D 6172 7920 6772 6F75 70 primary group m8f%Bo9p&~gfD
Of G/S4IAz
/S_ziwg%T
答:在 Unix 平台下的 DB2 存储过程对于实例用户和受防护用户之间的关系有一个约束,即 DB2 实例用户必须同时是受防护用户的主组中的一个用户。上述问题的发生就是由于在系统上,实例用户未加入至受防护用户的主组中,从而引发了存取权限不够的问题所导致的,而并非真的发生了如日志中所报的磁盘错误。解决这一问题的方法很简单,只要将实例用户加入该主组即可。但有时用户会发现,即使已将用户加入到指定组,问题仍然存在,这时还应检查一下实例用户所加入的组是否是实例用户所对应的受防护用户的主组,即检查一下加入的组是否正确。
`|jmq+b
v7o6d9Q u1co rm%h t&GA3i
要找到实例用户所应的受防护用户以及受防护用户的主组,可用如下方法:
:g;V@4^-ytf*C7[7qF
T6W&Cp[fa ){Dhl Q/l
1. 转入实例用户 Home 路径下的 sqllib/adm 路径 +jy(E8Sm,l

/cv7}POB ~
eS-n } Hf O8S\ 2. 执行命令:ls -l .fenced,会得到类似如下输出:
z c[)CQ7Fx6v
!QL+i2~+z a\^ ^*?g;Z
5c,P{5u| ? -r--r--r-- 1 db2fencj db2fgrp2 0 Jul 30 09:57 .fenced )lY7L ZBAQ?

O$OT1VJ#^ ?[Jc+I
3. 输出中表明,该文件所属的用户(db2fencj)即为受防护用户,所属的组(db2fgrp2)即为受防护用户的主组 wc^+]%]8gmk-Ki
@opmo)[:N

d Q l?Z 继而,用户便可验证实例用户是否被加入到了正确的组中,如果结果正确,便可以解决上述问题。

页: [1]

Powered by 我爱电脑技术论坛 Archiver 6.1.0  © 2001-2007 本SEO插件由网络人站长论坛出品