среда, 24 октября 2012 г.

Устанавливаем Oracle 10gR2 на Ubuntu-10.04

1. Устанавливаем пакеты, требуемые для оракла

apt-get install unzip build-essential x11-utils rpm ksh lsb-rpm libaio1
apt-get install libc6 libc6-dev linux-libc-dev alien binutils libdb1-compat make gcc libgcc1 sysstat unixODBC unixODBC-dev pdksh elfutils libelf-dev
apt-get install libaio-dev libstdc++6
apt-get install libstdc++6-4.3-dev # libstdc++-dev
apt-get install gdc lib32c-dev libc6-i386 libc6-dev-i386
apt-get install ssh lsh-client
apt-get install rlwrap # для врапера sqlplus
apt-get install sysv-rc-conf # для настройки демона автозапуска прослушивателя

2. Качаем либы C++ версии 5, требуемые для оракла, доставляем их руками

wget mirrors.kernel.org/ubuntu/pool/universe/g/gcc-3.3/libstdc++5_3.3.6-17ubuntu1_amd64.deb
dpkg-deb -x libstdc++5_3.3.6-17ubuntu1_amd64.deb ia64-libs
sudo cp ia64-libs/usr/lib/libstdc++.so.5.0.7 /usr/lib64/
cd /usr/lib64/
sudo ln -s libstdc++.so.5.0.7 libstdc++.so.5

cd

wget security.ubuntu.com/ubuntu/pool/universe/i/ia32-libs/ia32-libs_2.7ubuntu6.1_amd64.deb
dpkg-deb -x ia32-libs_2.7ubuntu6.1_amd64.deb ia32-libs
sudo cp ia32-libs/usr/lib32/libstdc++.so.5.0.7 /usr/lib32/
cd /usr/lib32
sudo ln -s libstdc++.so.5.0.7 libstdc++.so.5

2.1 Доставляем библиотеку (после того как мы руками создали линки на библиотеки)

apt-get install ia32-libs # ia64-libs

3. Создаем пользователя и группу

sudo su — addgroup oinstall
addgroup dba
addgroup nobody

useradd -s /bin/bash -g oinstall -G dba oracle -d /opt/oracle
passwd oracle
mkdir /opt/oracle
chown -R oracle:oinstall /opt/oracle

4. Создаем ссылки на ПО по образу рэд-хата

ln -s /usr/bin/awk /bin/awk
ln -s /usr/bin/rpm /bin/rpm
ln -s /usr/bin/basename /bin/basename
sudo ln -s /lib/libgcc_s.so.1 /lib/libgcc_s.so
mkdir /etc/rc.d
for i in 0 1 2 3 4 5 6 S; do ln -s /etc/rc$i.d /etc/rc.d/rc$i.d; done
mkdir -p /opt/oracle/database
chown -R oracle:oinstall /opt/oracle/database

5. Правим параметры sysctl

В файле /etc/sysctl.conf (предварительно делаем бэкап файла)

fs.file-max = 6815744
fs.aio-max-nr = 1048576
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 1048576
net.core.wmem_max = 1048576
net.ipv4.ip_local_port_range = 9000 65535
vm.swappiness=5

В файле /etc/security/limits.conf (предварительно делаем бэкап файла)

oracle soft nproc 2047
oracle hard nproc 16383
oracle soft nofile 1023
oracle hard nofile 65535

Активируем новые настройки командой

sysctl -p

6. Запускаем инсталлер (предварительно логинимся пользователем oracle)

!!! Перед запуском обязательно устанавливаем переменные окружения:

export ORACLE_HOME=/opt/oracle/database
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME/lib32
cd db_linux64_install
./runInstaller -ignoreSysPrereqs

При ошибке: ins_emdb (error invoking target 'collector' ...) просто жмакаем «Continue»


7. Правим профайл юзера оракла (/opt/oracle/.bashrc) (или лучше системный профайл /etc/profile), добавляем

ORACLE_BASE=/opt/oracle
ORACLE_HOME=/opt/oracle/database
ORACLE_SID=ndb
export ORACLE_BASE ORACLE_HOME ORACLE_SID
PATH=$ORACLE_HOME/bin:$PATH:.
export PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/lib:/usr/lib
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export LD_LIBRARY_PATH CLASSPATH
alias sqlplus='rlwrap sqlplus'
export NLS_LANG=AMERICAN_AMERICA.UTF8
export JAVA_HOME=/usr/lib/jvm/java-6-sun

8. Послеустановочные действия
DBCA на различные действия (создание БД например) может ругаться

ORA-27125: unable to create shared memory segment

решение такое:

