В данной заметке пойдёт речь о подготовке Ubuntu 12.04 amd64 к установки СУБД Oracle 11g Release 1, так как мне не удалось найти подходящий мануал на эту тему.
Итак, начнём установку Oracle:
Минимальный софт, который необходимо установить перед запуском инсталятора базы:
sudo apt-get install alien autoconf automake autotools-dev binutils bzip2 doxygen elfutils expat gawk gcc gcc-multilib g++-multilib ia32-libs ksh less lesstif2 lesstif2-dev lib32z1 libaio1 libaio-dev libc6-dev libc6-dev-i386 libc6-i386 libelf-dev libltdl-dev libmotif4 libodbcinstq4-1 libodbcinstq4-1:i386 libpth-dev libpthread-stubs0 libpthread-stubs0-dev libstdc++5 lsb-cxx make openssh-server pdksh rlwrap rpm sysstat unixodbc unixodbc-dev unzip x11-utils zlibc openssh-server
Так же нам потребуется 32х битная библиотека libstdc++5:
wget -c http://mirror.yandex.ru/ubuntu/pool/universe/g/gcc-3.3/libstdc++5_3.3.6-25ubuntu1_i386.deb
Теперь её нужно принудительно установить, так как система у нас 64х битная:
sudo dpkg --force-architecture -i libstdc++5_3.3.6-25ubuntu1_i386.deb
Если установка будет осуществляться на локальной машине, то ещё потребуется графический сервер, так как установщик написал на графической библиотеке java:
apt-get install xorg
Затем добавим необходимые группы и пользователей:
groupadd oinstall groupadd dba groupadd nobody useradd -g oinstall -G dba,nobody -d /opt/oracle -s /bin/bash oracle passwd oracle
Затем потребуются директории, в которых будет находиться наша будущая СУБД:
mkdir -pv /opt/oracle /opt/oraInventory /etc/rc.d chown -R oracle:oinstall /opt/oracle /opt/oraInventory chmod -R 755 /opt/oracle
Теперь необходимо отредактировать файл /etc/profile и добавить в него следующие строки:
export ORACLE_BASE=/opt/oracle export ORACLE_HOME=$ORACLE_BASE/product/11gR2/dbhome_1 export ORACLE_SID=orcl LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib PATH=$PATH:$ORACLE_HOME/bin if [ "$USER" = oracle ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384; ulimit -n 65536; else ulimit -u 16384 -n 65536; fi fi
Теперь требуется настройка /etc/sysctl.conf (скорее всего на этапе проверки установщик будет рекомендовать Вам свои параметры)
kernel.shmall = 2097152 kernel.shmmax = 4294967295 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 fs.file-max = 6815744 fs.aio-max-nr = 1048576 net.ipv4.ip_local_port_range = 9000 65000
Применим новые параметры командой:
sysctl -p
Теперь настроим файл /etc/security/limits.conf, необходимо добавить в него следующее:
oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536
Создадим необходимые символические ссылки:
mkdir -pv /usr/lib64 ln -s /usr/bin/basename /bin/basename ln -sf /bin/bash /bin/sh ln -s /usr/bin/rpm /bin/rpm ln -s /usr/bin/awk /bin/awk ln -s /usr/lib/x86_64-linux-gnu/libc_nonshared.a /usr/lib64 ln -s /usr/lib/x86_64-linux-gnu/libpthread_nonshared.a /usr/lib64 ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/lib64 ln -s /lib/i386-linux-gnu/libgcc_s.so.1 /lib64 ln -s /usr/lib/i386-linux-gnu/libpthread_nonshared.a /usr/lib/libpthread_nonshared.a
Убедимся в том что имеется требуемая строка (session required pam_limits.so):
cat /etc/pam.d/login | grep session | grep pam_limits
Теперь требуется файл /etc/init.d/oracle-shm со следующим содержимым:
#! /bin/sh # ### BEGIN INIT INFO # Provides: oracle-shm # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Bind /run/shm to /dev/shm at system startup. # Description: Fix to allow Oracle 11g use AMM. ### END INIT INFO # case "$1" in start) echo "Starting script /etc/init.d/oracle-shm" # Run only once at system startup if [ -e /dev/shm/.oracle-shm ]; then echo "/dev/shm is already mounted, nothing to do" else rm -f /dev/shm mkdir /dev/shm mount -B /run/shm /dev/shm touch /dev/shm/.oracle-shm fi ;; stop) echo "Stopping script /etc/init.d/oracle-shm" echo "Nothing to do" ;; *) echo "Usage: /etc/init.d/oracle-shm {start|stop}" exit 1; ;; esac
Затем сделаем файл исполняемым и добавим его в уровни по умолчанию:
chmod a+x /etc/init.d/oracle-shm update-rc.d oracle-shm defaults 98
Запустим демон, после чего проверим всё ли прошло так как нам нужно:
/etc/init.d/oracle-shm start cat /etc/mtab | grep shm
Если есть эти 2 строки, то значит всё прошло удачно:
none /run/shm tmpfs rw,nosuid,nodev 0 0 /run/shm /dev/shm none rw,bind 0 0
Теперь залогинимся из под учётной записи oracle и распакуем пакеты с базой данных:
unzip Linux-x86-64_1of7.zip unzip Linux-x86-64_2of7.zip
Перейдём в директорию с установщиком и запустим его:
startx cd database ./runInstaller
Во время этапа линковки у Вас наверняка вылезет ошибка сборки типа Error in invoking target 'agent nmhs' of makefile (ничего не отменяем), чтобы избавиться от неё откроем ещё одну консоль, например от имени пользователя oracle и выполнить следующие команды:
sed -i 's/^(s*$(MK_EMAGENT_NMECTL))s*$/1 -lnnz11/g' $ORACLE_HOME/sysman/lib/ins_emagent.mk sed -i 's/^($LD $LD_RUNTIME) ($LD_OPT)/1 -Wl,--no-as-needed 2/g' $ORACLE_HOME/bin/genorasdksh sed -i 's/^(s*)($(OCRLIBS_DEFAULT))/1 -Wl,--no-as-needed 2/g' $ORACLE_HOME/srvm/lib/ins_srvm.mk sed -i 's/^(TNSLSNR_LINKLINE.*$(TNSLSNR_OFILES)) ($(LINKTTLIBS))/1 -Wl,--no-as-needed 2/g' $ORACLE_HOME/network/lib/env_network.mk sed -i 's/^(ORACLE_LINKLINE.*$(ORACLE_LINKER)) ($(PL_FLAGS))/1 -Wl,--no-as-needed 2/g' $ORACLE_HOME/rdbms/lib/env_rdbms.mk sed -i 's/^(KFED_LINKLINE.*$(S0MAIN)) ($(SSKFEDED))/1 -Wl,--no-as-needed 2/g' $ORACLE_HOME/rdbms/lib/env_rdbms.mk sed -i 's/^(KFOD_LINKLINE.*$(S0MAIN)) ($(SSKFODED))/1 -Wl,--no-as-needed 2/g' $ORACLE_HOME/rdbms/lib/env_rdbms.mk sed -i 's/^(KFNDG_LINKLINE.*$(S0MAIN)) ($(SSKFNDGED))/1 -Wl,--no-as-needed 2/g' $ORACLE_HOME/rdbms/lib/env_rdbms.mk sed -i 's/^(AMDU_LINKLINE.*$(S0MAIN)) ($(SSKFMUED))/1 -Wl,--no-as-needed 2/g' $ORACLE_HOME/rdbms/lib/env_rdbms.mk
ORACLE_KERNEL_LIBS=$(LLIBSKGTR) $(LLIBPERFSRV) $(NAETTOBJS) $(CONFIG) $(SPOBJS) $(LLIBSERVER) $(LLIBODM) $(LLIBSAGE)
ORACLE_KERNEL_LIBS=$(LLIBSKGTR) $(LLIBPERFSRV) $(NAETTOBJS) $(CONFIG) $(SPOBJS) -Wl,--no-as-needed $(LLIBSERVER) $(LLIBODM) $(LLIBSAGE)
GETCRSHOME_LINKLINE=$(LINK) $(LDPATHFLAG)$(RDBMSLIB) $(CDEBUG) $(OPT) $(GETCRSHOME_OBJ1) $(OCRLIBS_DEFAULT) $(LLIBCLNTSH)
GETCRSHOME_LINKLINE=$(LINK) $(LDPATHFLAG)$(RDBMSLIB) $(CDEBUG) $(OPT) $(GETCRSHOME_OBJ1) -Wl,--no-as-needed $(OCRLIBS_DEFAULT) $(LLIBCLNTSH)
Затем в инсталяторе нажмём кнопку Retry. После чего установка пройдёт без ошибок.
По завершению всех шагов с развёртыванием базы скорее всего возникнет сложность с неочевидной ошибкой MEMORY_TARGET, после которой не хочет запустаться Asistant для создания базы. Обойти её можно добави в файл /etc/fstab строку вида:
tmpfs /run tmpfs rw,nosuid,noexec,size=2000m 0 0
Затем выполнить команду:
mount -o remount /run
или
mount -o remount,size=2000m /run
И вновь нажать Retry в инсталяторе.
По завершению установки нас попросят выполнить скрипт root.sh, сделаем это:
sudo bash $ORACLE_HOME/root.sh
Теперь нам потребуется скрипт запуска базы данных:
#!/bin/bash # # /etc/init.d/oracledb # # Run-level Startup script for the Oracle Listener and Instances # It relies on the information on /etc/oratab . /etc/profile if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ]; then echo "Oracle startup: cannot start" exit 1 fi case "$1" in start) # Oracle listener and instance startup echo -n "Starting Oracle: " su $ORACLE_OWNR -c "$ORACLE_HOME/bin/lsnrctl start" su $ORACLE_OWNR -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME" su $ORACLE_OWNR -c "$ORACLE_HOME/bin/emctl start dbconsole" touch /var/lock/oracle echo "OK" ;; stop) # Oracle listener and instance shutdown echo -n "Shutdown Oracle: " su $ORACLE_OWNR -c "$ORACLE_HOME/bin/emctl stop dbconsole" su $ORACLE_OWNR -c "$ORACLE_HOME/bin/lsnrctl stop" su $ORACLE_OWNR -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME" rm -f /var/lock/oracle echo "OK" ;; reload|restart) $0 stop $0 start ;; *) echo "Usage: `basename $0` start|stop|restart|reload" exit 1 ;; esac exit 0
Далее выполним следующие команды:
chmod a+x /etc/init.d/oracledb update-rc.d oracledb defaults 99
Затем отредактируем файл /etc/oratab и запишем в него:
orcl:/opt/oracle/product/11gR2/dbhome_1:Y
Теперь настроим timezone, иначе Enterprise Manager не будет запускаться:
/etc/init.d/oracledb stop
Откроем в текстовом редакторе файл /etc/profile и добавим в него строку:
export TZ=Etc/GMT-4
После чего перечитаем конфиг из под пользователя oracle:
source /etc/profile
Сбросим настройки часового пояса у агента oracle:
$ORACLE_HOME/bin/emctl resetTZ agent
Теперь необходимо разблокировать пользователя SYSMAN, для этого необходимо залогиниться из под пользователя oracle:
sqlplus /nolog conn / as sysdba ALTER USER SYSMAN ACCOUNT UNLOCK;
Ну во вроде и всё, удачного вам рабочего дня! 😉