next Data Retrieval
up Advanced education: Oracle [] Certified Professional Database Administrator
previous Intro
  Contents   Index

Einführung in PL / SQL Oracle 8i/9i


Oracle 9i Installation unter Linux

Diese Anleitung gilt für eine Installation für Schulungszwecke.

Schwierigkeiten bei der Installation unter Linux resultieren daraus, dass vor der Installation das Betriebssystem zunächst konfiguriert werden muß (z.B. Konfiguration der Kernelparameter). Desweiteren ist die Installation an sich noch nicht sehr gut automatisiert.


Systemvoraussetzungen

Um Oracle 9i zu installieren, empfiehlt der Hersteller folgende Systemvoraussetzungen:
Arbeitsspeicher: Minimum 512 MB RAM
SWAP Space: Optimal sind 1 GB aber mindestens so groß wie der Arbeitsspeicher.


Download

Oracle Database Enterprise/Standard Edition läßt sich kostenlos nach Registrierung von [7] herunterladen. Die Datenbank besteht aus drei Paketen, die hier nach einer Anmeldung runtergeladen werden können. Folgende Pakete müssen vorliegen: Außerdem sollte von [11] das Paket orarun.rpm runtergeladen werden, das später noch benötigt wird, um die Kernelparameter zu konfigurieren.


Erzeugen der User und Gruppen

Die Installation und Administration von Oracle sollte unter einem gesonderten Nutzer erfolgen. Dieser Nutzer heißt oracle und wird von Suse schon bei der Installation der Distribution angelegt. Er gehört zu den Gruppen dba und oinstall und erhält sein persönliches Verzeichnis im Gegensatz zu anderen Nutzern nicht unter /home, sondern unter /opt/oracle.

Damit die Installation und die Administration von Oracle durchgeführt werden kann, müssen in der .profile des Users oracle noch Pfadangaben für die Arbeit mit Oracle eingefügt werden. Da die .profile unter /opt/oracle noch nicht vorhanden ist, kann sie von einem anderen Nutzer in das Verzeichnis /opt/oracle kopiert werden, um die Umgebungsvariablen zu setzen. Diese Variablen überschreiben beim Login als oracle die unter /etc/profile.d/oracle.sh eingelesenen Variablen.


Kernelparameter, C-Bibliotheken und C-Compiler

Oracle benötigt unter Suse mindestens den Kernel 2.4.7 und glibc 2.2.2. Welcher Kernel vorhanden ist, erfährt man mit diesem Befehl:
uname -a
Die Version der auf Ihrem System vorhandenen C-Bibliotheken erfährt man über diesen Befehl:
/lib/libc.so.6
Auf unserem System war als C-Bibliothek die Version 2.2.4 installiert und der Kernel lief in der Version 2.1.10. Ein Update dieser Komponenten war also nicht nötig. Sollte dieses Update nötig sein, kann es über die Update Funktion von Yast/Yast2 unkompliziert durchgeführt werden. Anschließend wurde noch der vorhandene C-Compiler getestet und der Pfad zum Compiler ermittelt.
which gcc
Nun wird die Version des Gnu-C Compilers (gcc) ermittelt.
gcc -v -dumpversion
An dieser Stelle kommt jetzt auch das von Suse runtergeladene rpm zum Einsatz. Die Installation des Paketes erfolgen über diesen Befehl:
rpm -Uvh orarun.rpm
Erledigt wird dabei dieses:


Java Laufzeit Umgebung

In einigen Installation-Guides findet man den Hinweis, dass es zu Problemen kommt, wenn auf einem Linux System bereits ein jre installiert ist, da Oracle sein eigenes Runtime Environment mitbringt. Diese Probleme ließen sich unter Oracle 9.0.2 nicht reproduzieren und wurden offensichtlich in der aktuellen Oracle Distribution gefixt.

Entpacken der Dateien

