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.
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