Home > Oracle Datenbank > DB Startup unter Systemd

DB Startup unter Systemd

Oracle Datenbank Startup Scripts für Systemd Systeme

Lange Zeit waren wir gewohnt Scripts für den Startup der Oracle Services in /etc/init.d abzulegen und mit symbolischen links (bzw. chkconfig) dafür zu sorgen, daß diese beim Start/Stop des Servers ausgeführt werden. Mit Systemd sieht die Welt leider etwas anders aus - zum Glück für einige Oracle Produkte funktioniert der "alte Weg" aktuell noch. Die Frage ist nur wie lange noch.

Hier ein Beispiel wie man mit Systemd Startup/Shutdown Scripts implementieren kann.

Die benötigten Scripts unter dem Benutzer Oracle

Startup und Shutdown Scripts im Oracle Benutzer

Zuerst braucht man Shell Scripts mit denen man die gewünschten Services Starten und Stoppen kann - das Beispiel kümmert sich nur darum, daß Oracle Datenbanken und Listener gestartet/gestoppt werden.

Die Scripts legen wir im Verzeichnis /home/oracle/scripts ab. Die Oracle Datenbank Software liegt unter /u01/app/oracle/product/12.2.0/dbhome_ee.

start_all.sh
#!/bin/bash
/u01/app/oracle/product/12.2.0/dbhome_ee/bin/dbstart /u01/app/oracle/product/12.2.0/dbhome_ee
stop_all.sh
#!/bin/bash
/u01/app/oracle/product/12.2.0/dbhome_ee/bin/dbstop /u01/app/oracle/product/12.2.0/dbhome_ee

Jetzt nur noch die Fileprotection korrekt setzen - als Benutzer Oracle:

chmod 750 $HOME/scripts/st*_all.sh

Zusätzlich muß man sicherstellen, daß in /etc/oratab am Ende des Datenbankeintrags ein "Y" steht - hier ein Beispiel dafür:

# Demo /etc/oratab
db122ee:/u01/app/oracle/product/12.2.0/dbhome_ee:Y
db122se:/u01/app/oracle/product/12.2.0/dbhome_se:Y

Damit haben wir die Scripts für den Start/Stop der Datenbanken fertig.

Systemd Service anlegen - Beispiel für Filesysteme (SAN, HDD,...)

Dieses Beispiel ist "as simple as possible" - mehr muß es gar nicht sein. Wenn Sie zusätzlich zu den Oracle Datenbanken noch weitere Oracle Produkte auf dem Server betreiben (Grid Control, WebServer,...) empfehlen wir entsprechend eigene Services zu bauen.

Legen Sie das File bitte als /lib/systemd/system/dbora.service an.

[Unit]
Description=Oracle Datenbank Service
# Einzige Abhaengigkeit - das Netzwerk muss laufen.
After=syslog.target network.target

[Service]
# systemd ignoriert bis pam-1.1.5-5.fc15 die PAM limits - gegebenenfalles muessen diese manuell gesetzt werden
# https://bugzilla.redhat.com/show_bug.cgi?id=754285
LimitMEMLOCK=infinity
LimitNOFILE=6553500

#Type=simple
RemainAfterExit=yes
User=oracle
Group=oinstall
ExecStart=/home/oracle/scripts/start_all.sh
ExecStop=/home/oracle/scripts/stop_all.sh

[Install]
WantedBy=multi-user.target

Systemd Service anlegen für Datenbanken auf NFS

Wenn die Datenbank auf NFS liegt, darf der Startup erst erfolgen, wenn NFS läuft. Das erreicht man mit zusätzlichen Abhängigkeiten.

[Unit]
Description=Oracle Datenbank Service
#Abhaengigkeiten fuer NFS
Requires=rpc-statd.service network.target nfs.service nfs-mountd.service local-fs.target remote-fs.target
After=syslog.target network.target nfs.service nfs-mountd.service local-fs.target rpc-statd.service remote-fs.target

[Service]
# systemd ignoriert bis pam-1.1.5-5.fc15 die PAM limits - gegebenenfalles muessen diese manuell gesetzt werden
# https://bugzilla.redhat.com/show_bug.cgi?id=754285
LimitMEMLOCK=infinity
LimitNOFILE=6553500

#Type=simple
RemainAfterExit=yes
User=oracle
Group=oinstall
ExecStart=/home/oracle/scripts/start_all.sh
ExecStop=/home/oracle/scripts/stop_all.sh

[Install]
WantedBy=multi-user.target

Das dbora.service in Systemd einhängen - als root

Nachdem wir alle Scripts haben, müssen wir diese nur noch dem Systemd korrekt bekannt manchen.

Zuerst das dbora.service bekannt machen:

# systemctl daemon-reload

Hinweis: Nach jeder Änderung an einem Service Script müssen Sie den "daemon-reload" wiederholen.

Danach die Datenbanken mittels systemctl starten:

# systemctl start dbora.service

Wenn diese erfolgreich starten, kann man das Service für den nächsten Reboot einhängen:

# systemctl enable dbora.service

Und natürlich kann man sich auch ansehen ob alles läuft:

# systemctl status dbora.service

dbora.service - Oracle Datenbank Service
Loaded: loaded (/usr/lib/systemd/system/dbora.service; enabled; vendor preset: disabled)
Active: active (exited) since Tue 2018-05-15 16:59:33 EDT; 1min 32s ago
Process: 4658 ExecStop=/home/oracle/scripts/stop_all.sh (code=exited, status=0/SUCCESS)
Process: 7747 ExecStart=/home/oracle/scripts/start_all.sh (code=exited, status=0/SUCCESS)
Main PID: 7747 (code=exited, status=0/SUCCESS)
... hier kommt dann noch eine Liste der gestarteten Prozesse ...

Und natürlich kann man das Service auch wieder stoppen:

$ systemctl stop dbora.service

Einschränkung

Das Beispiel funktioniert nicht mit Passwort geschützen Listenern und/oder Wallet Konfigurationen. Wenn Sie solche haben, wenden Sie sich bitte an uns, wie helfen Ihnen gerne weiter.