Die vorhandenen drei Pakete müssen zunächst entpackt werden.
gunzip lnx_920_disk1.cpio.gz lnx_920_disk2.cpio.gz lnx_920_disk3.cpio.gz
Zusätzlich zur Komprimierung sind die benötigten Dateien nochmal in ein cpio Archiv zusammengefaßt worden. Nachdem die Dateien entpackt wurden, muß deshalb die im Archiv zusammengefaßte Verzeichnisstruktur über eine 'Dearchivierung' wieder hergestellt werden.
cpio -idmv < lnx_920_disk1.cpio
cpio -idmv < lnx_920_disk2.cpio
cpio -idmv < lnx_920_disk3.cpio
Danach sind im Installationsverzeichnis die Ordner Disk1, Disk2 und Disk3 sichtbar. Ab hier erfolgt jetzz die eigentlichie Installation.


runInstaller

Einloggen als User oracle mit X-Window. Um Probleme mit der Variable LANG zu vermeiden, ist diese zu löschen. Um die eigentliche Installation zu starten, ist ein Wechsel in das Verzeichnis Disk1 notwendig. Über ./runInstaller wird die grafische Installation gestartet und das erste Fenster zur Benutzerführung erscheint.
umask 022
unset LANG
cd Disk1
./runInstaller
Oracle Universal Installer
Dialogbox 'Welcome'.

Dialogbox 'File Locations'
Source: ... Disk1/stage/products.jar
Destination (ORACLE_HOME): /opt/oracle/OraHome1
Hier wird ein Hauptverzeichnis vorgeschlagen. Dieser Vorschlag kann über einen klick auf OK angenommen werden.

Dialogbox 'Unix Group Name', Group: oinstall.
Eingabe des Gruppennamens, zu der der User oracle im Linux System gehört. In diesem Fall ist, da der User bereits angelegt ist und zur Gruppe oinstall und dba gehört, der Gruppenname oinstall. Der Schritt kann so akzeptiert werden.

Dateiverzeichnisse.
Angabe des Verzeichnisses, das als Installationsquelle dient und Angabe des Zielverzeichnisses.

Auswahl der Installationsprodukte.
Hier sollte für eine Installation des Oracle Servers und aller Management-Tools die oberste Option gewählt werden.

Auswahl der Installationsart.
Auch hier sollte die oberste Option (Enterprise Edition) ausgewählt werden.

Auswahl der Datenbank, die bei der Installation erstellt wird.
Es sollte 'General Purpose' ausgewählt werden, da hier eine vorkonfigurierte Datenbank für allgemeine Anwendungen installiert wird.

Dialogbox 'Choose JDK Home Directory'
In einer Konsole ermitteln, wo das JDK-Home-Directory ist:
set | grep JDK_HOME
Ggf. anpassen. Bei SuSE 8.2 ist es: /usr/lib/java

Dialogbox 'Database Identification'
Angabe des globalen Datenbanknamens im ersten Feld und eines Namens für die Datenbankinstanz im zweiten Feld. Creation Database
global database name: testdb
SID: testdb

Auswahl des Zeichensatzes.
Die oberste Option kann ausgewählt bleiben, da hier der Standard-Zeichensatz des Rechners ausgewählt ist.

Dialogbox 'Summary'
'Install' klicken.

Kurz vor Abschluß der Installation müssen einige Dateien und Verzeichnisse überschrieben werden. Deshalb muß ein Sript als user "root" ausgeführt werden, da dem User "oracle die Berechtigung dafür fehlt. Das Script zur Ausführung heißt root.sh und ist unter /opt/oracle/product/9.0.2 zu finden. Um es auszuführen muß die Konsole geöffnet werden und ein su auf root durchgeführt werden. Dann wird über ./root.sh das Script ausgeführt. Die Abfrage, ob die Dateien, bzw. Verzeichnisse überschrieben werden sollen, mit Enter bestätigen und danach im noch offenen Fenster auf ok klicken, damit die Installation forgesetzt wird.

/opt/oracle/OraHome1/root.sh hat aber einen Bug:

RUID=`/usr/bin/id|\$AWK -F\( '{print \$2}'|\$AWK -F\) '{print \$1}`
Es fehlt ein Hochkomma vor dem letzten zurückgerichteten Hochkomma:
RUID=`/usr/bin/id|\$AWK -F\( '{print \$2}'|\$AWK -F\) '{print \$1}'`
Es werden noch einige Konfigurationswerkzeuge installiert, deren Installation optional ist. Die Installation dieser Werkzeuge kann auch später wiederholt werden.

