Настройка автозапуска Oracle Database 12.2 на Oracle Linux 8.Х

Опишем процесс создания и настройки unit`а и вспомогательных скриптов системы инициализации systemd (которая поставляется в дистрибутивах Oracle Linux 7-8 и схожих с ним CentOS и RHEL) для автозапуска служб Oracle Database 12 при старте системы.

Сразу напомню, что процесс настройки для Oracle Linux 6 (с init.d) описан в другой статье [ тут ]. Вообще для меня это загадка, почему Oracle, с их то бюджетами, не могут сделать чтобы все нормально работало из коробки с ИХ софтом в ИХ операционной системе… приходится изгаляться вот так вот вручную.

Ладно поехали, хрен с ними. Все команды выполняем под пользователем oracle.


  1. Создание глобального скрипта с описанием всех необходимых для Oracle переменных окружения
  2. Связываем setEnv.sh с профилем пользователя oracle
  3. Создаем технологические скрипты для systemd unit
  4. Создание и настройки systemd unit для Oracle Database
  5. Проверка

1) Создание глобального скрипта с описанием всех необходимых для Oracle переменных окружения

Но сначала создадим директорию для всех скриптов – scripts в home пользователя oracle:

mkdir /home/oracle/scripts

Далее создадим сам глобальный файл (скрипт) с переменными окружения setEnv.sh:

cat > /home/oracle/scripts/setEnv.sh <<EOF
# Oracle Settings
export TMP=/tmp
export TMPDIR=\$TMP
export ORACLE_HOSTNAME=dboracle
export ORACLE_UNQNAME=DW
export ORACLE_BASE=/home/oracle/app/oracle
export ORACLE_HOME=\$ORACLE_BASE/product/12.2.0/dbhome_1
export ORACLE_SID=DW
export PATH=/usr/sbin:/usr/local/bin:\$PATH
export PATH=\$ORACLE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
export NLS_LANG=AMERICAN_RUSSIA.AL32UTF8
EOF

txt: setEnv

Внимание! После создания скрипта, внесите в него свои переменные (ORACLE_UNQNAME, ORACLE_SID, ORACLE_HOSTNAME). В дальнейшем, просто редактируете этот файл, и переменные окружения с него будут подгружены как в профиль пользователя, так и в настройки systemd unit.

 

2) Связываем setEnv.sh с профилем пользователя oracle

echo ". /home/oracle/scripts/setEnv.sh" >> /home/oracle/.bash_profile

 

3) Создаем технологические скрипты для systemd unit

Скрипт на запуск:

cat > /home/oracle/scripts/start_all.sh <<EOF
#!/bin/bash
. /home/oracle/scripts/setEnv.sh

export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES

dbstart \$ORACLE_HOME
EOF

txt: start_all

Скрипт на остановку:

cat > /home/oracle/scripts/stop_all.sh <<EOF
#!/bin/bash
. /home/oracle/scripts/setEnv.sh

export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES

dbshut \$ORACLE_HOME
EOF

txt: stop_all

Ну и выравниваем права на директорию, делаем скрипты исполняемыми:

chown -R oracle:oracle /home/oracle/scripts
chmod u+x /home/oracle/scripts/*.sh

 

4) Создание и настройки systemd unit для Oracle Database

Создаем файл и открываем его в текстовом редакторе:

sudo nano /etc/systemd/system/oracle-database@.service
[Unit]
Description=The Oracle Database Service
After=syslog.target network.target
[Service]
# systemd ignores PAM limits, so set any necessary limits in the service.
# Not really a bug, but a feature.
# https://bugzilla.redhat.com/show_bug.cgi?id=754285
LimitMEMLOCK=infinity
LimitNOFILE=65535
#Type=simple
# idle: similar to simple, the actual execution of the service binary is delayed
# until all jobs are finished, which avoids mixing the status output with shell output of services.
RemainAfterExit=yes
User=oracle
Group=oracle
Restart=no
ExecStart=/bin/bash -c '/home/oracle/scripts/start_all.sh'
ExecStop=/bin/bash -c '/home/oracle/scripts/stop_all.sh'
[Install]
WantedBy=multi-user.target

txt: unit

Далее, активируем unit через systemd:

sudo systemctl enable oracle-database@oracle.service

Теперь рекомендуется сделать полный reboot (так будет проще, чем останавливать уже запущенный Oracle вручную и делать systemd daemon-reload):

sudo reboot

 

5) Проверка

Проверяем отработал ли автозапуск, смотрим unit подробный статус (количество процессов, аптайм, объем потребленной оперативной памяти и т.д.):

sudo systemctl -l status oracle-database@oracle.service

Если все ОК, используем следующие команды в дальнейшем для запуска/остановки на работающей системе:

sudo systemctl start oracle-database@oracle.service
sudo systemctl stop oracle-database@oracle.service

Итого: все настройки универсальны, но на каждом новом сервере, нужно лишь вносить изменения в файл переменными окружения setEnv.sh меняя там параметры на новые (см. п.1). Остальные конфиги и скрипты оставляем без изменений.

Добавить комментарий