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:
- Melden sie sich mit ihrem Oracle Konto an (ggf. kostenlose Registrierung möglich)
- Suchen sie nach „Oracle Linux“
- Fügen sie „DLP: Oracle Linux 7.7.0.0.0 (Oracle Linux)“ zum Warenkorb hinzu
- Wählen sie beim Checkout „x86 64 bit“ als Plattform
- Akzeptieren sie die Lizenzvereinbarung
- Laden sie „VV983339-01.iso Oracle Linux Release 7 Update 7 for x86 (64 bit), 4.4 GB“ herunter
Kreieren der Virtuellen Maschine
Beispielvorschlag für eine brauchbare Entwicklungsdatenbank:
- Installations-Disk Image Datei (iso): V1004253-01.iso
- Name der virtuellen Maschine: ora19
- Maximale Festplattengrösse: 100 GB
- Virtuelle Festplatte als eine einzige Datei speichern
- Arbeitsspeicher: 3 GB
- Prozessoren: 2
- Netzwerk-Adapter: Bridged
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
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:
- Session
- Host Name: ora19
- Port: 22 / SSH
- Connection
- Data
- Auto-login username: root
- SSH
- Auth
- Private key file: (Speicherort meiner ppk Datei)
- Session
- Saved sessions: ora19 - root
- Save
Testen ob das Autologin funktioniert:
Motd Logo
Logo erzeugen bei http://www.network-science.de/ascii/
- Text: vmora19
- Font: slant
- Reflection: no
- Adjustment: center
- Stretch: no
- Width: 80
- do it!
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
- Session „vmora19 - root“ laden
- Auto-login username ändern auf: oracle
- Session speichern als „vmora19 - oracle“
Testen ob es funktioniert:
$ exit # reboot
Oracle Database 19c Software beschaffen
Download von https://www.oracle.com/database/technologies/oracle19c-linux-downloads.html
- Auswählen: LINUX.X64_193000_db_home.zip
- Lizenzvereinbarung akzeptieren
- Auf „Download“ klicken
- Mit eigenem Oracle Konto anmelden (ggf. kostenlose Registrierung möglich)
- Datei auf eigenem Arbeitsplatz-PC abspeichern
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.
Datenbank mit dem DBCA erstellen
Im GUI als oracle anmelden und ein Terminalfenster öffnen.
Den Listener aufstarten und DCBA ausführen:
$ lsnrctl start $ dbca
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;