cd $ORACLE_HOME/bin
mv oracle oracle.bin
vi oracle # и вносим строчки в него
#!/bin/bash
export DISABLE_HUGETLBFS=1
exec $ORACLE_HOME/bin/oracle.bin $@
chmod +r oracle
chmod +x oracle

9. Настраиваем автозапуск прослушивателя

su — cd /etc/init.d
vi listener # создаем демон запуска/остановки прослушивателя

— file begin — #!/bin/bash
#
# chkconfig: 345 51 49
# description: startup and shutdown the Oracle 10g listener
#
echo «Oracle 10g listener start/stop/restart/status»
ORA_OWNER=oracle
ORACLE_BASE=/opt/oracle
ORACLE_HOME=/opt/oracle/database
ORACLE_SID=navdb
export ORACLE_BASE ORACLE_HOME ORACLE_SID
PATH=$ORACLE_HOME/bin:$PATH:.
export PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/lib:/usr/lib
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export LD_LIBRARY_PATH CLASSPATH
alias sqlplus='rlwrap sqlplus'
export NLS_LANG=AMERICAN_AMERICA.UTF8

case $1 in
start)
echo -n «Starting oracle listener: „
su — $ORA_OWNER -c “$ORACLE_HOME/bin/lsnrctl start»
echo
;;

stop)
echo -n «Shutting down oracle listener: „
su — $ORA_OWNER -c “$ORACLE_HOME/bin/lsnrctl stop»
echo
;;

status)
echo -n «Status of oracle listener: „
su — $ORA_OWNER -c “$ORACLE_HOME/bin/lsnrctl status»
echo
;;

restart)
echo -n «Restarting oracle listener:»
$0 stop
$0 start
echo
;;
*)

echo «Usage: listener [ start | stop | restart | status ]»
exit 1
esac
exit 0
— file end — chmod 700 listener
sysv-rc-conf --level 2345 listener on # в некоторых версиях не работает так, приходится ручками править через sysv-rc-conf (она графическая в консоли)

10. Настраиваем автозапуск инстанса
создаем файл /etc/init.d/oracle, который будет читать настройки из файла /etc/oratab и запускать соответствующие инстансы

— file begin — #!/bin/bash
#
# /etc/init.d/oracle
#
# Run-level Startup script for the Oracle Instance, Listener, and Web Interface

echo «Oracle 10g database start/stop/restart»
ORA_OWNER=oracle
ORACLE_BASE=/opt/oracle
ORACLE_HOME=/opt/oracle/database
ORACLE_SID=navdb
export ORACLE_BASE ORACLE_HOME ORACLE_SID
PATH=$ORACLE_HOME/bin:$PATH:.
export PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/lib:/usr/lib
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export LD_LIBRARY_PATH CLASSPATH
alias sqlplus='rlwrap sqlplus'
export NLS_LANG=AMERICAN_AMERICA.UTF8

# if the executables do not exist — display error

if [! -f $ORACLE_HOME/bin/dbstart -o! -d $ORACLE_HOME ]
then
echo «Oracle startup: cannot start»
exit 1
fi

# depending on parameter — startup, shutdown, restart
# of the instance and listener or usage display

case "$1" in
start)
# Oracle listener and instance startup
echo -n «Starting Oracle: „
su $ORA_OWNER -c “$ORACLE_HOME/bin/lsnrctl start»
su $ORA_OWNER -c $ORACLE_HOME/bin/dbstart
touch /var/lock/oracle
# su $ORA_OWNER -c "$ORACLE_HOME/bin/emctl start dbconsole"
echo «OK»
;;
stop)
# Oracle listener and instance shutdown
echo -n «Shutdown Oracle: „
su $ORA_OWNER -c “$ORACLE_HOME/bin/lsnrctl stop»
su $ORA_OWNER -c $ORACLE_HOME/bin/dbshut
rm -f /var/lock/oracle
# su $ORA_OWNER -c "$ORACLE_HOME/bin/emctl stop dbconsole"
echo «OK»
;;
restart)
$0 stop
$0 start
;;
*)
echo «Usage: `basename $0` start|stop|restart»
exit 1
esac
exit 0
— file end — chmod 700 oracle
sysv-rc-conf --level 2345 oracle on

Настраиваем нужные инстансы в /etc/oratab, заменяет :N на :Y при необходимости автостарта

11. Особенности:

При установке оракл запоминает привязку IP к имени компа в /etc/hosts. Был такой случай когда я поменял привязку
127.0.1.1 ubuntu-server-test
на
127.0.1.1 server-test
после этой замены экземпляры оракла перестали запускаться с ошибкой:
ubuntu ORA-00600: internal error code, arguments: [keltnfy-ldmInit], [46], [1], [], [], [], [], []
добавление в /etc/hosts старой привязки исправило ситуацию.

12. Все.