Repository einrichten
/opt/oracle/OraHome1/bin/emca &

Oracle Enterprise Manager - Configuration Assistant
...


Erstellen einer Datenbank

Um eine Datenbank unter Oracle zu erstellen, ist es sinnvoll, diese Einrichtung mit dem Datenbankassistenten vorzunehmen. Da die einzelnen Verzeichnisse bei der Einrichtung des Betriebssystems in den Pfad aufgenommen wurde, können wir jetzt von jeder beliebigen Stelle als user oracle einfach dbca in die Kommandozeile eintippen und der Datenbankkonfigurationsassistent wird gestartet.
dbca
An dieser Stelle kann einfach auf weiter geklickt werden.

Es werden unterschiedliche Optionen für die Verwaltung von vorhandenen Datenbanken angeboten. Da bisher noch keine Datenbank vorhanden ist, sind die Optionen 'Konfigurieren' und 'Löschen' ausgeblendet. Da eine Datenbank erstellt werden soll, wählen wir 'Datenbank erstellen'.

Dies ist ein wichtiger Schritt, denn ab Oracle 9i wird die Möglichkeit geboten Vorlagen zu erstellen, wie eine Datenbank beschaffen sein soll. Wir wählen hier die erste Option, da diese Vorlage zur allgemeinen Verwendung gedacht ist. Außerdem werden bei Auswahl dieser Option auch schon alle Datendateien erstellt.

Beim Klick auf 'Details' geht eine neues Fenster auf. Dieses Fenster enhält eine Auflistung aller Parameter für die Datenbankvorlage und kann bei Bedarf als html gespeichert werden.

Hier muß der Name für die Datenbank angegeben werden. Oracle hängt an diesen Namen später den Domainnamen ran, so das dieser Datenbankname später meinname.meinedomain lautet. Außerdem wird hier der Name für die Datenbankinstanz angegeben.
WICHTIG: Über diesen Namen, die sogenannte SID kann die Datenbank später referenziert werden. Das heißt, der Zugriff auf die Datenbank, z.B. von einem anderen Rechner aus, ist später über diese SID möglich.

Auswahl, in welchem Modus auf die Datenbank zugegriffen werden soll. Hier gibt es zwei Möglichkeiten:
Der Zugriff auf die Datenbank erfolgt über den dedizierten Server Modus. Das heißt, für jeden Client wird eine explizite Verbindung zur Datenbank hergestellt. Diese Einstellung ist sinnvoll, wenn nur wenige Clients gleichzeitig auf die Datenbank zugreifen.
Der Zugriff auf die Datenbank erfolgt über den sogenannten Shared Server Modus. (siehe Seite [*]). Dieser Modus stellt eine Verbindungsverwaltung dar, die analog zu einem Connection Pooling funktioniert. Das bedeutet, eine Anzahl von Verbindungen wird zur Datenbank aufgebaut und ist immer vorhanden. Einem User wird dann eine Verbindung aus diesem Pool zugewiesen. Wird diese Verbindung vom User freigegeben, bleibt die Verbindung bestehen und wird an den nächsten User weitergegeben. Das hat den großen Vorteil, dass nicht immer wieder neue Verbindungen zur Datenbank aufgebaut und wieder freigegeben werden müssen. Option 1 wurde in diesem Fall von uns gewählt, da sie für eine Testinstallation völlig ausreicht.

An dieser Stelle werden die Initialisierungsparameter für die Datenbank angegeben. Dazu gehören die Speicherverwaltung, die Zeichensätze, die verwandt werden sollen, die DB-Skalierung (d.h. der maximale Speicherplatz, der für Sortiervorgänge genutzt werden kann, wobei höhere Werte die Effizienz von umfangreichen Sortiervorgängen erhöhen), die Dateispeicherorte und die Aktivierung des Archivelogmodus. Dieser Modus speichert Redo-Log Dateien, bevor sie wiederverwandt werden. Im Notfall (Plattencrash, Verlust der Datenbank), kann so die Datenbank komplett wiederhergestellt werden. Dieser Modus ist automatisch aktiviert.

