telnet dublinund dem Login mit Ihrer UNIX-Kennung aus dem Rechenzentrum eröffnen Sie eine Sitzung auf dem Datenbankrechner der FH-Trier.
Sie melden sich bei ORACLE an mit (falls Ihnen kein Passwort explizit zugeteilt wurde):
<UNIX-Prompt> sqlplus /und wenn Sie ein Passwort erhalten haben mit:
<UNIX-Prompt> sqlplus <IHR_NAME>Sie werden dann nach Ihrem Passwort gefragt. Vermeiden Sie die Eingabe in der (auch zulässigen) Form:
<UNIX-Prompt> sqlplus <IHR_NAME>/<IHR_PASSWORT>da dann Ihr Passwort über den UNIX ps Befehl jedem anderen Benutzer zugänglig ist. sqlplus ist der Name des ORACLE-Programms, das Ihnen erlaubt mit Hilfe von SQL- Befehlen eine ORACLE-Datenbank zu bearbeiten.
Sie erhalten dann die Eingabeaufforderung:
SQL>
SQL> exit;ein.
CREATE TABLE <tableName> ( <Liste von Attributen und deren Typen> );Ihre Eingabe kann in einer oder mehrerer Zeilen erfolgen. Wenn sich Ihr Befehl über mehrere Zeilen erstreckt, werden Sie nach Betätigen der Enter-Taste die jeweils nächste Zeilennummer als Eingabeaufforderung erhalten bis Sie den Befehl abschließen mit einem Semikolon.
Achtung: Eine leere Zeile beendet den Befehl, führt ihn aber nicht aus. In diesem Fall kann mit
SQL> r [oder SQL> run] [oder SQL> / ]
der SQL-Befehl zur Ausführung gebracht werden; mit
SQL> l [oder SQL> list]
wird der zuletzt eingegebene SQL-Befehl wieder angezeigt.
Die Anlage einer Beispiel-Tabelle Student erfolgt mit:
create table student ( matrikelnr number(6), name char(20), vorname varchar2(30), datum_der_einschreibung date );Beachten Sie, dass SQL-Befehle case insensitive sind, so bedeutet CREATE TABLE das gleiche wie create table. Dieser Befehl legt eine Tabelle mit Namen student und vier Attributen an. Das erste ist die ganzzahlige matrikelnr, die aus maximal sechs Ziffern besteht. Danach kommt name mit 20 alphanumerischen Zeichen ( werden diesem Feld weniger als 20 Zeichen zugewiesen, wird es mit Blanks rechtsbündig auf zwanzig Stellen aufgefüllt). Der vorname kann maximal 30 Zeichen enthalten; abgespeichert werden aber hier nur die eingegebenen Zeichen. ( varchar2 ist die ORACLE eigene Erweiterung des SQL-Standarddatentyps varchar, die es erlaubt eine Tabellenspalte mit maximal 4000 Zeichen zu definieren; der Datentyp varchar, der im Standard auf maximal 255 Zeichen beschränkt ist, ist in ORACLE auch zulässig.) Das datum_der_einschreibung besitzt den Datentyp date , der nur kalendarisch gültige Datumsangaben zuläßt.
DROP TABLE <tableName> ;Im Beispiel löschen Sie die Tabelle student mit:
DROP TABLE student;
INSERT INTO <tableName>(<Liste der Attribute, in die Werte eingefügt werden sollen>) VALUES( <Liste der Werte für die Attribute in ihrer Reihenfolge> );Zum Beispiel kann das Tupel (123456,'McKinnock','Hugo','01-OCT-97') in die student Tabelle eingefügt werden durch:
INSERT INTO student (matrikelnr,vorname,name,datum_der_einschreibung) VALUES(123456,'Hugo','McKinnock','01-OCT-97' );Character-Werte (und Datumsangaben) müssen in einfache Hochkommata eingeschlossen werden, numerische Werte nicht. Die Werte innerhalb der Hochkommata sind im Unterschied zu den SQL-Befehlen case-sensitiv !
Hinweis: Die Reihenfolge von Name und Vorname wurden (gegenüber dem create der Tabelle) vertauscht; das ist natürlich nur dann sinnvoll, wenn die Reihenfolge der Attributwerte in der Liste hinter VALUES die gleiche ist. Kürzer und bequemer ist die Eingabe, wenn man die Liste hinter dem Tabellennamen fortläßt. Allerdings wird dann die Reihenfolge dieser Liste genommen, wie sie beim create table statement eingegeben wurde; hat aber etwa der Datenbankadministrator beim Zurückspielen einer Datensicherung eine andere Reihenfolge vorgesehen, kann sich beim insert eventuell Datenschrott ansammeln.
INSERT INTO student VALUES(123456,'Hugo','McKinnock','01-OCT-97' );ist zulässig, bewirkt aber das Einfügen einer Person mit Nachnamen 'Hugo' und Vornamen 'McKinnock'. Diese Form der Eingabe sollte man also nur verwenden, wenn ganz sicher ist, dass sich die Reihenfolge nicht verändert hat. ( Eine Verwendung dieser Form in Programmen mit eingebetteten SQL-Befehlen ist also grob fahrlässig. )
SELECT * FROM <tableName> ;Etwa im Beispiel (nach dem create und dem ersten insert) ergibt
SELECT * FROM student;das Resultat:
MATRIKELNR NAME VORNAME DATUM_DER ---------- --------- ------- --------- 123456 McKinnock Hugo 01-OCT-97Anstelle der Wildcard * hinter dem SELECT,mit der alle Attribute angezeigt werden, kann auch eine Liste von Attributen stehen, z.B.:
SELECT Vorname, Name FROM student;ergäbe:
VORNAME NAME ---------- --------- Hugo McKinnock
SELECT TABLE_NAME FROM USER_TABLES;Eine ältere Form dieser Abfrage (die schon vor ORACLE8 zur Verfügung stand) lautet:
SELECT * FROM tab;Allerdings werden hierbei nicht nur die Tabellen angezeigt, sondern auch VIEWS, SYNONYME .. ( für diese Datenbankobjekte gibt es mittlerweile die Relationen USER_VIEWS, USER_SYNONYMS ... ), was an dem Attribut TABTYPE zu erkennen ist.
Den Aufbau einer Tabelle (dh. Namen der Attribute, Datentyp und die Tatsache, ob ein Zwang besteht, Werte in dieses Feld eingeben zu müssen -NOT NULL im Unterschied zu der Default-Einstellung NULL) ermitteln Sie durch:
SQL> DESC <Tabellenname>; [oder SQL> DESCRIBE <Tabellenname>]Im Beispiel bewirkt
SQL> DESC student;die Ausgabe:
NAME NULL? TYPE ----------------------- -------- ------------ matrikelnr number(6) name char(20) vorname varchar2(30) datum_der_einschreibung dateStünde in der Spalte NULL? der Eintrag NOT NULL, so ist das dazugehörende Attribut ein Pflichteingabefeld.
Melden Sie sich wieder mit
<UNIX-Prompt> sqlplus /bzw.
<UNIX-Prompt> sqlplus <IHR_NAME>bei ORACLE an; liegt die auszuführende Datei (mit der Endung .sql) in dem Verzeichnis, aus dem Sie sqlplus gestartet haben, können Sie die darin enthaltenen SQL-Befehle zur Ausführung bringen mit (ansonsten müssen Sie den Pfadnamen dem Datei-Namen voranstellen und mit der abweichenden Endung eingeben):
SQL>start <Datei-Name>Sollen z.B. mehrere Studenten in einem Arbeitsschritt in die Tabelle student eingefügt werden, könnte der file eingabe.sql in Ihrem Home-Directory angelegt werden mit folgendem Inhalt:
INSERT INTO student (matrikelnr,vorname,name,datum_der_einschreibung) VALUES(123456,'Hugo','McKinnock','01-OCT-97'); INSERT INTO student (matrikelnr,vorname,name,datum_der_einschreibung) VALUES(234567,'Lisa','Jansen','01-OCT-97'); INSERT INTO student (matrikelnr,vorname,name,datum_der_einschreibung) VALUES(234567,'Anja','Schmidt','01-OCT-97') /Beachten Sie, dass beim dritten Insert das abschließende Semikolon fehlt und am Beginn der letzten Zeile ein Slash steht.
Mit dem folgenden Befehl werden dann die drei Sätze in die Tabelle Student eingefügt:
SQL>start eingabe
Der Befehl kann vor Ausführung bearbeitet werden mit dem in sqlplus eingebauten (rudimentären) Editor. ( Dafür läuft dieser Editor aber auch auf allen Plattformen identisch!) Die Befehle sind wie SQL-Befehle nicht case-sensitiv.
SQL>define _editor=<editor-Name>
Liegt der Editor nicht in Ihrem Pfad, muss natürlich der komplette Pfad mit angegeben werden. Wollen Sie etwa den vi verwenden, geben Sie ein:
SQL>define _editor='vi'
Wollen Sie nun den zuletzt benutzten SQL-Befehl editieren, geben Sie ein:
SQL>edit
Ihr Editor wird aufgerufen und lädt Ihren SQL-Befehl. Nach Beendigung Ihrer Bearbeitung veranlassen Sie Ihren Editor zu sichern. Nach Verlassen des Editors landen Sie automatisch wieder in sqlplus. Den modifizierten Befehl führen Sie nun aus mit SQL>r[un] oder SQL>/
SQL>spool <dateiname>
Etwa:
SQL>spool liste.lst
Damit wird alles, was in Ihrer sqlplus-Session auf den Bidschirm geschrieben wird (auch Ihre Eingaben) in der ASCII-Datei liste.lst protokolliert. Die Datei wird in dem Verzeichnis abgelegt, aus dem heraus Sie sqlplus aufgerufen haben. Die Protokollierung endet mit:
SQL>spool off
Mit
SQL>host [Betriebssystem-Befehl]
wird der Betriebssystem-Befehl ausgeführt und Sie erhalten den SQL> Prompt zurück.
Mit
SQL>host pwd
erhalten Sie z.B. die Angabe des aktuellen Directories. Lassen Sie den Betriebssystem-Befehl weg, erhalten Sie eine Betriebssystem-Shell, aus der Sie nach Eingabe von exit zum SQL> Prompt zurückkommen.
SQL>set pagesize 40
SQL>set linesize 120
SQL>set numwidth 7
SQL>set pause on
SQL>set pause "weiter mit irgendeiner Taste..."
Damit wird die Seitenlänge auf 40 Zeilen, die Zeilenlänge auf 120 Zeichen, die Breite numerischer Spalten auf 7 Ziffern und eine Pause nach jeder Seite mit der Meldung 'weiter mit irgendeiner Taste...' eingestellt.
SQL>set long 1000
Ist dann notwendig, wenn für eine Spalte mit dem Datentyp LONG mehr als 80 Zeichen (das ist der default) angezeigt werden sollen (z.B. die Definition einer View, die Definition einer check-Bedingung oder der source einer Procedure im Data Dictionary) .
Starten Sie netscape auf Ihrem Rechner mit URL http://dublin.fh-trier.de/doc
(im Directory /usr/oracle_neu/doc/ auf der dublin befindet sich auch der file index.pdf für den acrobat reader acroread, falls Sie Teile der Dokumentation ausdrucken wollen.)
<Unix-Prompt>exp userid=/ (bzw. userid=<IHR_NAME>) [file=<dateiname>]
sichert alle Ihre Datenbankobjekte in die Datei dateiname in dem Verzeichnis, aus dem Sie exp aufgerufen haben. Als Default gilt für den Dateinamen expdat.dmp (dmp steht für dump). Mit
<Unix-Prompt>exp userid=/ (bzw. userid=<IHR_NAME>) file=export.dmp
erstellen Sie die export-Datei export.dmp.
Alle Parameter für das export-Programm erhalten Sie durch:
<Unix-Prompt>exp help=yes
Falls Sie hinter dem Unix-Prompt nur exp eingeben, erhalten Sie eine interaktive export -Session.
Wollen Sie einen kleinen Teil Ihrer Datenbestände mit anderen Werkzeugen weiterbearbeiten ( etwa einem Textverarbeitungs- oder einem anderen Datenhaltungssystem ), können Sie innerhalb von sqlplus den spool-befehl benutzen ( siehe Protokollierung Ihrer Sitzung ).
Mit der Befehlsfolge:
SQL>spool liste.lst
SQL>set heading off
SQL>set pagesize 0
(Damit werden die Spaltenüberschriften und Leerzeilen für Seitenumbrüche vermieden.)
SQL>select * from emp;
SQL>spool off
erzeugen Sie eine Datei liste.lst, in der die gewünschte Information in ASCII-Format hinterlegt wird.
<Unix-Prompt>imp userid=/ (bzw. userid=<IHR_NAME>) full=yes [file=<dateiname>]
Der Default-Dateiname ist wieder expdat.dmp. Mit dem obigen Befehl wird der gesamte Inhalt des exportierten files importiert. Wollen Sie nur einige der exportierten Tabellen importieren, verwenden Sie anstelle von full=yes den Parameter tables=(tabellen-name1,tabellen-name2,...)
Mit
<Unix-Prompt>imp userid=/ (bzw. userid=<IHR_NAME>) tables=(emp,dept) file=export.dmp
werden aus dem export-File export.dmp nur die Tabellen emp und dept importiert.
Alle Parameter des Befehls sehen Sie wieder mit:
<Unix-Prompt>imp help=yes
Wollen Sie vor dem Importieren Parameter für die Tabellen verändern -z.B. die storage-Klauseln abändern-, verwenden Sie den Parameter indexfile=<indexfile-name>.
Mit
<Unix-Prompt>imp userid=/ (bzw. userid=<IHR_NAME>) full=yes indexfile=temp.sql file=export.dmp
erzeugen Sie nur einen ASCII-file -ohne den Import durchzuführen-, in dem alle create table,create index Befehle usw. stehen, wie sie bei den exportierten Tabellen zugrundegelegen haben. Den von Ihnen modifizierten file temp.sql können Sie mit sqlplus gegen die Datenbank schicken (siehe Batch Ausführung von SQL-Befehlen ).
123456,Mayer,Efriede,01-10-1996 234567,Mustermann,Anja,01-10-1997 345678,Schmidt,Hugo,01-10-1995 : :kann man einen control-file erstellen (z.B. mit Namen control.dat). Dieser könnte dann foldenden Inhalt besitzen:
LOAD DATA INFILE 'eingabe.dat' INTO TABLE student FIELDS TERMINATED BY ',' (matrikelnr,name,vorname,datum_der_einschreibung DATE "dd-mm-yyyy")Erläuterungen:
123456, Mayer,Efriede,01-10-1996(mit einem Blank zwischen dem ersten Komma und dem Name Mayer) würde die Person in der Datenbank auch ' Mayer' heißen statt 'Mayer'
Sie rufen den SQL*LOADER wie folgt auf:
<Unix-Prompt>sqlldr userid=/ (bzw. userid=<IHR_NAME>) control=control.dat log=logfile.log
Falls die Eingabedaten an festen Positionen stehen, kann der control-file angepasst werden. Für Details siehe die Dokumentation.
http://www-db.stanford.edu/~ullman/fcdb/spr97/or-load.html