增加共享内存段

WebSphere® Business Monitor 尝试处理 AIX® 平台上的事件时,返回 SQL 错误。在启动或事件处理期间,WebSphere 初始化数据库连接失败时,也会返回 SQL 错误。 该故障的原因是由于 IBM® DB2® 可用的共享内存段数量的操作系统强制性限制。

当从 WebSphere Admin Console(jdbc 资源)进行的测试连接失败且显示以下错误时:
Test connection failed for data source MonitorDataSource on server server1 at
node Node01 with the following exception: java.lang.Exception:
java.sql.SQLException: SQL1224N A database agent could not be started to
service a request, or was terminated as a result of a database system shutdown
or a force command. SQLSTATE=55032 DSRA0010E: SQL State = 55032, Error
Code = -1,224.
该错误很可能表明 AIX 允许数据库拥有的共享系统段数量已超出。

当发生该错误时,您必须更改 DB2 配置,增加共享内存段的数量。当前,恢复专家不支持定义 具有回送的 DB2 别名 以避免发生共享内存问题。

解决方案

DB2 使用扩展扩展功能来防止发生该问题。要启用该功能,请将下列行添加到靠近 /etc/rc.db2 和 <instance_home>/sqllib/db2profile(其中,<instance_home> 是每个实例用户的主目录;例如,/home/db2inst1)的开头的位置,位于块注释之后,但是任何可执行行之前:
# Local addition to fix AIX shared memory problem:
EXTSHM=ON
export EXTSHM
注: 该项区分大小写。将该项添加到所有实例用户和管理员服务器用户的 db2profiles 中。 然后作为实例用户和管理员服务器用户登录,并执行下列命令:
db2set DB2ENVLIST=EXTSHM

该命令设置每个实例中的 DB2 概要文件变量,在启动时,使 EXTSHM 环境变量的值包含在 DB2 守护进程的环境中。 在每个实例的 db2profiles 中定义 EXTSHM(在登录时执行),确保在任何实例所有者环境中设置变量。 最后,将其放入 /etc/rc.db2 中,确保启动过程中,启动 DB2 过程时,设置变量。最后,重新启动系统以确保所有 DB2 过程在其环境中以 EXTSHM=ON 启动。

如果想要在将来创建实例时将修订自动应用到新实例,请添加设置 EXTSHM 并将其导出至文件 /usr/lpp/db2_08_02/cfg/db2profile 的行,其中,文件将被复制到实例创建时的 <instance_home>/sqllib/db2profile。 要确保也设置了 DB2ENVLIST 概要文件变量,请在设置变量 INSTHOME 后,添加该代码:
if [ -x $INSTHOME/sqllib/adm/db2set ]
then if [ "`$INSTHOME/sqllib/adm/db2set DB2ENVLIST`" != "EXTSHM" ]
then $INSTHOME/sqllib/adm/db2set DB2ENVLIST=EXTSHM
fi
fi
该代码会使第一次使用新实例时,设置 DB2ENVLIST 实例概要文件变量。
注:
  • 假定 DB2 V8.0 安装在 /usr/lpp/db2_08_02。 如果安装在其他位置,必须使用您的安装位置。
  • 对于 DB2 v8.0,您应该将下列行添加到 <instance_home>/sqllib/userprofile 文件(如果存在);或者,以权限 755 创建用户概要文件。这些行是:
    EXTSHM=ON
    export EXTSHM

Copyright IBM Corporation 2005, 2006. All Rights Reserved.