Einstellung der Parameter für die Speicherung der Datenbank. In einer Baumstruktur erhält man hier eine zusammenfassende Ansicht in der folgende Objekte angezeigt und angepaßt werden können:

Dies ist der letzte Schritt vor der Erstellung der Datenbank. Standardmäßig ist die obere Checkbox mit einem Haken versehen und bei einem Klick auf die untere Checkbox gibt es die Möglichkeit eine eigene Datenbankvorlage zu speichern. Das heißt, es wird so etwas wie ein Template angelegt, dass später mit den eingestellten Parametern erneut aufgerufen werden kann und eine Datenbank erstellt, die den gespeicherten Vorgaben entspricht.

Beim Klick auf Beenden wird die Datenbank erstellt.

Nun müssen noch die Passwörter angegeben werden. Diese Passwörter gelten für den Benutzer SYS und für den Benutzer SYSTEM. Zur Sicherheit müssen die Passwörter wiederholt werden.
SYS Passwort: change_on_install
SYSTEM Passwort: manager

Nach dem Klick auf 'Beenden' ist die Erstellung der Datenbank abgeschlossen und die Passwörter sind gespeichert.


Konfigurieren von Oracle

Um überhaupt auf die Datenbank zugreifen zu können, ist es jetzt noch notwendig, eine Listenerprozeß einzurichten. Dafür steht ein Tool zur Verfügung, das über den Aufruf netmgr gestartet wird. Es erscheint jetzt ein Fenster das annähernd analog zum 'Net 8 Assistant' aufgebaut ist.

Wenn im rechten Fenster auf den Ordner 'Listener' geklickt wird und danach auf das grüne Kreuz auf der linken Seite, kann ein neuer Listenerprozeß eingerichtet werden. Dann im rechten Teil des Fensters 'Database Services' aus dem Dropdown Menü auswählen und bei den Registerkarten auf 'Add Database' klicken. Die bei der Installation der Datenbank angegebene SID kann jetzt im Feld SID eingetragen werden. Die Felder Global Database Name und Oracle Home Directory können so belassen werden. Ein Service Name für die Kennzeichnung der Verbindung zur Datenbank (unter Service Naming auf der linken Seite) muß nicht mehr angegeben werden. Im Gegensatz zu Oracle 8 wird unter der 9i bereits ein Servicename für die Datenbankinstanz angelegt, so dass unter diesem Namen auf die Datenbank zugegriffen werden kann, wenn ein Listenerprozeß angelegt wurde.


Datenbankinstanz und Listener starten

Zunächst muß in der Datei /etc/oratab folgende Zeile verändert werden:
meindatenbankname:/opt/oracle/product/9.0.2:Y (von N auf Y ändern)

Danach wird der Befehl dbstart ausgeführt.

dbstart
Es kommen einige Meldungen die den Status des Starts ausgeben. Die Meldungen schließen mit Database 'meindatenbankname' warm started ab. Geschlossen wird die Datenbank über den Befehl dbshut.
dbshut
Wenn mehrere Datenbanken vorhanden sind, muß über den Befehl export ORACLE_SID=sid bekannt gemacht werden, welche Datenbank gestartet werden soll.

Der Listenerprozeß wird folgendermassen gestartet.

lsnrctl start LISTENER
Analog dazu wird er beendet.
lsnrctl stop LISTENER
Auch hier werden wieder Statusmeldungen ausgegeben. War der Start des Listeners erfolgreich, schließen diese Statusmeldungen mit dem Satz "Der Befehl wurde erfolgreich ausgeführt". Über den Befehl ps ax | grep LISTENER kann ich mir z.B. die PID des Listenerprozesses ausgeben lassen.
ps ax | grep LISTENER
Beim Aufruf des Befehls sqlplus kann ich jetzt über die Angabe von Benutzername/Passwort@Dienstname auf die Datenbank zugreifen.
sqlplus
....
sqlplus> .....: Benutzername/Passwort@Dienstname

Oracle-Tools

