Die Template VM ist eine Vorlage, die bei Bedarf einfach kopiert wird.

Die VM beinhaltet das Betriebssystem und die Installationen der Datenbank-Software für Datenbanken der Version 18c und 19c.

Diese Vorlage beschleunigt die Bereitstellung von VM’s inklusive der benötigten Software extrem.

Die Bereitstellung dauert somit nur noch weniger als 5 Minuten. Die Methode ist für VM’s jeder Art anwendbar, in den Beispiel wird jedoch auf VMWare Workstation eingegangen. Eine Verwendung im Rechenzentrum mit VSphere / ESXi ist auch praxisüblich.

 

 

Wir starten mit der Erstellung der VM

Wichtig: Wir belegen den Platz erst dann, wenn er benötigt wird!

Die restlichen Parameter lassen sich jederzeit ändern.

 

 

 Das ISO-Image der Red Hat Disk einlegen

 

VM einschlalten und die Installation starten

 

Die Installation mache ich in der Regel immer zweispraching deutsch und amerikanisch.

Beim Installationstype wird Server mit GUI gewählt.

 

Die Software kann auch noch feingranularer installiert werden, uns geht es jetzt jedoch um eine schnelle Bereitstellung.

 

Nach der Basis-Installation

Den Hostnamen, die IP-Konfiguration und die IP-Adresse anpassen.

Redhat neu im Subscription-Manager registrieren 

# subscription-manager remove --all --force
# subscription-manager unregister
# subscription-manager clean

# subscription-manager register --username {{USERNAME}} --password {{PASSWORT}} --auto-attach

 

Einrichtugn NTP (RHEL7)

Ist für RHEL8 nicht erforderlich.

yum install ntp

/etc/ntp.conf anpassen mit den ntp-server
z.B.
server ntp1.noris.net  iburst
server ntp2.noris.net  iburst
server ntp3.noris.net  iburst

#einmalig die Zeit abholen
ntpd -gq
#Den NTP-Service starten
systemctl start ntpd.service
#Den NTP-Service auf autstart stellen
systemctl enable ntpd.service
#den Status prüfen
ntpstat

 

NFS-Share mounten

#Directory anlegen
[root@rhel83 ~]# mkdir -p /remote/database

#/etc/fstab erweitern um
nfs.demo.local:/nfs-shares /remote/database nfs rw,bg,hard,nointr,rsize=32768,wsize=32768,tcp,actimeo=0,vers=3,timeo=600 0 0

#NFS-Share mounten
[root@rhel83 ~]# mount /remote/database/

 

Firewall deaktivieren

[root@rhel83 ~]# systemctl stop firewalld
[root@rhel83 ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

 

Mounten der VMware Workstation Folders in die Vorlagen-Maschine

Hier liegen die ganzen Software Binaries und andere hilfreiche Dateien.

Das Resultat:

Nach dem Reboot geht der Mount leider verloren, anbei der Workaround zum Problem.

# Das Skript anlegen

#!/bin/bash

vmhgfs-fuse /mnt/hgfs

und ausführbar machen

[oracle@rhel83 ~]$ chmod +x mount.hgfs

jetzt noch den Mountpoint anpassen

[root@rhel83 ~]# chmod 777 /mnt/hgfs/

nach dem Reboot nun einfach als User Oracle das Skript "mount.hgfs" ausführen.

 

Oracle Datenbank spezifische Einstellungen

dnf install -y https://yum.oracle.com/repo/OracleLinux/OL8/baseos/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el8.x86_64.rpm

 

Nach der Installation ist die benötigte Software installiert, die Systemparameter sind gesetzt, die Gruppen und der User Oracle sind vorhanden.

User:

root@rhel83 Oracle]# id oracle
uid=54321(oracle) gid=54321(oinstall) Gruppen=54321(oinstall),54330(racdba),54322(dba),54323(oper),54324(backupdba),54325(dgdba),54326(kmdba)

 

 Gruppen:

oinstall:x:54321:oracle
dba:x:54322:oracle
oper:x:54323:oracle
backupdba:x:54324:oracle
dgdba:x:54325:oracle
kmdba:x:54326:oracle
racdba:x:54330:oracle
[root@rhel83 Oracle]# 

Das Passwort für den User Oracle setzen:

[root@rhel83 Oracle]# passwd oracle 
ändere Passwort für Benutzer oracle.
Geben Sie ein neues Passwort ein: 
passwd: alle Authentifizierungsmerkmale erfolgreich aktualisiert.

 

SE-Linux deaktivieren:

die Datei  anpassen /etc/selinux/config .

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

Server rebooten und die Einstellungen prüfen.

 

