Instalacja Oracle 10g w Gentoo - część 1

Wysłany przez kuba dnia 07-07-31 w linux

Oracle wspiera instalację swojej bazy danych tylko na niektórych dystrybucjach (np RedHat, SUSE). Wystarczy jednak odpowiednio przygotować system, aby działał 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

Sprostać 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.

ParametrMinimalna wartość Polecenie sprawdzające
shmmax2147483648cat /proc/sys/kernel/shmmax
shmmni4096cat /proc/sys/kernel/shmmni
shmall2097152cat /proc/sys/kernel/shmall
shmmin1ipcs -lm | grep "min seg size"
semmsl250awk '{print $1}' /proc/sys/kernel/sem
semmns32000awk '{print $2}' /proc/sys/kernel/sem
semopm100awk '{print $3}' /proc/sys/kernel/sem
semmni128awk '{print $4}' /proc/sys/kernel/sem
file-max65536cat /proc/sys/fs/file-max
ip_local_port_range1024 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żemy 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ą zasosowane 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/oracle.sh lub /etc/profile, w którym zwiększymy limity tylko interesującemu nas uzytkownikowi:

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 danych (ORACLE_SID). Korzystać z tych zmiennych będzie nie tylko działająca instancja oracle'a, ale także instalator.

2 komentarze

Wysłany przez xis dnia 07-08-01
No, no :) Długa przerwa w pisaniu, ale tym jednym postem nadrobiłeś ;) Tylko dlaczego nie udostępniłeś ebuilda? :P
Wysłany przez Jakub Zalas dnia 07-08-01
Nie pisałem ebuilda :P ten opis to tylko przygotowanie środowiska, aby instalator ruszył bez większych komplikacji ;)

Napisz komentarz