Oracle XE 18c mit benutzerdefinierter SID erstellen

By | 10. März 2019

Seit Oktober 2018 ist die 18c Express Edition (XE) für Linux verfügbar. Folgt man der offiziellen Oracle Installationsanleitung, so wird eine XE Datenbank mit dem voreingestellten Namen (SID) „XE“ erstellt. In der Konfigurationsdatei /etc/sysconfig/oracle-xe-18c.conf lassen sich zwar vor dem Anlegen der Datenbank der Pfad der Datenbankdateien, der Listenerport und der Zeichensatz einstellen, eine vom Standard abweichende SID jedoch nicht. Manch einer möchte aber vielleicht nicht den wenig aussagekräftigen Namen „XE“ nutzen, sondern einen eigenen, selbstdefinierten Namen festlegen. Dies ist insbesondere sinnvoll, wenn man einer eigenen Namenskonvention folgen oder mehrere XE Datenbanken auf einer Vielzahl von Systemen installieren möchte. Da wäre es verwirrend, wenn man z.B. 20 XE Datenbanken mit dem gleichen Namen hätte.

Oracle 18c XE

Oracle 18c XE

In dem folgenden Beitrag möchte ich anhand eines Installationsbeispiels unter Oracle Linux 7 aufzeigen, wie man eine benutzerdefinierte SID für seine XE Datenbank festlegen kann. Der Trick dabei ist, dass man an der entsprechenden Stelle von der Oracle Installationsanleitung abweicht und den Oracle Database Creation Assistent (dbua) für die Erstellung der Datenbank verwendet. Dies hat den weiteren Vorteil, dass man die Datenbank auch nicht zwingend als Container-Datenbank mit einer CDB und einer PDB anlegen muss, sondern eine Datenbank nach alter Architektur erstellen kann. Mein Installationsbeispiel geht davon aus, dass der Server gerade aufgesetzt wurde und noch keine Oracle Software auf dem Linux Server installiert ist. Obwohl der nachfolgende Leifaden für Linux und Oracle XE 18c gedacht ist, lässt sich der „Database Creation Assistent“-Abschnitt sich auch für die Windows Plattform und voraussichtlich auch auf Oracle XE 19c anwenden.

Wer übrigens denkt, dass man durch die Individualisierung des Namens mehrere XE Datenbanken auf einem System anlegen kann, der irrt. Dies verbietet nicht nur die Lizenzbedingung, sondern ist auch technisch, trotzt unterschiedlicher SIDs, nicht möglich.

1.  Linux Betriebssystem vorbereiten

Damit die XE Datenbank auf einem Linux-System installiert werden kann, muss dieses entsprechend der Installationsanleitung vorbereitet werden. Schon beim Aufsetzen des Betriebssystems sollte man sicherstellen, dass die Mindestvoraussetzungen für eine Installation erfüllt werden. Das System sollte über mindestens 1 GB RAM und ein mindestens 20 GB großes root-Filesystem verfügen. Der Platz im Filesystem, den man für die Datenbankfiles und die Fast Recovery Area vorsieht, sollte nicht kleiner als 25 GB sein, beabsichtigt man die maximale Benutzerdatenbegrenzung von 12 GB auszuschöpfen. Der Swap-Space sollte mit doppelter RAM-Größe, mindestens jedoch 2 GB angelegt werden. Da die XE-Datenbank technisch nicht mehr als 2 CPU-Kerne nutzen kann, reicht eine System mit geringer CPU-Bestückung, wenn das System ausschließlich die XE Datenbank aufnehmen soll.

Es muss ein eigener oracle Benutzer angelegt, erforderliche Linux Packages installiert und Betriebssystemeinstellungen, wie z.B. Kernelparameter-Konfigurationen, vorgenommen werden. Wenn man ein Oracle Linux, Red Hat oder Cent OS verwendet, dann kann man komfortabel das dafür vorgesehene Oracle Preinstall-Package unter anderem vom Public Yum Server herunterladen und nutzen.

URL Oracle Preinstall Package 18c
https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm

Am einfachsten geht dies mit wget, sollte man vom Linux Server aus einen Zugang zum Internet haben.

wget https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm

Installation als User root:

yum -y localinstall oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm

2.  Download  Oracle Database 18c Express Edition for Linux x64