SSH-Zugriff für den Benutzer Oracle einrichten

# SSH keys erzeugen
[oracle@rhel83@USERMGR] /home/oracle 
$ ssh-keygen

# Nun noch die wichtigsten Keys in die authorized_keys einfügen
# Der eigenen Schlüssel, der vom Cloud-Controll und meiner
$ cat authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJLAvA0zf4WjUo6Mym45QNVXSnmj6zxk3c2JXTlsN5JgKZk3Q5avmlC0aLVIibQpSNm1MG/V5W9PKr39cmV8SwHlR6Nch4q1lw6ZeeMKhonFNn+CNgMbdoXPftR0Im/21exc6MDotC4GxGz5a4rv+6I12a9IJqsskUPNJqgy0sFYRTaf+Fv6qELlTQqOcfuMNfMYYXoEgVULjNf6VsjGpC8MG/qHQzZaYSd4i0iaZAHEvYKrNwHMG/YqVYDdOMBCWaaNmhO+k0nntVgrJusxkSSJ0oqGIf7/46jmjWPaX6oSQUZMhYOBvsUIDDtb1WRVCLrlrO3Tg5nQ64vVX/NAKr Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!
ssh-dss AAAAB3NzaC1kc3MAAACBALfXFb/d273VZiHBmMmuZuB+9Sc2St2lHTfCRY6zSxuspwxnQvS2txTiDaBggc7jjNMNGaVooAba84NYqE2WE4FGUadL+9ERpLO1rI4bgJl0ZdSaM4aeBESr2jkTjWYyFrwJ8mpmZjaN/AL17QiiO6zLAm2Ngdt3re3WusD07W2xAAAAFQDmumOZR+fuHKnvBc/hBOdNv6mHdwAAAIEAnQBp2aF6qqSPNGXFgaO9TVkUyU0Dr8qLQlA7isRSiZkiyKiAY8IhFzI5B6vZiig3FYgufHArKiR0hrSrL25Ck9Io0LwWgpUxVNY83tepROLmJ2CJw0VofCmS1buAzOFci4P/yzWpLTCnDVWiT0QOZEUuxdgKCJ5OvLeNZ2o+lKkAAACAK1Xx6lYz/31G5Ly7P7/HRu39s1LpEeLL7Z1GI4CREB/MYjMJL+I12BEnwb/DjQTmsi1CBzmb0+5XO5CAIUl0I6Yr+lInhAwArrYQ1m87PSpORr1nNCzhxeO1QTbJ4Mx4EUWQTaqQFZlg50NF8LWF51VmuB0bugLROZ+6fVn0vyc= Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDYbz1qot7iZuVwB9Lh/cdwOZAWCDKFxRRUmtRpAfMvuw3t+hI6JjADX2cqrgqAK6Yy/IHZMd0JYzglkSkxhoWNTKObdT/iQf4M92BHa9vxk+JitL1T28Pmig5z9wLoE4dCU14p0MBZqxcZibtsU098LDOb0EaEB5rj304ZpqaWY4D7ZdUrwsrjZ/o8fBc6NlqgcgLSx6ZCuJ7WZBgovAqb9d7NcP0aJwTa+KdNTtx3Zf0k4GbqToBUdUAiO0yjmP1eM4LcG0z0nTONp8vIHXf5tyemyPtprfYzeaPS/Aifw74vsg01df/VYq0WoJrr4lAFCCJjITNWfY02w9bcSTKhFpjwyxPmrT9f6q6ajTcg8F9Q8PyYmuWKqRWCAANZ3PeU9tgpXYumIwOdgAQ8mS04KW+N4lytqUB9ROWxtSavz6I9NqXH17S2qixFCfmg7JUYt9EAB0ml4mrOIBQxPSr0Uljm7pw3pmfhA6UvfFJ0ouzYBn/eKPzXr++eNS6/nI8= Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!

# Prüfen ob die UMASK der authorized_keys Ok ist
oracle@rhel83@USERMGR] /home/oracle/.ssh 
$ ls -l known_hosts 
-rw-r--r-- 1 oracle oinstall 171 21. Dez 07:50 known_hosts

Setup der Oracle Datenbank Binaries

Die Verzeichnisse für die Binaries und die Datafiles erzeugen

[root@rhel83 ~]# mkdir /app
[root@rhel83 ~]# chown oracle:oinstall /app
[root@rhel83 ~]# mkdir /oradata
[root@rhel83 ~]# chown oracle:oinstall /oradata

  .bash_profile für den Benutzer Oracle anpassen

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

# User specific environment and startup programs

export PATH

export PATH_ORG=$PATH

