Inhaltsverzeichnis

Oracle 19c Server auf Oracle Linux 7

Vorbemerkung

Oracle Linux (OL, früher bekannt als Oracle Enterprise Linux) ist eine Linux-Distribution, die von Oracle gepackt und frei vertrieben wird. Es wurde aus dem RHEL-Quellcode (Red Hat Enterprise Linux) kompiliert und ersetzt das Red Hat-Branding durch das von Oracle. Benutzer können Oracle Linux kostenlos über den E-Delivery-Service von Oracle (Oracle Software Delivery Cloud) oder von verschiedenen Mirror-Sites herunterladen und kostenlos bereitstellen und verteilen.

Oracle Database 19c ist die langfristige Support-Version der Oracle Database 12c- und 18c-Produktfamilie und bietet Kunden Premier- und Extended Support bis März 2023 bzw. März 2026. In diesem Tutorial wird die Enterprise Edition installiert, aber auch die Standard Edition funktioniert.

In diesem Tutorial werden Linux und Oracle in einer virtuellen Maschine unter Proxmox installiert. Andere Virtualisierungslösungen wie VMware oder VirtualBox gehen natürlich genauso gut.

Installation

Linux ISO herunterladen

Nehmen sie die neuste Version von Oracle Linux 7. Zum Zeitpunkt da diese Anleitung entstand war das 7.7, wenn eine neuere Ausgabe der 7er Version vorhanden ist können sie ruhig jene nehmen.

Oracle Linux 8 sollten sie jedoch nicht nehmen, derzeit ist die Datenbank 19c jedenfalls noch nicht dafür freigegeben und die Installaton scheitert.

Holen sie Oracle Linux von https://edelivery.oracle.com:

Kreieren der Virtuellen Maschine

Beispielvorschlag für eine brauchbare Entwicklungsdatenbank:

Für eine Produktionsdatenbank sollten sie je nach Anzahl Benutzern natürlich mehr Arbeitsspeicher und Prozessoren vorsehen.

Linux Installation

Zeige alle Installationsschritte

An diesem Punkt des grafischen Setups halten wir inne. Vor der Fortsetzung muss das Paket „Oracle 19c preinstall“ installiert werden welches benötigte Komponenten hinzufügt und den Benutzer „oracle“ anlegt den wir im GUI verwenden wollen.

Aktualisierung und Datenbank Installationsvorbereitung

Öffnen sie mit PuTTY eine SSH Terminalverbindung zu „vmora19“ und melden sie sich als root mit dem oben festgelegten Passwort an.

Software aktualisieren:

# yum -y update

„Oracle 19c preinstall“ installieren:

# yum install -y oracle-database-preinstall-19c

Definieren eines Passworts für Benutzer „oracle“ damit wir uns anmelden können:

# passwd oracle

Neustart:

# reboot

Grafisches Setup beenden

Zeige abschliessende Schritte

Anmelden als "oracle" und gnome Benuzerkonfiguration durchführen

Bildschirm Timeout abschalten

SSH Schlüssenauthorisierung für root

Verzeichnis ~/.ssh und Schlüssel generieren:

# ssh-keygen -t rsa -b 4096
    <enter>
    <enter>
    <enter>

Persönlichen Schlüssel in PuTTYgen laden, und den Public Key ins die Zwischenablage kopieren:


Public Key des persönlichen Schlüssels zu authorized_keys hinzufügen:

# nano ~/.ssh/authorized_keys
<paste>

Passwortanmeldung für SSH Verbindungen ausschalten:

# nano /etc/ssh/sshd_config
...
PasswordAuthentication no
...

SSH neu starten:

# service sshd restart

Aktuelles PuTTY Terminal zur Sicherheit noch offen lassen.

In PuTTY eine Session für root erzeugen und testen:

Testen ob das Autologin funktioniert:


Logo erzeugen bei http://www.network-science.de/ascii/

Logo in Zwischenablage kopieren und in motd einfügen

# nano /etc/motd
<paste>

rlwrap für Cursortasten in SqlPlus installieren

# wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# rpm -ivh epel-release-latest-7.noarch.rpm
# yum -y install rlwrap

SELinux auf Permissive ändern

# nano /etc/selinux/config
SELINUX=permissive
# setenforce permissive

Firewall ausschalten

# systemctl stop firewalld
# systemctl disable firewalld

Oracle Verzeichnisse anlegen

# mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1
# mkdir -p /u02/oradata
# mkdir -p /u02/orafra
# chown -R oracle:oinstall /u01 /u02
# chmod -R 775 /u01 /u02

SSH Login für Benutzer oracle

Analog wie bei root:

# su oracle
$ ssh-keygen -t rsa -b 4096
    <enter>
    <enter>
    <enter>
$ nano ~/.ssh/authorized_keys
<paste des eigenen Public Key>

PuTTY Session anlegen

Testen ob es funktioniert:


$ exit
# reboot

Oracle Database 19c Software beschaffen

Download von https://www.oracle.com/database/technologies/oracle19c-linux-downloads.html

Filezilla verwenden um sich als oracle per SFTP/SSH zu verbinden, dann LINUX.X64_193000_db_home.zip hochladen nach /home/oracle

Vorbereitungen als Benutzer oracle

Skripte erzeugen

$ mkdir ~/scripts
$ nano ~/scripts/setEnv.sh
~/scripts/setEnv.sh
# Oracle Settings
export TMP=/tmp
export TMPDIR=$TMP
 
export ORACLE_HOSTNAME=ora19
export ORACLE_UNQNAME=cdb1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1
export ORA_INVENTORY=/u01/app/oraInventory
export ORACLE_SID=cdb1
export PDB_NAME=pdb1
export DATA_DIR=/u02/oradata
 
export PATH=/usr/sbin:/usr/local/bin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
 
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
$ nano ~/scripts/start_all.sh
~/scripts/start_all.sh
#!/bin/bash
. /home/oracle/scripts/setEnv.sh
 
export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES
 
dbstart $ORACLE_HOME
$ nano ~/scripts/stop_all.sh
~/scripts/stop_all.sh
#!/bin/bash
. /home/oracle/scripts/setEnv.sh
 
export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES
 
dbshut $ORACLE_HOME

Skripte ausführbar machen:

$ chmod u+x ~/scripts/*.sh

An Datei .bash_profile anhängen:

$ nano ~/.bash_profile
~/.bash_profile
. /home/oracle/scripts/setEnv.sh
alias sqlplus="rlwrap sqlplus"

Abmelden, und erneut als oracle anmelden, dann:

$ cd $ORACLE_HOME
$ unzip -oq ~/LINUX.X64_193000_db_home.zip

DB Software Installation starten

Im GUI als oracle anmelden und ein Terminal-Fenster öffnen.

Ins ORACLE_HOME Verzeichnis wechseln und das Installationsprogramm starten:

$ cd $ORACLE_HOME
$ ./runInstaller

Setup mit dem Oracle Database 19c Installer

Setzen sie zunächst nur die Software auf, die Datenbank wird später mit dem DBCA erstellt.

Zeige alle Schritte

Datenbank mit dem DBCA erstellen

Im GUI als oracle anmelden und ein Terminalfenster öffnen.

Den Listener aufstarten und DCBA ausführen:

$ lsnrctl start
$ dbca

Zeige alle Schritte

Server neu starten

Weitere Schritte nach der Installation

Als root

Datei /etc/oratab bearbeiten und das restart Flag auf 'Y' setzen damit die cdb1 beim DB Start ebenfalls automatisch startet:

# nano /etc/oratab
...
cdb1:/u01/app/oracle/product/19.3.0/dbhome_1:Y
...

Als oracle

Den Listener und die DB aufstarten:

$ lsnrctl start
 ~/scripts/start_all.sh

Oracle Managed Files (OMF) aktivieren einstellen dass die PDB ebenfalls startet wenn die Instanz gestartet wird.

$ sqlplus / as sysdba
--
alter system set db_create_file_dest='/u02/oradata';
alter pluggable database pdb1 open;
alter pluggable database pdb1 save state;

Automatisierung des DB Starts und des Herunterfahrens

Folgendes ist als root auszuführen:

Datei /etc/init.d/dbora erzeugen:

# nano /etc/init.d/dbora
/etc/init.d/dbora
#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Set ORA_OWNER to the user id of the owner of the 
# Oracle database software.
 
ORA_OWNER=oracle
 
case "$1" in
    'start')
        # Start the Oracle databases:
        # The following command assumes that the oracle login 
        # will not prompt the user for any values
        # Remove "&" if you don't want startup as a background process.
        su $ORA_OWNER -c "/home/oracle/scripts/start_all.sh >> /home/oracle/scripts/startup_shutdown.log 2>&1" &
 
        touch /var/lock/subsys/dbora
        ;;
    'stop')
        # Stop the Oracle databases:
        # The following command assumes that the oracle login 
        # will not prompt the user for any values
        su $ORA_OWNER -c "/home/oracle/scripts/stop_all.sh >> /home/oracle/scripts/startup_shutdown.log 2>&1"
        rm -f /var/lock/subsys/dbora
        ;;
esac

Die Skript-Berechtigungen auf 750 einstellen

# chmod 750 /etc/init.d/dbora

Den „dbora“ Dienst mit passenden Runlevels assiziieren und auf Auto-start einstellen

# chkconfig --add dbora

Sie können die Datenbank als root mit dem Dienst starten und herunterfahren, was genau das ist das beim Neustart des Systems geschieht:

# service dbora stop
# service dbora start

Enterprise Manager Express aktivieren (optional)

Diesen Teil bezeichne ich als optional, da der Web-basierte Enterprise Manager Express von Oracle 19c nur noch ein müder Abklatsch der früheren Enterprise Manager ist (deshalb nennen sie ihn wohl auch „Express“). Er taugt nur noch dazu denStatus der DB grob zu beobachten, alle echten Management-Funktionen fehlen jedoch völlig. Der Nutzen ist deshalb äusserst fraglich.

Als oracle:

$ sqlplus / as sysdba
--
exec dbms_xdb_config.sethttpsport(5500);

Test im Browser

Administration

Tablespaces in pdb1 erzeugen

Sie denken vielleicht, dass es eine gute Idee ist, die Tablespaces unter den Verzeichnissen /u01 oder /u02 zu speichern, auch weil die Oracle-Dokumente über „optimale flexible Architektur“ dies zu suggerieren scheinen. Wenn Sie diese Anleitung befolgt haben, wird jedoch beim Überprüfen der verfügbaren Festplattengröße ein Problem angezeigt:

$ df -h

Filesystem                   Size  Used Avail Use% Mounted on
devtmpfs                     1.8G     0  1.8G   0% /dev
tmpfs                        1.8G  960M  879M  53% /dev/shm
tmpfs                        1.8G  9.5M  1.8G   1% /run
tmpfs                        1.8G     0  1.8G   0% /sys/fs/cgroup
/dev/mapper/ol_vmora19-root   50G   28G   23G  55% /
/dev/sda1                   1014M  331M  684M  33% /boot
/dev/mapper/ol_vmora19-home  445G   36G  409G   9% /home
tmpfs                        368M     0  368M   0% /run/user/54321
tmpfs                        368M   12K  368M   1% /run/user/42

Wie Sie sehen können, befinden sich /u01 und /u02 unter /dev/mapper/ol_vmora19-root, was 50 GB gross ist. Der grösste Teil des Laufwerks ist jedoch unter /home verfügbar, nämlich 445 GB. Deshalb platziere ich meine Anwendungs-Tablespaces jeweils unter /home/oracle:

$ mkdir /home/oracle/pdb1
$ chmod 750 /home/oracle/pdb1
$ sqlplus / as sysdba

Tablespaces kreieren und auflisten:

SQL> ALTER SESSION SET CONTAINER = pdb1;
SQL> CREATE TABLESPACE lu_agrar_dat  DATAFILE '/home/oracle/pdb1/lu_agrar_dat.dbf' SIZE 100M  AUTOEXTEND ON NEXT 100M;
SQL> CREATE TABLESPACE lu_agrar_inx  DATAFILE '/home/oracle/pdb1/lu_agrar_inx.dbf' SIZE 100M  AUTOEXTEND ON NEXT 100M;
SQL> SELECT TABLESPACE_NAME, STATUS, CONTENTS FROM DBA_TABLESPACES;

TABLESPACE_NAME                STATUS    CONTENTS
------------------------------ --------- ---------------------
SYSTEM                         ONLINE    PERMANENT
SYSAUX                         ONLINE    PERMANENT
UNDOTBS1                       ONLINE    UNDO
TEMP                           ONLINE    TEMPORARY
USERS                          ONLINE    PERMANENT
LU_AGRAR_DAT                   ONLINE    PERMANENT
LU_AGRAR_INX                   ONLINE    PERMANENT
7 rows selected.

Überprüfen dass die neuen Tablespaces tatsächlich nur in pdb1 verfügbar sind:

SQL> ALTER SESSION SET CONTAINER = CDB$ROOT;
SQL> SELECT TABLESPACE_NAME, STATUS, CONTENTS FROM DBA_TABLESPACES;

TABLESPACE_NAME                STATUS    CONTENTS
------------------------------ --------- ---------------------
SYSTEM                         ONLINE    PERMANENT
SYSAUX                         ONLINE    PERMANENT
UNDOTBS1                       ONLINE    UNDO
TEMP                           ONLINE    TEMPORARY
USERS                          ONLINE    PERMANENT

Tablespaces aus pdb1 entfernen und löschen

$ sqlplus / as sysdba

Tablespaces anzeigen und löschen:

SQL> ALTER SESSION SET CONTAINER = pdb1;
SQL> SELECT TABLESPACE_NAME, STATUS, CONTENTS FROM DBA_TABLESPACES;
SQL> DROP TABLESPACE lu_agrar INCLUDING CONTENTS AND DATAFILES;

Speicherverbrauch überwachen

$ sqlplus / as sysdba

Speicherverbrauch pro Tablespace überwachen:

SQL> select tablespace_name, round(bytes/1024/1024) MB, round(bytes/1024/1024/1024,3) GB from cdb_data_files;

Beispielausgabe:

TABLESPACE_NAME                        MB         GB
------------------------------ ---------- ----------
USERS                                   5       .005
UNDOTBS1                               65       .063
SYSTEM                                840        .82
SYSAUX                                580       .566
SYSTEM                                290       .283
SYSAUX                                430        .42
UNDOTBS1                              220       .215
USERS                                   5       .005
LU_AGRAR_DAT                           50       .049
LU_AGRAR_INX                           50       .049

Wenn sie nur die Summe aller Benutzer-Daten wollen:

SQL> select round(sum(bytes)/1024/1024) MB, round(sum(bytes)/1024/1024/1024,3) GB from cdb_data_files -
   > where tablespace_name not like 'SYS%' and tablespace_name not like 'UNDO%';

Beispielausgabe:

        MB         GB
---------- ----------
      2535      2.476

TNSNAMES Eintrag bei Clients

VMORA19 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = vmora19)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = pdb1)
    )
  )
  

Ablaufen der Passworte verhindern

Möglicherweise möchten Sie das Ablaufen des Kennworts zumindest für SYSTEM und die BPS-Superuser deaktivieren.

$ sqlplus / as sysdba

Die Profile kontrollieren:

SQL> alter session set container = pdb1;
SQL> select profile from DBA_USERS where username = 'SYSTEM';
SQL> select profile from DBA_USERS where username = 'LU_AGRAR';

Einstellungen in den Profilen kontrollieren, z.B. im DEFAULT Profil:

SQL> select resource_name, limit from dba_profiles where profile='DEFAULT';

Auf unlimitiert ändern:

SQL> alter profile DEFAULT limit password_life_time UNLIMITED;

Einen Benutzer wieder entsperren:

SQL> alter user LU_AGRAR identified by lu_a****** account unlock;