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.
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.
uname -aDie Version der auf Ihrem System vorhandenen C-Bibliotheken erfährt man über diesen Befehl:
/lib/libc.so.6Auf 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 gccNun wird die Version des Gnu-C Compilers (gcc) ermittelt.
gcc -v -dumpversionAn dieser Stelle kommt jetzt auch das von Suse runtergeladene rpm zum Einsatz. Die Installation des Paketes erfolgen über diesen Befehl:
rpm -Uvh orarun.rpmErledigt wird dabei dieses:
gunzip lnx_920_disk1.cpio.gz lnx_920_disk2.cpio.gz lnx_920_disk3.cpio.gzZusä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.cpioDanach sind im Installationsverzeichnis die Ordner Disk1, Disk2 und Disk3 sichtbar. Ab hier erfolgt jetzz die eigentlichie Installation.
umask 022 unset LANG cd Disk1 ./runInstallerOracle Universal Installer
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
...
dbcaAn 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:
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.
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.
Danach wird der Befehl dbstart ausgeführt.
dbstartEs 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.
dbshutWenn 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 LISTENERAnalog dazu wird er beendet.
lsnrctl stop LISTENERAuch 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 LISTENERBeim Aufruf des Befehls sqlplus kann ich jetzt über die Angabe von Benutzername/Passwort@Dienstname auf die Datenbank zugreifen.
sqlplus .... sqlplus> .....: Benutzername/Passwort@Dienstname
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
Instance-Manager
oemapp instance
Oracle Enterprise Manager - Configuration Assistant (z.B. Repository einrichten)
emca
netca
netca
Port einrichten und starten.
Assoziation
Eine Assoziation bestimmt, wieviel Datensätze einer Tabelle 2 zu einem Datensatz der Tabelle 1 gehören.
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
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 NULLDie Scripte zum Erzeugen dieser Datenbank-Tabellen befinden sich in [3].
SELECT
UPDATE
MERGE
DELETE
DROP
ALTER
RENAME
TRUNCATE
ROLLBACK
SAVEPOINT
REVOKE
Stefan Hietel dama.go GmbH, Robert Warnke http://rowa.giso.de