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
:
Ponieważ będzie to skrypt, więc należy mu nadać prawo wykonywania:
Następnie korzystając z ulubionego edytora tekstu (np. vim) piszemy skrypt:
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:
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:
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:
W ulubionym edytorze tekstu uzupełniamy go następującą zawartością:
Niech skrypt się uruchamia automatycznie podczas rozruchu systemu:
Można od razu przetestować działanie skryptu i uruchomić usługę programu Enterprise Manager wydając komendę:
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:
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:
Wypełniamy plik następującym kodem:
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.
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!
Komentarz nie powinien zawierać tagów HTML. Zostaną one automatycznie usunięte.