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.
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:
Beispielvorschlag für eine brauchbare Entwicklungsdatenbank:
Für eine Produktionsdatenbank sollten sie je nach Anzahl Benutzern natürlich mehr Arbeitsspeicher und Prozessoren vorsehen.
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.
Ö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
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>
# 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
# nano /etc/selinux/config SELINUX=permissive
# setenforce permissive
# systemctl stop firewalld # systemctl disable firewalld
# 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
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
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
Skripte erzeugen
$ mkdir ~/scripts $ nano ~/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
#!/bin/bash . /home/oracle/scripts/setEnv.sh export ORAENV_ASK=NO . oraenv export ORAENV_ASK=YES dbstart $ORACLE_HOME
$ nano ~/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
. /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
Im GUI als oracle anmelden und ein Terminal-Fenster öffnen.
Ins ORACLE_HOME Verzeichnis wechseln und das Installationsprogramm starten:
$ cd $ORACLE_HOME $ ./runInstaller
Setzen sie zunächst nur die Software auf, die Datenbank wird später mit dem DBCA erstellt.
Im GUI als oracle anmelden und ein Terminalfenster öffnen.
Den Listener aufstarten und DCBA ausführen:
$ lsnrctl start $ dbca
Server neu starten
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 ...
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;
Folgendes ist als root auszuführen:
Datei /etc/init.d/dbora erzeugen:
# nano /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
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
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
$ 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;
$ 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
VMORA19 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = vmora19)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdb1) ) )
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;