Die Oracle-Tools liegen im Path $ORA_HOME/bin/*

iSQL*Plus
http://localhost:7778/isqlplus
Siehe [8].

SQL*Plus-Worksheet
oemapp worksheet

SQL-Plus
sqlplus user/passwort@db ... @*.sql
sqlplus "/sysdba
Um mit den Beispieltabellen zu arbeiten, müssen Sie sich wie folgt einloggen:
sqlplus sys@testd as sysdba

oerr - Anzeige von Beschreibungen zu Oracle-Fehlermeldungen. Z.B. für den Fehler ORA-02291:

oerr ora 02291
02291, 00000,"integrity constraint (%s.%s) violated - parent key not found"
// *Cause: A foreign key value has no matching primary key value.
// *Action: Delete the foreign key or add a matching primary key.
Oracle Launch Pad
olp

Instance-Manager
oemapp instance

Server-Manager
svrmgrl

DBA-Studio
oemapp dbastudio

Console
oemapp console

Oracle Enterprise Manager - Configuration Assistant (z.B. Repository einrichten)
emca

netass
netass

netca
netca
Port einrichten und starten.

Datenbank-Design


Der Normalisierungsprozess

Die Normalisierung bezweckt die redundanzfreie Speicherung von Informationen innerhalb der Tabellen. Unter redundanzfreier Datenspeicherung versteht man, daß gleiche Informationen nicht mehrfach gespeichert werden.


1. Normalform

Eine Tabelle ist nach der ersten Normalform ausgerichtet, wenn alle elementaren Informationen in einzelne Felder aufgeteilt werden.

2. Normalform

Die zweite Normalform basiert auf der ersten Normalform und fordert eine eindeutige Identifikationsmöglichkeit der einzelnen Datensätze. Es dürfen keine Dateninhaltswiederholungen vorkommen.

3. Normalform

Die dritte Normalform basiert auf der zweiten Normalform und stellt eine weitere Verfeinerung dar. Es dürfen innerhalb einer Tabelle die Feldwerte nur vom Identifikationsschlüssel abhängig sein und untereinander keine Abhängigkeiten haben.


Beziehungen

In der Regel besteht eine relationale Datenbank nicht nur aus einer Tabelle, sondern aus mehreren. Die einzelnel Tabellen dürfen nicht isoliert betrachtet werden. Zwischen Tabellen können Beziehungen bestehen. Die Anzahl der möglichen Beziehungen ist begrenzt und ergibt sich aus der Kombination der möglichen Assioziationstypen.

Assoziation
Eine Assoziation bestimmt, wieviel Datensätze einer Tabelle 2 zu einem Datensatz der Tabelle 1 gehören.


1 - einfache Assoziation

Datensatzanzahl in Tabelle 2 - genau ein Datensatz (1)


c - konditionelle Assoziation

Datensatzanzahl in Tabelle 2 - kein oder genau ein Datensatz (0/1)


m - multiple Assoziation

Datensatzanzahl in Tabelle 2 - mindestens ein Datensatz ( >= 1)


mc - multiple-konditionelle Assoziation

Datensatzanzahl in Tabelle 2 - beliebig viele Datensätze ( >= 0)

Übersicht über die Beispieltabellen


Tabellenstrukturen der DB Scott

EMP
-------------------------------------------------
EMPNO          NUMBER(4) NOT NULL
ENAME          VARCHAR2(10)
JOB            VARCHAR2(9)
MGR            NUMBER(4)
HIREDATE       DATE
SAL            NUMBER(7,2)
COMM           NUMBER(7,2)
DEPTNO         NUMBER(2)

DEPT
-------------------------------------------------
DEPTNO         NUMBER(2) NOT NULL
DNAME          VARCHAR2(14)
LOC            VARCHAR2(13)

SALGRADE
-------------------------------------------------
GRADE NUMBER
LOSAL NUMBER
HISAL NUMBER


Tabellenstrukturen der DB Nordwind

customers
-------------------------------------------------
CustomerID                 varchar2(5)  NOT NULL
CompanyName                varchar2(40) NOT NULL
ContactName                varchar2(30) NULL
ContactTitle               varchar2(30) NULL
Address                    varchar2(60) NULL
City                       varchar2(15) NULL
Region                     varchar2(15) NULL
PostalCode                 varchar2(10) NULL
Country                    varchar2(15) NULL
Phone                      varchar2(24) NULL
Fax                        varchar2(24) NULL
orders
-------------------------------------------------
OrderID                    int          NOT NULL
CustomerID                 varchar2(5)  NULL
EmployeeID                 int          NULL
OrderDate                  date         NULL
RequiredDate               date         NULL
ShippedDate                date         NULL
ShipVia                    int          NULL
Freight                    number(20,2) NULL
ShipName                   varchar2(40) NULL
ShipAddress                varchar2(60) NULL
ShipCity                   varchar2(15) NULL
ShipRegion                 varchar2(15) NULL
ShipPostalCode             varchar2(10) NULL
ShipCountry                varchar2(15) NULL
order_details
-------------------------------------------------
OrderID                    int          NOT NULL
ProductID                  int          NOT NULL
UnitPrice                  number(20,2) NOT NULL
Quantity                   int          NOT NULL
Discount                   number(20,5) NOT NULL
products
-------------------------------------------------
ProductID                  int          NOT NULL
ProductName                varchar2(40) NOT NULL
SupplierID                 int          NULL
CategoryID                 int          NULL
QuantityPerUnit            varchar2(20) NULL
UnitPrice                  number(20,2) NULL
UnitsInStock               int          NULL
UnitsOnOrder               int          NULL
ReorderLevel               int          NULL
Discontinued               int          NOT NULL
categories
-------------------------------------------------
CategoryID                 int          NOT NULL
CategoryName               varchar2(15) NOT NULL
Description                varchar2(255)
suppliers
-------------------------------------------------
SupplierID                int   NOT NULL
CompanyName               varchar2(40)  NOT NULL
ContactName               varchar2(30)  NULL
ContactTitle              varchar2(30)  NULL
Address                   varchar2(60)  NULL
City                      varchar2(15)  NULL
Region                    varchar2(15)  NULL
PostalCode                varchar2(10)  NULL
Country                   varchar2(15)  NULL
Phone                     varchar2(24)  NULL
Fax                       varchar2(24)  NULL
HomePage                  varchar2(255) NULL
shippers
-------------------------------------------------
ShipperID                 int           NOT NULL
CompanyName               varchar2(40)  NOT NULL
Phone                     varchar2(24)  NULL
employees
-------------------------------------------------
EmployeeID               int            NOT NULL
LastName                 varchar2(20)   NOT NULL
FirstName                varchar2(10)   NOT NULL
Title                    varchar2(30)   NULL
TitleOfCourtesy          varchar2(25)   NULL
BirthDate                date           NULL
HireDate                 date           NULL
Address                  varchar2(60)   NULL
City                     varchar2(15)   NULL
Region                   varchar2(15)   NULL
PostalCode               varchar2(10)   NULL
Country                  varchar2(15)   NULL
HomePhone                varchar2(24)   NULL
Extension                varchar2(4)    NULL
ReportsTo                int            NULL
employeeTerritories
-------------------------------------------------
EmployeeID               int            NOT NULL
TerritoryID              varchar2(20)   NOT NULL
territories
-------------------------------------------------
TerritoryID              varchar2(20)   NOT NULL
TerritoryDescription     varchar2(255)  NOT NULL
RegionID                 int            NOT NULL
region
-------------------------------------------------
RegionID                 int            NOT NULL
RegionDescription        varchar2(50)   NOT NULL
Die Scripte zum Erzeugen dieser Datenbank-Tabellen befinden sich in [3].


SQL Statements

Groß- und Kleinschreibung sind bei den Anweisungen nicht relevant.


Data Retrieval

SELECT


Data Manipulation Language (DML)

INSERT

UPDATE

MERGE

DELETE


Data Definition Language (DDL)

CREATE

DROP

ALTER

RENAME

TRUNCATE


Transaction Control

COMMIT

ROLLBACK

SAVEPOINT


Data Control Language (DCL)

GRANT

REVOKE


Subsections
next Data Retrieval
up Advanced education: Oracle [] Certified Professional Database Administrator
previous Intro
  Contents   Index


Stefan Hietel dama.go GmbH, Robert Warnke http://rowa.giso.de