# Oracle XE DB Installation

<p class="callout warning">Die Oracle XE Datenbank läuft nur auf Intel-Prozessoren. Auf ARM basierten Servern wie z. B. dem Raspberry PI lässt sich die Datenbank nicht installieren.</p>

Um mit der freien Oracle XE Datenbank arbeiten zu können, wird diese auf dem lokalen Server ubusrv als Docker Container installiert. Hierzu ist die Datei ~/workspace/docker/docker-compose.yml um folgenden Eintrag zu ergänzen:

```yaml
    #
    # Oracle XE DB
    #
    oracle:
        image: gvenzl/oracle-xe:full
        volumes:
            - oracle_data:/data/oradb
        restart: always
        ports:
            - 1521:1521
        environment:
            ORACLE_PASSWORD: bistef03
            APP_USER: anlei
            APP_USER_PASSWORD: anlei

...
#
# Declare Volumes
#
volumes:
    db_data: {}
    mongo_data: {}
    oracle_data: {}
```

Nach einem `sudo docker-compose down` gefolgt von einem sudo `Docker-compose up &` wird das Image vom Docker-Hub heruntergeladen, installiert und gestartet.

Die Datenbank ist nun über das Port 1521 erreichbar. Neben dem Datenbank Basis-Container XE-DB wurde im Datenbank-Container XEPDB1 automatisch das Schema ANLEI angelegt. Auslöser sind die Parameter APP\_USER und APP\_USER\_PASSWORD in obiger .yml Datei. Somit können zwei DBA-Verbindungen und eine USER-Verbindung zur Datenbank aufgebaut werden. Die Verbindungsparameter für diese lauten für den SQL-Developer wie folgt:

```
SYS@XE-DB
=========
	Datenbanktyp: 			Oracle
	Authentifizierungstyp: 	Standard
	Benutzername:			sys
	Rolle:					SYSDBA
	Kennwort:				bistef03
	Verbindungstyp:			Einfach
    Hostname:				ubusrv
    Port:					1521
    SID:					XE
    Servica-Name:			(kein Eintrag)

SYS@XEPDB1
==========
	Datenbanktyp: 			Oracle
	Authentifizierungstyp: 	Standard
	Benutzername:			sys
	Rolle:					SYSDBA
	Kennwort:				bistef03
	Verbindungstyp:			Einfach
    Hostname:				ubusrv
    Port:					1521
    SID:					(kein Eintrag)
    Servica-Name:			XEPDB1

ANLEI@XEPDB1
==========
	Datenbanktyp: 			Oracle
	Authentifizierungstyp: 	Standard
	Benutzername:			anlei
	Rolle:					Standard
	Kennwort:				anlei
	Verbindungstyp:			Einfach
    Hostname:				ubusrv
    Port:					1521
    SID:					(kein Eintrag)
    Servica-Name:			XEPDB1
```

Um ein weitere Schemas im Arbeitscontainer XEPDB1 anzulegen, sind nachfolgende SQL-Befehle als SYS-User auszuführen:

```sql
//
// Es wird davon ausgegangen, dass SYS sich auf dem Basis-Container
// angemeldet hat. Sollte sich SYS auf dem dem Arbeits-Container
// XEPDB1 angemeldet haben, können die beiden ALTER SESSION Befehle
// zu Beginn und zum Ende des Skripts auskommentiert werden.
//
// Der Term <schemaname> ist durch den gewünschten Schema-Namen zu
// ersetzen.
//
ALTER SESSION SET CONTAINER = XEPDB1;

CREATE BIGFILE TABLESPACE
    <schemaname>_bfts
    DATAFILE '<schema_name>_bfts1.dbf'
    SIZE 20M
    AUTOEXTEND ON
;

CREATE USER
    <schemaname>
    IDENTIFIED BY <password>
    DEFAULT TABLESPACE <schemaname>_bfts
    QUOTA UNLIMITED ON <schema_name>_bfts
;

GRANT ALL PRIVILEGES TO <schema_name> WITH ADMIN OPTION;

ALTER SESSION SET CONTAINER = CDB$ROOT;
```