Wtorek, 11 grudnia 2018 r.
https://www.pichen.com/

Get Firefox!
Valid XHTML 1.0 Strict
Poprawny CSS!

Skrypty startowe bazy danych Oracle w systemie Red Hat Linux oraz pochodnych

1. Wprowadzenie

Niestety instalator baz danych Oracle 10g, 11g a nawet najnowszej Oracle 12c automatycznie nie zainstaluje odpowiednich skryptów startowych, które sprawią, że silnik bazy danych uruchomi się ponownie po restarcie systemu. O takie skrypty musimy zadbać sami.
W niniejszym artykule pokażę jak je przygotować dla systemu operacyjnego Red Hat Enterprise Linux Server dla wersji 6.5 (Santiago). Nie powinno być większych problemów z ich adaptacją w innych dystrybucjach linuksowych, zwłaszcza tych bazujących na System V.

2. Skrypty startowe

2.1. Skrypt startowy dla silnika bazy danych (oraz dla programu Oracle Enterprise Manager Database Control w przypadku wersji 12g)

Silniki bazy danych uruchamiane oraz zatrzymywane są pomocą poleceń odpowiednio dbstart oraz dbshut. Narzędzia ta sprawdzają zawartość pliku /etc/oratab i na jej postawie uruchamiają, tudzież zatrzymują odpowiednie instancje baz danych. Nasz skrypt startowy będzie korzystał z tych narzędzi.
W kartotece /etc/init.d/ utwórzmy plik oracle-db:

# touch /etc/init.d/oracle-db

Ponieważ będzie to skrypt, więc należy mu nadać prawo wykonywania:

# chmod a+x /etc/init.d/oracle-db

Następnie korzystając z ulubionego edytora tekstu (np. vim) piszemy skrypt:

#!/bin/bash # # oracle-db Script file for starting and stopping # Oracle Database. Script is valid for 10g, 11g and 12c versions. # # chkconfig: 35 80 19 # description: Oracle Database startup script # Source function library. . /etc/rc.d/init.d/functions ORACLE_OWNER="oracle" ORACLE_HOME="/opt/oracle/app/oracle/product/12.1.0/dbhome_1" case "$1" in start) echo -n $"Starting Oracle DB:" su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME > /dev/null" && success || failure ;; stop) echo -n $"Stopping Oracle DB:" su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME > /dev/null" && success || failure ;; *) echo $"Usage: $0 {start|stop}" esac

Należy sprawdzić oraz ewentualnie poprawić wartości dla zmiennych ORACLE_OWNER oraz ORACLE_HOME. Pierwsza zmienna zawiera nazwę użytkownika systemu, który powinien uruchomić/zatrzymać proces silnika bazy danych. Dla zdecydowanej większości standardowych instalacji bazy będzie to użytkownik oracle.
Druga zmienna zawiera ścieżkę instalacji bazy danych, tzw. ścieżkę domową. Powinna ona wskazywać najmłodszą (najnowszą), tj. ostatnią zainstalowaną bazę.
Skrypt uruchomi wszystkie te instancje baz danych, których 3. pole w pliku /etc/oratab ma ustawioną flagę Y (tj. automatyczne uruchamianie).
Uwaga! Skypt uruchomi też instalacje ze starszych wersji baz danych znajdujących się w innych ścieżkach domowych. Więcej informacji na ten temat w podrozdziale 2.3.

Następnie należy zgłosić plik do podsystemu zajmujący uruchamianiem różnorakich skryptów startowych:

# chkconfig --add oracle-db

Powyższe polecenie spowoduje, że silnik bazy danych zostanie uruchomiony automatycznie podczas startu systemu w poziomach pracy 3 oraz 5 (tj. wieloużytkownikowym z obsługą sieci oraz wieloużytkownikowym z graficznym interfejsem).

Aby od razu uruchomić bazę bez restartu systemu (i tym sprawdzić działanie skryptu) użyjemy polecenia:

# service oracle-db start

2.2. Skrypt startowy dla programu Oracle Enterprise Manager Database Control (dla wersji 10g i 11g)

Uwaga! Jeśli używana jest wyłącznie wersja 12c bazy danych wówczas należy zignorować ten rozdział. Skrypt oracle-db utworzony wcześniej załatwi sprawę uruchamianie programu Enterprise Manager Database Control.