Oralce XE 18c wird für die Linux-Plattform als RPM-Paket zur Verfügung gestellt. Für den Download des RPM-Pakets ist ein Oracle Account notwendig (kostenfrei), den man kurz erstellen muss, sofern noch keiner vorhanden ist.

URL Oracle Database Downloads
https://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html

3.  Installation der XE Datenbanksoftware

Die Datenbanksoftware wird standardmäßig im root-Filesystem unter /opt/oracle installiert. Der Installationspfad, sprich das Oracle Home Verzeichnis, lässt sich leider nicht ändern. Die Verwendung von Symbolischen Links, die auf ein anderes Filesystem verweisen, funktioniert nicht. Beim Anlegen der Datenbank würde es zu Fehlern kommen. Das root-Filesystem sollte daher bei der Installation des Betriebssystems groß genug angelegt werden. Alleine für die Datenbanksoftware sollte man 5 GB vorsehen.

Installation als User root:

yum -y localinstall oracle-database-xe-18c-1.0-1.x86_64.rpm

Direkt nach der Installation der Datenbanksoftware sollte man das Passwort für den User oracle, der Eigentümer der Software ist, wie folgt  festlegen.

passwd oracle
Changing password for user oracle.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

4.  Anlegen der Datenbank und des Listeners mit dem DBCA

An dieser Stelle muss man von der Installationsanleitung abweichen. Normalerweise wird bei diesem Schritt der Befehl /etc/init.d/oracle-xe-18c configure aufgerufen, welcher den Listener und die Datenbank anlegt. Damit wir aber einen individuelle SID vergeben können, müssen wir stattdessen den Database Creation Assistent nutzen.

Den Database Creation Assistent kann man im üblichen GUI-Mode oder im Silent-Mode aufrufen. Der Einfachheit halber verwende ich in diesem Beispiel den Silent-Mode. Im Gegensatz zum GUI-Mode benötigt der Silent-Mode kein X-Client.

a.) Hostnamen-Auflösung sicherstellen

Der Hostname muss vom dem Linux Server aus in eine IP-Adresse auflösbar sein, damit das Setup des Listeners gelingt. Sprich, ein lokaler Ping auf den Hostnamen muss erfolgreich sein. Ist eine Namensauflösung mit DHCP nicht geplant oder noch nicht eingerichtet, muss ein entsprechender Eintrag in die Datei /etc/hosts vorgenommen werden. Wenn sich der kurze Hostnamen (ohne Domain) auf dem Linux Server nicht anpingen lässt, kommt es zu der irritierenden Fehlermeldung  "[FATAL] [DBT-06103] The port (1,521) is already in use".

Beispiel: Auflösung Hostname „orasrv“ in IP-Adresse 192.168.56.127

Prüfung Ping

ping orasrv

Prüfung Inhalt /etc/hosts:

getent hosts

Eintragung des Hostnamens in die /etc/hosts:

echo "192.168.56.127 orasrv orasrv.example.de" >> /etc/hosts

b.) Datenbank und Listener mit dem DBCA anlegen

Die Datenbank wird mit dem Benutzer oracle angelegt. Der Silent-Installationsmode erfordert die Angabe diverser Parameter, über die man sich im Vorfeld Gedanken machen sollte. Gültige Parameter und mögliche Parameterwerte können der DBCA Commandline Reference entnommen werden.

URL Oracle DBCA Commandline Reference:
https://docs.oracle.com/database/121/ADMIN/create.htm#ADMIN14032

Beispiel: Anlegen einer XE-Datenbank mit der SID „MYDB“ als Non-Container Datenbank und im Archivelog-Mode

Verzeichnis für die Datenbankfiles anlegen

mkdir -p /u01/oradata /u01/fra
chown oracle:oinstall /u01/oradata /u01/fra

Anmeldung als User oracle

su - oracle

Umgebungsvariablen setzen

export ORACLE_HOME=/opt/oracle/product/18c/dbhomeXE 
export ORACLE_BASE=/opt/oracle
export PATH=$ORACLE_HOME/bin:$PATH

Oracle Databae Configuration Assistent im Silent-Mode starten

dbca -silent -createDatabase \
-templateName XE_Database.dbc \
-gdbName mydb.example.de \
-sid mydb \
-databaseConfigType SI \
-createAsContainerDatabase false \
-sysPassword my1SecretPsswrd \
-systemPassword m1ySecretPsswrd \
-emConfiguration DBEXPRESS \
-emExpressPort 5500 \
-datafileDestination "/u01/oradata" \
-recoveryAreaDestination "/u01/fra" \
-recoveryAreaSize 8192 \
-characterSet AL32UTF8 \
-redoLogFileSize 100 \
-enableArchive true \
-useOMF true \
-totalMemory 2048 \
-createListener LISTENER:1521