PS1="\[\e[32;1m\][\u@\h@\$ORACLE_SID] \$PWD \e[m
$ "

function agent(){

export ORACLE_HOME=/app/oracle/product/agent/agent_13.4.0.0.0
export PATH=$ORACLE_HOME/bin:$PATH_ORG

alias oh='cd $ORACLE_HOME'

}


function ora_18(){

export ORACLE_HOME=/app/oracle/product/18c
export PATH=$ORACLE_HOME/bin:$PATH_ORG

alias oh='cd $ORACLE_HOME'
alias sql='sqlplus / as sysdba'

export ORACLE_SID=USERMGR

}

function ora_19(){

export ORACLE_HOME=/app/oracle/product/19c
export PATH=$ORACLE_HOME/bin:$PATH_ORG

alias oh='cd $ORACLE_HOME'
alias sql='sqlplus / as sysdba'

}

function ora_18_grid(){

export ORACLE_HOME=/app/oracle/product/18grid
export PATH=$ORACLE_HOME/bin:$PATH_ORG

alias oh='cd $ORACLE_HOME'
alias sql='sqlplus / as sysdba'

}

function ora_19_grid(){

export ORACLE_HOME=/app/oracle/product/19grid
export PATH=$ORACLE_HOME/bin:$PATH_ORG

alias oh='cd $ORACLE_HOME'
alias sql='sqlplus / as sysdba'

}

function de(){

echo "Setting DE"
export NLS_LANG=GERMAN_GERMANY.AL32UTF8
export LANG=de_DE.UTF-8
}

function us(){

echo "Setting US"
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export LANG=en_US.UTF-8
}

 Die Verzeichnisse für die Software erstellen und die Binaries kopieren.

 

Die Binaries in das jeweilige Oracle-Home kopieren, Oracle 18c und Oracle 19c, und entpacken.

Jetzt wird die Datenbank Software installiert, wieder jeweils für Oracle18c und Oracle 19c.

Es wird jedoch keine Datenbank erstellt!

Beim Aufruf von ./runInstaller kommt die Fehlermeldung.

Da wir RHEL 8 im Einsatz haben.

Die Lösung für das Problem:

Requirements for Installing Oracle Database/Client 19c on OL8 or RHEL8 64-bit (x86-64) (Doc ID 2668780.1)

 

# Wurde noch in die .bash_profile aufgenommen
export CV_ASSUME_DISTID=OL7

Nun kann die Installation starten sowohl die Version 18c sowie die Version 19c

Die Root-Skripte noch ausführen und fertig.

#Als root
/app/oracle/product/19c/root.sh

Noch das letzte RU installieren

Vorab nuss OPatch noch auf den aktuellen Stand gebracht werden

 

#Das RU auspacken, die Anleitung lesen
#Einen VM Snapshot machen und loslegen

#Datenbank
oracle@rhel83@] /tmp/patch/19c/31771877 
$ $ORACLE_HOME/OPatch/opatch apply

#OJVM
[oracle@rhel83@] /tmp/patch/19c/31668882 
$ $ORACLE_HOME/OPatch/opatch apply

 

 

Nun ist die Grundinstallation agbeschlossen und Maschine ist bereit für das Klonen.

 

Einen Klon erzeugen

Die Template Maschine sollte offline sein.

Hier mache ich immer einen "Full Clone", macht die Verwaltung der VM's einfacher.

 

 

Wir haben jetzt einen Klon der VM erstellt.

Nach dem Start muss nun noch der Hostname, die IP-Adresse und ggf. die Red Hat Subscription angepasst werden.

#/etc/hostname
rhel-83-test.demo.local

#/etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.111.141 rhel-83-test.demo.local rhel-83-test

#vi /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
NAME=ens160
UUID=63e5686d-05a1-4341-bf52-91cee91d7f74
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.111.141
PREFIX=24
GATEWAY=192.168.111.2
DNS1=192.168.111.100
PEERDNS=no

 

 Server duchstarten und das Resultat prüfen.

 

[oracle@rhel-83-test@] /home/oracle 
$ hostname
rhel-83-test.demo.local
[oracle@rhel-83-test@] /home/oracle 
$ ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.111.141  netmask 255.255.255.0  broadcast 192.168.111.255
        inet6 fe80::20c:29ff:fe00:bc30  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:00:bc:30  txqueuelen 1000  (Ethernet)
        RX packets 105  bytes 9120 (8.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 132  bytes 14760 (14.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

...

[oracle@rhel-83-test@] /home/oracle 
$ 

 

 Somit können wir nun in 5 Minuten einen kompetten Datenbank-Server breitstellen.