Instalacja Oracle 10g w Gentoo

Ten wpis został napisany dawno temu i może być już nieaktualny.

Oracle wspiera instalację swojej bazy danych tylko na niektórych dystrybucjach (np RedHat, SUSE). Wystarczy jednak odpowiednio przygotować system, aby dział na praktycznie każdej nowoczesnej dystrybucji. Przedstawiam opis bazujący na Gentoo, ale w podobny sposób zrobiłem to w Fedorze.

Użytkownik oracle

System bazy danych uruchamiany będzie z uprawnieniami specjalnego użytkownika (oracle), którego musimy dodać samodzielnie. Utworzymy też grupy oinstall (dla użytkowników utrzymujących instalację Oracle'a) i dba (dla administratorów bazy danych). Oczywiście wszystkie operacje wykonujemy z konta root:

mephisto ~ $  groupadd dba
mephisto ~ $  groupadd oinstall
mephisto ~ $  useradd -m -g oinstall -G dba -d /opt/oracle oracle
mephisto ~ $  passwd oracle

Sprostając wymaganiom

W poniższej tabeli zestawione są minimalne wartości parametrów jądra, których wymaga Oracle 10g. W ostatniej kolumnie znajduje się polecenie go sprawdzające.

Parametr Minimalna wartość Polecenie sprawdzające

shmmax 2147483648 cat /proc/sys/kernel/shmmax

shmmni 4096 cat /proc/sys/kernel/shmmni

shmall 2097152 cat /proc/sys/kernel/shmall

shmmin 1 ipcs -lm |grep "min seg size"

semmsl 250 awk '{print $1}' /proc/sys/kernel/sem

semmns 32000 awk '{print $2}' /proc/sys/kernel/sem

semopm 100 awk '{print $3}' /proc/sys/kernel/sem

semmni 128 awk '{print $4}' /proc/sys/kernel/sem

file-max 65536 cat /proc/sys/fs/file-max

ip_local_port_range 1024 65000 cat /proc/sys/net/ipv4/ip_local_port_range W moim przypadku wszystkie parametry posiadały minimum wymaganych wartości. Gdyby tak nie było lub nie satysfakcjonuje nas minimum, można je wszystkie zmienić w pliku /etc/sysctl.conf.

kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000

Zmiany zostaną zastosowane po restarcie komputera lub wydaniu polecenia 'sysctl -p'.

Przekraczając limity

Oprócz dostosowania parametrów jądra musimy także podnieść użytkownikowi oracle limity jednocześnie otwartych deskryptorów plików i liczby uruchomionych procesów. Pozwolą nam na to odpowiednie wpisy w pliku /etc/security/limits.conf:

oracle               soft     nofile   4096
oracle               hard    nofile   63536
oracle               soft     nproc   2047
oracle               hard    nproc   16384

Należy się też upewnić, że pam_limits jest skonfigurowane w /etc/pam.d/system-auth:

session required /lib/security/pam_limits.so
session required /lib/security/pam_unix.so

Dzięki temu użytkownik oracle będzie mógł‚ podnieść swoje limity aż do górnej granicy (hard) przy pomocy 'ulimit -n 63536' (deskryptory plików) i 'ulimit -u 16384' (liczba uruchomionych procesów). Po wydaniu tych poleceń możemy upewnić się o zastosowanych zmianach w następujący sposób:

oracle@mephisto ~/ $ ulimit -n -u
open files                      (-n) 63536
max user processes        (-u) 16384

Aby powyższe parametry były ustalane przy starcie systemu dodamy krótki skrypt do /etc/profile.d/oracle.sh lub /etc/profile, w którym zwiększymy limity tylko interesującemu nas użytkownikowi:

if [ $USER = "oracle" ]; then
ulimit -u 16384 -n 63536;
fi

Lepiej zapobiegać

Na moim systemie instalator krzyczał, że brakuje mu pliku libstdc++.so.5. Plik ten miałem, ale w innym miejscu niż spodziewał się tego instalator (/usr/lib/libstdc++-v3/ zamiast /usr/lib/). Utworzenie linku symbolicznego pomogło:

ln -s /usr/lib/libstdc++-v3/libstdc++.so.5 /usr/lib/libstdc++.so.5

Środowisko

Na koniec konfiguracji ustawimy jeszcze kilka zmiennych środowiskowych dla oracle'a (w pliku /etc/env.d/99oracle).

ORACLE_BASE=/opt/oracle
ORACLE_HOME=/opt/oracle/product/10.2.0
ORACLE_SID='esme'
ORACLE_TERM=xterm
ORACLE_OWNER=oracle
TNS_ADMIN=/opt/oracle/product/10.2.0/network/admin
NLS_LANG=POLISH_POLAND.EE8ISO8859P2
ORA_NLS10=/opt/oracle/product/10.2.0/nls/data
CLASSPATH=/opt/oracle/product/10.2.0/jdbc/lib/classes12.zip
LD_LIBRARY_PATH=/opt/oracle/product/10.2.0/lib:/opt/oracle/product/10.2.0/lib32
DISABLE_HUGETLBFS=1
PATH=/opt/oracle/product/10.2.0/bin
ROOTPATH=/opt/oracle/product/10.2.0/bin
LDPATH=/opt/oracle/product/10.2.0/lib:/opt/oracle/product/10.2.0/lib32
TZ=GMT

Oprócz dostosowania powyższych ścieżek do własnych preferencji powinniśmy również zdefiniować SID instancji naszej bazy dancyh (ORACLE_SID). Korzystać z tych zmiennych będzie nie tylko działająca instancja oracle'a, ale także instalator.

Jakub Zalas

Jakub Zalas

Architekt, Programista, Trener