Установка Oracle XE 11g на Ubuntu 16.04LTS

По работе столкнулся с необходимостью ознакомится с основными командами на Linux. В процессе изучения bash решил на домашней машине переехать с базой данных и с IDE на Ubuntu. С установкой самой операционной системы никаких проблем не возникает, вопросы начали появляться, когда настала очередь базы данных.

На домашних стендах я использую Oracle XE 11g . Установка базы данных на Linux не настолько простой и приятный процесс, как на Windows. Подробную инструкцию для версии Ubuntu 12.04LTS я нашел здесь и выполнил все операции пошагово. Не смотря на то что некоторые параметры не отображались как задумано в инструкции (например fs.file-max), БД установилась. Также у меня не возникло необходимости увеличивать размер swap.

Решил сохранить инструкцию у себя:

Скачать Oracle XE 11g можно по ссылке (требует бесплатного аккаунта)
http://www.oracle.com/technetwork/products/express-edition/downloads/index.html

Распаковываем скачанный файл:

unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip

Производим дополнительную установку:

sudo apt-get install alien libaio1 unixodbc vim

Установщик Oracle XE 11g от Red Hat зависит от файла /sbin/chkconfig, который не используется в Ubuntu. Пакет chkconfig доступный для текущей версии Ubuntu вызывает ошибки и может быть небезопасно использовать. Поэтому нужно будет создать специальный chkconfig скрипт, который поможет обойти эту проблему и позволит установить Oracle XE.

sudo vi /sbin/chkconfig

Вставляем следующий текст в файл:

#!/bin/bash
# Oracle 11gR2 XE installer chkconfig hack for Ubuntu
file=/etc/init.d/oracle-xe
if [[ ! `tail -n1 $file | grep INIT` ]]; then
echo >> $file
echo '### BEGIN INIT INFO' >> $file
echo '# Provides: OracleXE' >> $file
echo '# Required-Start: $remote_fs $syslog' >> $file
echo '# Required-Stop: $remote_fs $syslog' >> $file
echo '# Default-Start: 2 3 4 5' >> $file
echo '# Default-Stop: 0 1 6' >> $file
echo '# Short-Description: Oracle 11g Express Edition' >> $file
echo '### END INIT INFO' >> $file
fi
update-rc.d oracle-xe defaults 80 01
#EOF

Чтобы выйти с сохранением из редактора VI нужно набрать :wq

Добавляем необходимые привилегии на запуск:

chmod 755 /sbin/chkconfig

(у меня сработало только sudo chmod 755 /sbin/chkconfig)

Для установки Oracle XE необходимы следующие параметры ядра:

sudo vi /etc/sysctl.d/60-oracle.conf 

Вставляем следующий текст в файл:

# Oracle 11g XE kernel parameters
fs.file-max=6815744
net.ipv4.ip_local_port_range=9000 65000
kernel.sem=250 32000 100 128
kernel.shmmax=536870912 

Сохраняем.
Загружаем новые параметры ядра:

sudo service procps start 

Проверяем (у меня правильно начало отображаться только после перезагрузки, тем не установка завершилась нормально)

sudo sysctl -q fs.file-max
 -> fs.file-max = 6815744

Некоторые необходимые изменения:

sudo ln -s /usr/bin/awk /bin/awk
sudo mkdir -p /var/lock/subsys
sudo touch /var/lock/subsys/listener 

Конвертируем red-hat ( rpm ) пакет в Ubuntu-пакет (может занять некоторое время) :

sudo alien --scripts -d oracle-xe-11.2.0-1.0.x86_64.rpm

Дальше распаковываем Ubuntu-пакет:

sudo dpkg --install oracle-xe_11.2.0-2_amd64.deb 

Выполняем следующие команды, чтобы избежать MEMORY TARGET ошибки (ORA-00845: MEMORY_TARGET) :

sudo rm -rf /dev/shm
sudo mkdir /dev/shm
sudo mount -t tmpfs shmfs -o size=2048m /dev/shm

(я оставил 2048, хотя размер оперативной памяти для виртуалки у меня 3GB)

Далее создаем файл с именем S01shm_load в папке /etc/rc2.d :

sudo vi /etc/rc2.d/S01shm_load

Сохраняем в файл следующий текст:

#!/bin/sh
case "$1" in
start) mkdir /var/lock/subsys 2>/dev/null
touch /var/lock/subsys/listener
rm /dev/shm 2>/dev/null
mkdir /dev/shm 2>/dev/null
mount -t tmpfs shmfs -o size=2048m /dev/shm ;;
*) echo error
exit 1 ;;
esac 

Сохраняем файл и даем привилегии

chmod 755 /etc/rc2.d/S01shm_load

Так вы обеспечите себе работающую БД при каждом запуске операционной системы.
Инициализируем Oracle и следуем подсказкам:

 sudo /etc/init.d/oracle-xe configure

Также полезно добавить следующие строки в конец файла /etc/bash.bashrc :

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe
export ORACLE_SID=XE
export NLS_LANG=`$ORACLE_HOME/bin/nls_lang.sh`
export ORACLE_BASE=/u01/app/oracle
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME/bin:$PATH

Выполняем чтобы применить эти настройки:

source /etc/bash.bashrc

Запускаем БД:

sudo service oracle-xe start

Все, можно работать.