Read-Only Oracle Home

Ab Oracle 18c (mit einigen Einschränkungen) gibt es die Möglichkeit, das Oracle Installationsverzeichnis <ORACLE_HOME> in den Modus read only zu setzen. Ab Version 21 wird dies der Standard sein. Also Zeit, sich endlich damit zu befassen – nicht in der Version 18c sondern mit der Version 19c, genauer mit der Version 19.9.
Damit keine Missverständnisse aufkommen: Read Only bedeutet in diesem Fall nur, dass der Oracle Kernel und andere Prozesse keine Daten mehr im <ORACLE_HOME> anlegen oder ändern darf. Es bedeutet aber nicht, dass man keine Dateien mehr anlegen oder verändern kann. In sofern wäre Software Only vielleicht die bessere Bezeichnung.

Wie stellt man eine Installation um?

Man sollte die Umstellung vornehmen, bevor man eine Datenbank angelegt hat. Also am Besten direkt nach der Installation der Software. Dafür führt man folgenden Befehl aus:

[oracle@mccartney dbhome_1]$ $ORACLE_HOME/bin/roohctl -enable
Enabling Read-Only Oracle home.
Update orabasetab file to enable Read-Only Oracle home.
Orabasetab file has been updated successfully.
Create bootstrap directories for Read-Only Oracle home.
Bootstrap directories have been created successfully.
Bootstrap files have been processed successfully.
Read-Only Oracle home has been enabled successfully.
Check the log file /u01/app/oracle/cfgtoollogs/roohctl/roohctl-210108AM103914.log for more details.

Damit ist die Umstellung abgeschlossen und Verzeichnisse im <ORACLE_BASE> angelegt worden. Genauer: es wurde ein <ORACLE_BASE_HOME> angelegt. Das kann man sich mit folgendem Befehl ansehen:

[oracle@mccartney dbhome_1]$ $ORACLE_HOME/bin/orabasehome
/u01/app/oracle/homes/OraDB19Home1

[oracle@mccartney dbhome_1]$ tree /u01/app/oracle/homes/OraDB19Home1
/u01/app/oracle/homes/OraDB19Home1
├── assistants
│   └── dbca
│       └── templates
├── dbs
├── install
├── network
│   ├── admin
│   ├── log
│   └── trace
└── rdbms
    ├── audit
    └── log

12 directories, 0 files

Welchen Vorteil hat das Read-Only Oracle-Home?

Es liegt ja zunächst auf der Hand, dass die Verwaltung von mehreren Oracle Homes damit verbessert wird. Egal ob es sich um die Netzwerk-Konfiguration oder die Lage des „spfiles“ handelt. Eine zentrale Stelle für unabhängig von der Software ist besser.

Nachteilig ist jedoch, dass die Dateien unterhalb des Installationsnamens (Hier OraDB19Home1) gespeichert werden. Das bedeutet: mit jedem neuen Release bzw. neuer Software Installation (z.B. beim Out-Of-Place Patching) müssen die Dateien angepasst werden. Das ist meiner Ansicht nach „unschön“.

Eine weitere Möglichkeit besteht aber daran, eine Softwareinstallation für mehrere Server zu verwenden.
Das ist zwar vom Standpunkt der Hochverfügbarkeit eher suboptimal aber für den Aufbau von Test- bzw. Entwicklungssystemen kann das sehr hilfreich sein. Im folgenden Beispiel werden mehrere Server aufgebaut und mit einer gemeinsamen Software Installation betrieben.

Installation Server 1

Zunächst wird Server 1 (mccartney) ganz normal installiert. Allerdings ist das Verzeichnis /u01/app/oracle/product als NFS Laufwerk gemounted.

Für die Installation verwende ich ein Goldenimage mit der Version 19.9. das im ersten Schritt einfach im Zielverzeichnis ausgepackt wird:

[oracle@mccartney ~] mkdir -p /u01/app/oracle/product/19.0/dbhome_1
[oracle@mccartney ~] cd /u01/app/oracle/product/19.0/dbhome_1
[oracle@mccartney dbhome_1]$ unzip /mnt/oracle/db/19/Goldimage/db_home_2021-01-06_04-42-47PM.zip
...

[oracle@mccartney dbhome_1]$ ${ORACLE_HOME}/runInstaller -silent \
-responseFile ${ORACLE_HOME}/install/response/db_install.rsp \
oracle.install.option=INSTALL_DB_SWONLY \
UNIX_GROUP_NAME=oinstall \
INVENTORY_LOCATION=/u01/app/oraInventory \
ORACLE_BASE=/u01/app/oracle \
oracle.install.db.InstallEdition=EE \
oracle.install.db.OSDBA_GROUP=dba \
oracle.install.db.OSOPER_GROUP=oper \
oracle.install.db.OSBACKUPDBA_GROUP=dba \
oracle.install.db.OSDGDBA_GROUP=dba \
oracle.install.db.OSKMDBA_GROUP=dba \
oracle.install.db.OSRACDBA_GROUP=dba 
...

[oracle@mccartney dbhome_1]$ sudo su -

[root@mccartney ~]# /u01/app/oraInventory/orainstRoot.sh
...
[root@mccartney ~]# /u01/app/oracle/product/19.0/dbhome_1/root.sh
...

Damit ist die Software auf dem ersten Server erfolgreich installiert. Übrigens: die Verwendung von clone.pl für die Installation wird mit Version 19c nicht mehr supported. Daher musste hier der runInstaller herhalten.

Jetzt aktivieren wir das Read-Only Oracle-Home:

 [oracle@mccartney dbhome_1]$ $ORACLE_HOME/bin/roohctl -enable
...

Danach wird die Software auf den anderen Servern „installiert“ bzw. besser aktiviert. Voraussetzung ist, dass das selbe NFS-Verzeichnis wie auf mccartney gemounted ist. Damit ist die Software schon vorhanden. Das Auspacken und Installieren entfällt.

[oracle@lennon ~]$ cd /u01/app/oracle/product/19.0/dbhome_1/oui/bin
[oracle@lennon bin]$ ./attachHome.sh
Starting Oracle Universal Installer...

Checking swap space: must be greater than 500 MB.   Actual 16379 MB    Passed
The inventory pointer is located at /etc/oraInst.loc
You can find the log of this install session at:
 /u01/app/oraInventory/logs/AttachHome2021-01-07_02-07-00PM.log
Please execute the '/u01/app/oraInventory/orainstRoot.sh' script at the end of the session.
'AttachHome' was successful.

[oracle@lennon bin]$ sudo su -

[root@lennon ~]# /u01/app/oraInventory/orainstRoot.sh
...
[root@lennon ~]# /u01/app/oracle/product/19.0/dbhome_1/root.sh
...
exit

[oracle@lennon bin]$ cd $ORACLE_HOME/bin
[oracle@lennon bin]$./roohctl -enable
...

Diese Installation hat keine 5 Minuten gedauert.

Einen offenen Punkt gibt es allerdings noch: Wie im Beispiel gesehen habe ich sowohl root.sh als auch das roohctl -enable ausführen müssen. Ich bin mir noch nicht sicher, ob man das im laufenden Betrieb einer Datenbank so einfach machen kann, denn die Befehle berühren ja jedes Mal alle Installationen.

Entgegen der Verwendung eines Read-Only Verzeichnisses, was von Oracle nicht supported wird (siehe Blog von Markus Flechner: „Oracle 18c/19c: Running a “read-only-Oracle-home” on a read-only-filesystem“) sollte diese Variante die Absolution von Oracle bekommen. Denn in der Dokumentation zu 19c steht explizit „Simplifies patching and mass rollout as only one image needs to be updated to distribute a patch to many servers.

Die Erstellung von Datenbanken erspare ich mir an dieser Stelle, da es dabei außer der Lage der Dateien keine Unterschiede gibt.

Probieren Sie es aus und berichten Sie mir bitte von Ihren Erfahrungen.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen