Увеличение числа сегментов общей памяти

При попытке WebSphere Business Monitor обработать событие в системе AIX возвращена ошибка SQL. А также, WebSphere не удается инициализировать соединение как во время запуска, так и при обработке события. The failure results from an operating-system-imposed limit on the number of shared memory segments available to IBM DB2.

Во время Тестового соединения из Административной консоли WebSphere (ресурс 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 и <каталог_экземпляра>/sqllib/db2profile, (где <каталог_экземпляра> - это домашний каталог пользователя экземпляра, например, /home/db2inst1) после блока комментариев, но перед строками команд:
# Локальное дополнение для исправления ошибки общей памяти AIX:
EXTSHM=ON
export EXTSHM
Прим.: Запись учитывает регистр. Поместите запись в db2profiles всех пользователей экземпляра и администратора сервера. Затем войдите в систему от имени каждого пользователя и администратора и выполните следующую команду:
db2set DB2ENVLIST=EXTSHM

Она устанавливает переменную профайла DB2 в каждом экземпляре, что приводит к включению значения переменной среды EXTSHM в среду DB2, которую обрабатывают демоны при запуске. Определение EXTSHM в db2profiles каждого экземпляра, которые выполняются при входе в систему, гарантирует, что переменная будет установлена во всех средах, которыми владеет экземпляр. Наконец, помещение в /etc/rc.db2 гарантирует, что переменная будет установлена при запуске процессов DB2. Перезапустите систему, для того чтобы все процессы DB2 были запущены со значением среды EXTSHM=ON.

Если вы хотите, чтобы исправление автоматически применялось к новым экземплярам при их создании в будущем, добавьте строки, которые устанавливают и экспортируют EXTSHM в файл /usr/lpp/db2_08_02/cfg/db2profile, который копируется в <каталог_экземпляра>/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 версии 8.0 установлен в /usr/lpp/db2_08_02. Если установка расположена в другом расположении, нужно работать с ним.
  • Для DB2 версии 8.0 необходимо добавить следующие строки в файл <каталог_экземпляра>/sqllib/userprofile, если он существует. В противном случае, создайте профайл с правами доступа 755. Строки имеют вид:
    EXTSHM=ON
    export EXTSHM

Copyright IBM Corporation 2005. Все права защищены.