分类:
2008-04-13 00:15:53
来源:Developerworks中国 |
问:在 Unix 操作系统下,有时会发生当 DB2 用户使用如:
db2 -td@ -vf <存储过程创建脚本文件> 创建存储过程失败的情况,而查看 db2diag.log 文件则发现有类似如下报错信息: -------------------------------------------------------------- errno: PID:1355876 TID:1 Node:000 Title: Path/Filename 2002-10-05-13.47.40.166289 Instance:db2inst1 Node:000 DIA8402C A disk error has occurred. PID:1355876 TID:1 Node:000 Title: SQL procedure initialization: 答:在 Unix 平台下的 DB2 存储过程对于实例用户和受防护用户之间的关系有一个约束,即 DB2 实例用户必须同时是受防护用户的主组中的一个用户。上述问题的发生就是由于在系统上,实例用户未加入至受防护用户的主组中,从而引发了存取权限不够的问题所导致的,而并非真的发生了如日志中所报的磁盘错误。解决这一问题的方法很简单,只要将实例用户加入该主组即可。但有时用户会发现,即使已将用户加入到指定组,问题仍然存在,这时还应检查一下实例用户所加入的组是否是实例用户所对应的受防护用户的主组,即检查一下加入的组是否正确。 要找到实例用户所应的受防护用户以及受防护用户的主组,可用如下方法: 1. 转入实例用户 Home 路径下的 sqllib/adm 路径 2. 执行命令:ls -l .fenced,会得到类似如下输出: -r--r--r-- 1 db2fencj db2fgrp2 0 Jul 30 09:57 .fenced 3. 输出中表明,该文件所属的用户(db2fencj)即为受防护用户,所属的组(db2fgrp2)即为受防护用户的主组 继而,用户便可验证实例用户是否被加入到了正确的组中,如果结果正确,便可以解决上述问题。 |