Output

Prepare for db operation
10% complete
Copying database files
40% complete
Creating and starting Oracle instance
42% complete
46% complete
50% complete
54% complete
60% complete
Completing Database Creation
66% complete
70% complete
Executing Post Configuration Actions
100% complete
Database creation complete. For details check the logfiles at:
/opt/oracle/cfgtoollogs/dbca/mydb.
Database Information:
Global Database Name:mydb.example.com
System Identifier(SID):mydb
Look at the log file "/opt/oracle/cfgtoollogs/dbca/mydb/mydb.log" for further details.

c.) Umgebungsvariablen setzen

Um mit der Datenbank nach der Anmeldung an die Linux-Console arbeiten zu können, ist es hilfreich, wenn die dafür notwendigen Umgebungsvariablen schon gesetzt sind. Wenn die installierte XE Datenbank die einzige Datenbank auf dem System ist, kann man dies erreichen, indem man die Umgebungsvariablen in die Datei /home/oracle/.bash_profile einträgt, die nach der Anmeldung mit dem User oracle automatisch geladen wird.

Umgebungsvariablen in ./bash_profile eintragen

cat >> /home/oracle/.bash_profile <<EOF

# Umgebungsvariablen fuer den Zugriff XE Datenbank
export ORACLE_HOME=/opt/oracle/product/18c/dbhomeXE 
export ORACLE_BASE=/opt/oracle 
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=mydb

EOF

d.) Autostart einrichten

Bei einer herkömmlichen XE-Installation sorgt das Start- und Konfigurations-Script /etc/init.d/oracle-xe-18c dafür, dass die XE-Datenbank nach einem Reboot automatisch gestartet wird. Da wir jedoch den Database Creation Assistent genutzt haben, ist das Script nicht vorhanden und wir müssen selber für diese Funktionalität sorgen. Ich bevorzuge bei der Verwendung eines Linux 7 das Anlegen von entsprechenden Scripten und das Erstellen eines Systemd-Services, der die Autostartaufgabe übernimmt.

Start-Script anlegen als User oracle

cat > /home/oracle/stop_oracle_services.sh <<EOF
#!/bin/bash

export ORACLE_HOME=/opt/oracle/product/18c/dbhomeXE 
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=mydb

lsnrctl stop listener
echo "shutdown immediate" | sqlplus / as sysdba

EOF

Stop-Script anlegen als User oracle

cat > /home/oracle/start_oracle_services.sh <<EOF
#!/bin/bash

export ORACLE_HOME=/opt/oracle/product/18c/dbhomeXE 
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=mydb

lsnrctl start listener
echo "startup" | sqlplus / as sysdba

EOF

Execute Berechtigung erteilen als User oracle

chmod u+x /home/oracle/start_oracle_services.sh
chmod u+x /home/oracle/stop_oracle_services.sh

Systemd-Service anlegen als User root

su - root
cat > /lib/systemd/system/dbora.service <<EOF

[Unit]
Description=The Oracle Database Service
After=syslog.target network.target

[Service]
LimitMEMLOCK=infinity
LimitNOFILE=65535

RemainAfterExit=yes
User=oracle
Group=oinstall
Restart=no
ExecStart=/home/oracle/start_oracle_services.sh
ExecStop=/home/oracle/stop_oracle_services.sh

[Install]
WantedBy=multi-user.target

EOF

Systemd-Service starten

systemctl daemon-reload
systemctl start dbora.service
systemctl enable dbora.service
systemctl status dbora.service

e.) Sonstige Nacharbeiten

Fast überflüssig zu erwähnen, aber nach der Installation sollte man sich Gedanken machen ob und wie man die Datenbank sichern und überwachen möchte und dies dann entsprechend implementieren.

Referenzen

Oracle XE 18c Installation Guide
https://docs.oracle.com/en/database/oracle/oracle-database/18/xeinl

Database Configuration Assistant Command Reference for Silent Mode
https://docs.oracle.com/database/121/ADMIN/create.htm#ADMIN14032

Installation Guide Oracle Linux 7
https://docs.oracle.com/cd/E52668_01/E54695/html/index.html