Устанавливаем Oracle 10gR2 на Ubuntu-10.04
Устанавливаем 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
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
В файле /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
Активируем новые настройки командой
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 при необходимости автостарта
При установке оракл запоминает привязку 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 старой привязки исправило ситуацию.