Program Enterprise Manager Database Control musi być uruchamiany dla każdej instancji bazy danych oddzielnie. Niestety firma Oracle nie zapewnia narzędzia podobnego do dbstart, które automatycznie uruchamiałoby usługi bazując na pliku /etc/inittab.
Aby rozwiązać tę niedogodność napisałem skrypt powłoki Bash, który sam analizuje zawartość pliku /etc/oratab i na jej postawie uruchamia aplikacje Enterprise Manager Database Control dla poszczególnych instancji. Skrypt korzysta z programu awk w celu obsługi wyrażeń regularnych. Ponadto jeśli w ścieżce domowej danej instancji nie znajduje się plik sterowania usługą Enterprise Manager, wówczas skrypt go nie będzie próbował uruchomić (np. w nowej wersji bazy Oracle 12c).

Tworzymy plik skryptu i nadajemy mu prawo wykonywania:

# touch /etc/init.d/oracle-em # chmod a+x /etc/init.d/oracle-em

W ulubionym edytorze tekstu uzupełniamy go następującą zawartością:

#!/bin/bash # # oracle-em Starting and stopping Oracle Enterprise Manager Database Control. # Script is valid for 10g and 11g versions. # # chkconfig: 35 82 17 # description: Enterprise Manager DB Control startup script # Source function library. . /etc/rc.d/init.d/functions ORACLE_OWNER="oracle" ORACLE_INSTANCES=`awk -F: '{if (($0 !~ /^#/) && ($0 !~ /^\w*$/) && ($3 == "Y")) { print $0 }}' /etc/oratab` execEMCtl() { for INSTANCE in $ORACLE_INSTANCES do ORACLE_HOME=`echo $INSTANCE | awk -F: '{ print $2 }'` EMCTL_BIN=$ORACLE_HOME/bin/emctl if [[ -x $EMCTL_BIN ]] && [[ -f $EMCTL_BIN ]] then ORACLE_SID=`echo $INSTANCE | awk -F: '{ print $1 }'` su - $ORACLE_OWNER -c "export ORACLE_UNQNAME=$ORACLE_SID ; $EMCTL_BIN $1 dbconsole > /dev/null" fi done } case "$1" in start) echo -n $"Starting Oracle Enterprise Manager Database Control:" execEMCtl start && success || failure ;; stop) echo -n $"Stopping Oracle Enterprise Manager Database Control:" execEMCtl stop && success || failure ;; *) echo $"Usage: $0 {start|stop}" esac

Niech skrypt się uruchamia automatycznie podczas rozruchu systemu:

# chkconfig --add oracle-em

Można od razu przetestować działanie skryptu i uruchomić usługę programu Enterprise Manager wydając komendę:

# service oracle-em start

2.3. Różne wersje baz danych

Spotkałem się z takim oto problemem. Na serwerze mam 4 różne instancje baz danych, przy czym 2 działają pod kontrolą najnowszego silnika Oracle 12c, natomiast 2 muszą korzystać ze starego motoru 11c. W pliku /etc/oratab można zobaczyć ich konfiguracje:

# # This file is used by ORACLE utilities. It is created by root.sh # and updated by either Database Configuration Assistant while creating # a database or ASM Configuration Assistant while creating ASM instance. # A colon, ':', is used as the field terminator. A new line terminates # the entry. Lines beginning with a pound sign, '#', are comments. # # Entries are of the form: # $ORACLE_SID:$ORACLE_HOME:<N|Y>: # # The first and second fields are the system identifier and home # directory of the database respectively. The third filed indicates # to the dbstart utility that the database should , "Y", or should not, # "N", be brought up at system boot time. # # Multiple entries with the same $ORACLE_SID are not allowed. # # BAZA1:/opt/oracle/app/oracle/product/12.1.0/dbhome_1:Y BAZA2:/opt/oracle/app/oracle/product/12.1.0/dbhome_1:Y BAZA3:/opt/oracle/app/oracle/product/11.2.0/dbhome_2:Y BAZA4:/opt/oracle/app/oracle/product/11.2.0/dbhome_2:Y

Powyższe skrypty startowe prawidłowo uruchamiają wszystkie instancje jak również aplikację Enterprise Manager Database Control, jednakże dla starszych instancji BAZA3 oraz BAZA4 nie uruchamia się proces nasłuchowy Oracle Net Listener, bez którego nie będzie możliwe podłączenie się do tychże baz danych.
Polecenie dbstart uruchomi tylko proces nasłuchowy dla instancji ze swojej własnej ścieżki domowej, toteż niestety polecenie nie uruchomi dodatkowych procesów nasłuchowych z innych ścieżek domowych. Musimy zatem samodzielnie utworzyć odpowiedni skrypt startowy dla dodatkowych procesów nasłuchowych. Oto moja propozycja:

Tworzymy plik skryptu i nadajemy mu prawo wykonywania:

# touch /etc/init.d/oracle-nl # chmod a+x /etc/init.d/oracle-nl

Wypełniamy plik następującym kodem:

#!/bin/bash # # oracle-nl Script for starting and stopping additional # Oracle Net Listener. # # chkconfig: 35 81 18 # description: Additional Oracle Net Listener startup script # Source function library. . /etc/rc.d/init.d/functions ORACLE_OWNER="oracle" ORACLE_HOME="/opt/oracle/app/oracle/product/11.2.0/dbhome_2" export ORACLE_HOME case "$1" in start) echo -n $"Starting additional Oracle Net Listener:" $ORACLE_HOME/bin/lsnrctl start > /dev/null && success || failure ;; stop) echo -n $"Stopping additional Oracle Net Listener:" $ORACLE_HOME/bin/lsnrctl stop > /dev/null && success || failure ;; *) echo $"Usage: $0 {start|stop}" esac

Uwaga! Zmienna ORACLE_HOME powinna w tym wypadku wskazywać na ścieżkę domową starszej wersji bazy, tj. na tą, dla której proces nasłuchowy automatycznie nie jest uruchamiany.

Następnie sprawiamy aby skrypt się uruchamiał automatycznie podczas rozruchu systemu operacyjnego i niezwłocznie go uruchamiamy, aby sprawić czy działa jak należy.

# chkconfig --add oracle-nl # service oracle-nl start

3. Podsumowanie

W przeciwieństwie do systemów operacyjnych z rodziny Windows instalator baz danych firmy Oracle dla systemów linuksowych nie ustawia odpowiednich skryptów startowych, co powoduje, że przy pierwszym restarcie systemu baza się automatycznie nie uruchomi. Poniekąd można to zrozumieć ze względu na liczne dystrybucje Linuksa, w których używane są różne metody rozruchu procesów.
Przedstawiłem w jaki sposób można przygotować własne skrypty startowy dla popularnego komercyjnego systemu Red Hat Enterprise Linux. Oczywiście mając trochę podstawowej wiedzy z zakresu programowania skryptów powłoki oraz wiedzy nt. systemu, z którym się ma do czynienia, można łatwo zaadoptować przedstawione skrypty dla innych dystrybucji.
Powodzenia!

Data artykułu: 2014-06-21


Waszym zdaniem...

Na razie nie ma jeszcze żadnych komentarzy. Bądź pierwszy!

Aktualności

2017-05-14

Od dzisiaj strona jest dostępna wyłącznie w połączeniu szyfrowanym (bezpiecznym). Naprawiłem niedziałające odnośniki do galerii, usunąłem problem z wyświetlaniem znaków na starszych stronach relacji z Rosji, Ukrainy i Chin. Dodałem zdjęcia do mojego bloga o Malezji.

2017-05-07

Tydzień przeprowadziłem się do pracy do Kuala Lumpur w Malezji. Zapraszam do przeczytania mojego bloga dotyczącego tej przygody.

2017-03-21

Dodałem obsługę protokołu SSL. Strona dostępna jest także w bezpiecznej, zaszyfrowanej wersji. Drobne korekty w artykułach (dzięki Chris!). Zaktualizowałem sekcję Podróże.

2012-06-06

Dodałem relację z mojej podróży na wschód Kanady w 2010 r. Wzbogaciłem stronę o obsługę komentarzy. Naprawiłem formularz kontaktowy – odtąd korzysta z technologii AJAX. Przeszedłem na użycie tzw. „przyjaznych linków”.

2010-03-30

Dodałem wg mnie ciekawy artykuł opisujący sposób instalacji systemu openSUSE bez użycia nośników instalacyjnych. Do tego celu użyta zostanie technologia PXE umożliwiająca rozruch komputera z sieci. Zapraszam do przeczytania artykułu.

2009-07-18

Zaaktualizowałem informacje o sobie oraz dane kontaktowe. Dodałem nowe podstrony, tj. strony zawierające arytykuły dotyczące systemów UNIX oraz Linux. Ponadto dodałem odnośniki do moich profili na popularnych portalach społecznościowych. Na stronie pojawił się także odnośnik do mojej galerii zdjęć w systemie Google Picasa. Zaktualizowałem zbiór odnośników do relacji z podróży do Chin, Rosji i Mongolii.

2008-07-29

Dodałem podstronę, na której umieściłem przykładowe skrypty systemów uniksowych. Strona została przeniesiona na nowy serwer. Zmieniłem także kodowanie znaków strony na UTF-8.

2006-09-02

Dodałem galerię zdjęć. W galerii umieściłem zdjęcia z podróży do Chin, która odbyła się w 2005 roku. Jako, że aktualnie służę w wojsku, to w galerii umieściłem 4 zdjęcia z przysięgi wojskowej.
Osoby oczekujące na relację z Chin informuję, że jeszcze w tym roku powinna się pojawić na stronie.
 
© Copyright 2000 - 2018 Dawid Pichen. All rights reserved.