Oracle 5 Database Administration Booklet
Oracle 5 Database Administration Booklet
INDEX
Write-List, 209
Yast, 19
Z
ahler, 65
Informationen, 66
Zahlen
Abschneiden, 45
Runden, 44
Zahlenformate, 41
Zeichenketten
Funktionen, 37
Zeichensatz, 21
Zeitaufwand
Recovery, 98
Zertifizierung, 16
Zugriff
Key-basiert, 125
Zwischenberechnungen, 126
Advanced education:
Oracle [5] Certified Professional
Database Administrator
Stefan Hietel [1], Robert Warnke [2]
8. Januar 2005
INDEX
245
Ubung,
Verschl
usselung, 148
verz
ogert
343
Constrain, 134
VIEW
CREATE, 63
DROP, 64
View
64
Andern,
Categories
Data Dictionary, 111
materialized, 204
Views
Dynamic Performance, 111
Index, 131
Virtual Interface, 150
Vollsicherung
inkonsistent
RMAN, 278
W
ahrung
Symbol
Position, 42
Warehousing
Index, 128
Webbrowser
Datenbank-Konnektivit
at mit, 147
Webserver, 224
Weiterleitungsschicht, 149
Werte
Einschr
anken, 72
fortlaufend, 65
Informationen, 66
WHEN
CASE, 88
MERGE, 89
WHERE, 32
BETWEEN, 33
DELETE, 77
IN, 33
IS NULL, 33
JOIN
Anzahl Spalten, 50
UPDATE, 76
WHILE
PL/SQL
LOOP, 84
Wiederherstellung
simulieren, 192
Unvollst
andige, 179
Windows
Sicherheitsloch, 140
WITH ADMIN OPTION
GRANT, 141
REVOKE, 142
WITH CHECK OPTION
VIEW, 63
WITH GRANT OPTION, 142
WITH READ ONLY
VIEW, 63
Worksheet, 25
340
spdrop.sql, 217
SPFILE, 96, 103
Ubung,
261
Control Files, 113
CREATE, 103
Default Location, 103
erzeugen, 103
in PFILE eingebunden, 261
SPFile, 100
spreport.sql, 217
SQL
Buffergr
oe, 96
Statements, 30
SQL Work Area, 100
SQL-Plus, 25
SQL TRACE, 108, 196
in ASCII umwandeln, 196
sqlnet.ora, 153
HOSTNAME, 154
ONAMES, 156
TNSNAMES, 155
sqlplus, 24
/, 138
SSL, 148, 150
Datenbank-Konnektivit
at mit, 147
Stack
Aufbau, 149
STALE TOLERATED, 205
staleness
Korrektur von Index, 130
Standalone
OEM, 101
Standard Datenbank Architektur Layout, 109
standard.sql, 110
STARTUP, 104
FORCE, 106
MOUNT, 104, 105
NOMOUNT, 104, 105
OPEN, 104, 105
RECOVER, 106
RESTRICT, 106
startup
262
Ubung,
Linux, 19
Stati
Constraint, 133
STATS$SNAPSHOT, 217
StatsPack, 217
Ubung,
315
statspack.snap, 217
STATUS
PENDING, 123
STORAGE
INITIAL, 121
MAXEXTENTS, 121
MINEXTENTS, 121
NEXT, 121
PCTINCREASE, 121
INDEX
Storage
Automatic Segment-Space Management, 121
Beziehnungen, 121
Data Block Management, 121
Manual Management, 122
Parameter, 129
Strukturen, 121
Stored Outline, 203
aktivieren, 203
erstellenn, 203
Index-Scan, 203
Stored Outlines
292
Ubung,
Storing User Data, 125
Struktur
Tabelle, 32
Subselects, 58
ANY, 59
IN, 58
LL, 59
SUBSTR(), 38
SUM(), 55
SUSPEND
ALTERSYSTEM, 106
SWITCH
Redo Log, 115
Switch
Log, 167
SYNONYM
DROP, 64
PUBLIC
CREATE, 64
SYS
Passwort, 23
UNUSED, 126
User, 101
SYS.AUD$, 145
sysdate, 45, 46
SYSDBA, 141
Privileg, 101
SYSOPER, 141
Privileg, 101
SYSTEM
Passwort, 23
User, 101
System
Privilegien, 141
Tablespace, 117
System Global Area, 94, 96
Aufbau, 209
System Monitor, 97
System Undo Segment, 117
Tabelle
Informationen, 126
Struktur, 32
Tabelle verschieben, 125
Tabellen, 125
INHALTSVERZEICHNIS
1.8
1.7.4
Lesekonsistenz . . . . . . . . . . . . . . . . . . . . . . . .
79
1.7.5
Ubungen
07 . . . . . . . . . . . . . . . . . . . . . . . . . .
79
80
1.8.1
CREATE USER . . . . . . . . . . . . . . . . . . . . . . .
80
1.8.2
ALTER USER . . . . . . . . . . . . . . . . . . . . . . . .
80
1.8.3
DROP USER . . . . . . . . . . . . . . . . . . . . . . . . .
80
1.8.4
CREATE ROLE . . . . . . . . . . . . . . . . . . . . . . .
80
1.8.5
GRANT ... TO . . . . . . . . . . . . . . . . . . . . . . . .
80
1.8.6
81
1.8.7
81
Einf
uhrung in die PL/SQL-Programmierung . . . . . . . . . . . .
82
1.9.1
Anonymer Block . . . . . . . . . . . . . . . . . . . . . . .
82
1.9.2
Variablendeklaration . . . . . . . . . . . . . . . . . . . . .
83
1.9.3
83
1.9.4
84
1.9.5
84
1.9.6
85
1.9.7
85
1.9.8
86
1.9.9
Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . .
86
1.9.10 Ubungen
09 . . . . . . . . . . . . . . . . . . . . . . . . . .
87
88
1.10.1 NULLIF() . . . . . . . . . . . . . . . . . . . . . . . . . . .
88
1.10.2 CASE . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
88
1.10.3 COALESCE() . . . . . . . . . . . . . . . . . . . . . . . .
88
1.10.4 JOIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
88
89
1.10.6 DEFAULT . . . . . . . . . . . . . . . . . . . . . . . . . .
90
1.10.7 Ubungen
10 . . . . . . . . . . . . . . . . . . . . . . . . . .
91
1.9
INHALTSVERZEICHNIS
2 Fundamentals
2.1
2.2
2.3
93
Oracle-Server Bestandteile . . . . . . . . . . . . . . . . . . . . . .
94
2.1.1
Instance . . . . . . . . . . . . . . . . . . . . . . . . . . . .
96
2.1.2
Datenbank . . . . . . . . . . . . . . . . . . . . . . . . . .
99
2.1.3
2.1.4
. . . . . . . . . . . . . . . . . . . . . . . 100
2.2.2
Initialisierungsparameter . . . . . . . . . . . . . . . . . . . 102
2.3.2
2.3.3
STARTUP-Optionen . . . . . . . . . . . . . . . . . . . . . 104
2.3.4
2.3.5
2.3.6
SHUTDOWN-Optionen . . . . . . . . . . . . . . . . . . . 107
2.3.7
2.3.8
Uberwachen
der Alert Log File und Trace Files . . . . . . 108
2.3.9
Ubung
PFILE / SPFILE . . . . . . . . . . . . . . . . . . 108
2.3.10 Ubung
Hoch- / Herunterfahren . . . . . . . . . . . . . . . 108
2.4
2.5
2.4.2
2.4.3
Datenbankarten . . . . . . . . . . . . . . . . . . . . . . . . 109
2.4.4
2.4.5
Problembehebung . . . . . . . . . . . . . . . . . . . . . . 110
2.6
2.7
. . . . . . . . . . . 109
2.6.2
Andern
des SPFILE f
ur verschobene CONTROL-Files . . 113
2.6.3
2.6.4
Ubung
Control Files spiegeln . . . . . . . . . . . . . . . . 114
INDEX
WHERE, 32
SELF JOIN, 53
SEQUENCE
CREATE, 65
Informationen, 66
wichtige Optionen, 66
DROP, 66
sequencename.currval, 65
sequencename.nextval, 65
user sequences, 66
sequencename.currval, 65
sequencename.nextval, 65
Server
Basiskonfiguration, 150
Dedicated, 100
Multithreaded, 158
Prozess, 100
Shared, 100, 158
Server Modus
dediziert, 22
Shared, 22
Server Process, 94
PGA, 100
Server-Manager, 25
Service
Dynamic Registration, 157
Service Naming, 23
SERVICE NAMES, 157
Session
Idle, 158
Session Level
Resource Management, 136
Session Memory, 100
SESSIONS PER USER, 136
SET
lsnrctl, 151
MERGE, 89
NEWNAME
FOR DATAFILE, 190
UNUSED, 126
SET ROLE, 143
SGA, 94, 96
Aufbau, 209
Initialisierung, 103
Large Pool, 97
SGA MAX SIZE, 96, 209
SHA, 148
shared memory
max., 19
Shared Pool, 94, 96, 209
Shared Server, 94, 100, 148, 150, 158
Large Pool, 97
Shared Server Modus, 22
SHARED POOL SIZE, 96, 209, 210
SHARED SERVERS, 158
SHMMAX, 19
SHOW
ERRORS, 85
339
RMAN, 184
show
sga, 96
SHUTDOWN, 107
ABORT, 107
IMMEDIATE, 107
NORMAL, 107
TRANSACTIONAL, 107
shutdown
262
Ubung,
Linux, 19
Sicherheit, 148
Problem
Unix, 139
Windows, 140
Sichern
Control Files, 176
Sicherung
inkonsistent
RMAN, 278
inkrementell, 184
Online, 99
Sicht
erzeugen, 63
materialisiert, 204
SID, 2123, 154
Alias, 154
Ermitteln, 102
sid ora PID.trc, 108
sid prozessname pid.trc, 108
Simple Network Architecture, 147
simulieren
Wiederherstellung, 192
Single Network Architecture, 147
skalierbare Applikationen, 125
Skalierbarkeit, 148
skripten
Control Files, 177
SMON, 94, 97
Instance Recovery, 105, 107
SHUTDOWN ABORT, 107
Snapshot, 204
SORT
Temporary Tablespace, 118
Sort-Merge, 200
Sortierung, 36
Datum, 36
NULL, 36
SP2-0611, 279
SP2-0613, 279
Spalte
UNUSED, 126
Spalten
Berechnungen, 31
Spaltenindex
ORDER BY, 36
Spawn, 150
spcreate.sql, 217
336
PL/SQL, 82
Ubung,
253
Buffergr
oe, 96
Plan
Resource, 206
Plan-Tabelle
erstellen, 196
Platzhalter, 34
PLZ, 42
PMON, 94, 97, 150, 157, 158
Pointer, 196
Policy
Retention, 193
POOL, 158
Pool, 209
Large, 97
Pool, 97
Pooling
Connection, 158
Prim
arschl
ussel, 69
Primary Block Size, 96
Primary Key, 69
Erstellen, 69
L
oschen, 69
NULL, 69
PRINT
SCRIPT, 189
Priorit
atsregeln
Boolsche Logik, 35
Vergleichsoperatoren, 35
Private SQL Area, 100
PRIVATE SGA, 136
Priveleg
einer Rolle zuweisen, 143
Privileg
andere User weitergeben, 141
ANY, 141
Informationen, 142
Objekt, 141
RESTRICTED SESSION, 106
System, 141
WITH ADMIN OPTION, 141
Privilegien, 101, 141
Backup, 101
Instanz herunterfahren, 101
Instanz starten, 101
Mount, 101
Recovery, 101
SYSDBA, 101
SYSOPER, 101
Unmount, 101
Problembehebung, 110
PROCEDURE
CREATE, 85
products.jar, 20
Produkt
kartesisches, 47
PROFILE
INDEX
INHALTSVERZEICHNIS
User, 137
Profile, 135
Defaul, 135
Program Global Area, 94
Server Process, 100
PROMPT
ACCEPT, 76
Protocol
Network, 149
Protocol Support, 149
Protokoll
Schnittstelle, 150
Proxy
Kit, 148
Prozeduren
extern, 148
Prozess
Server, 100
User, 100
ps, 24
PUBLIC
GRANT, 141
SYNONYM, 64
RAC, 98
Radius, 148
RDBMS, 149
Client, 149
Read
Consistency, 214
READ ONLY
ALTER DATABASE
OPEN, 106
Read Only
Tablespace, 119
READ WRITE
ALTER DATABASE
OPEN, 106
Real Application Cluster, 98
Real Application Clusters, 94
REBUILD
Index, 130
Rechte
Entziehe, 81
Hinzuf
ugen, 80, 81
. . . . . . . . . . . . . . . . . . . . . . . . . 150
2.22 Namensaufl
osung unter Oracle . . . . . . . . . . . . . . . . . . . 153
2.22.1 sqlnet.ora . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
2.22.2 Net Configuration Assistant . . . . . . . . . . . . . . . . . 153
2.22.3 Host Naming . . . . . . . . . . . . . . . . . . . . . . . . . 154
2.22.4 Local Naming . . . . . . . . . . . . . . . . . . . . . . . . . 155
2.22.5 Oracle Name Server . . . . . . . . . . . . . . . . . . . . . 156
2.22.6 Directory Naming . . . . . . . . . . . . . . . . . . . . . . 157
2.22.7 Externe Benennung . . . . . . . . . . . . . . . . . . . . . 157
2.22.8 Dynamic Service Registration . . . . . . . . . . . . . . . . 157
2.22.9 Ubung
Namensaufl
osung . . . . . . . . . . . . . . . . . . . 157
2.23 Shared Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
10
INHALTSVERZEICHNIS
2.24.12 Ubung
Cold Backup im Noarchive-Log-Modus . . . . . . 183
2.24.13 Ubung
Cold Backup im Archive-Log-Modus . . . . . . . . 183
2.24.14 Ubung
Control File skripten / wiederherstellen . . . . . . 183
2.25 Recovery Manager (RMAN) . . . . . . . . . . . . . . . . . . . . . 184
2.25.1 CONFIGURE / REPORT / LIST / SHOW . . . . . . . . 184
2.25.2 Sicherung mit Control-Datei . . . . . . . . . . . . . . . . . 185
2.25.3 Sicherung mit Recovery-Catalog . . . . . . . . . . . . . . 188
2.25.4 Umbenennen einer Datei bei der Wiederherstellung . . . . 190
2.25.5 Parallelisieren von Kan
alen . . . . . . . . . . . . . . . . . 190
2.25.6 Automatische Kanalzuweisung . . . . . . . . . . . . . . . 192
2.25.7 Trial Recovery . . . . . . . . . . . . . . . . . . . . . . . . 192
2.25.8 FAST START MTTR TARGET . . . . . . . . . . . . . . 192
2.25.9 Block Media Recovery . . . . . . . . . . . . . . . . . . . . 193
2.25.10 Retention Policy . . . . . . . . . . . . . . . . . . . . . . . 193
2.25.11 Ubung
Vollsicherung mit RMAN . . . . . . . . . . . . . . 193
INDEX
anzeigen, 196
Initialisierung, 102
OMF, 110
Parameter Files, 94, 100
Parameterfiles, 103
Reihenfolge, 104
PARSED, 196
Parsing
335
Reihenfolge, 197
Partitioned Table, 125
Partitioniert
Index, 127
Password, 135
Alterung, 135
L
ange, 135
Verwaltung, 135
Password File, 94, 100
PASSWORT
EXPIRE, 137
Passwort
andern, 80
ohne, 139
SYS, 23
SYSTEM, 23
PATH, 109
PCTFREE
manual konfigurierbar, 122
PCTINCREASE
STORAGE, 121
PCTUSED
automatisch verwaltet, 121
manual konfigurierbar, 122
PENDING
STATUS, 123
pending area(), 207
Performance
sinkt, 125
Verluste
automatische Vergr
oerung Datendatei,
119
Persistent Area, 100
PFILE, 96, 103
261
Ubung,
Control Files, 113
CREATE, 103
Default Location, 103
erzeugen, 103
starten mit, 104
PFile, 100
PGA, 94
Fehlerhafte Prozesse, 97
Server Process, 100
PHP, 224
Datenbankanbindung
mySQL, 225
Oracle, 224
ora error(), 224
ora exec(), 224
ora fetch into(), 224
ora logon(), 224
ora open(), 224
ora parse(), 224
phpinfo(), 224
Physical Reads, 210
physische Datenspeicherung, 117
PID, 108
332
startup, 19
LIST
BACKUP, 189
EXPIRED, 190
RMAN, 184
List
LRU, 209
Write, 209
Listener, 23, 150, 158
Default-Name, 150
Oracle Net Foundation Layer, 149
listener.ora, 150, 151, 154, 155
Literal, 31, 32, 38
Load Balancing, 150
LOB-Datentyp
Index, 127
Local Managed
Tablespace, 129
Local Naming, 155
271
Ubung,
Locally Managed Tablespace, 117
LOCK
ACCOUNT, 137
Lock
Freigeben, 97
LOCKED
User-Stati, 136
Locks
DML, 126
Log
Audit, 145
Switch, 167
Log Switch, 98
Log Writer, 98
Log-Files
Archive, 99
log archive dest 1, 166
log archive format, 166
LOG ARCHIVE START, 116
log archive start, 166
LOG BUFFER, 97
LOG BUFFERS, 210
LOG CHECKPOINT INTERVAL, 192
LOG CHECKPOINT TIMEOUT, 192
LOG MODE, 116
LOGFILE
REUSE, 265
LOGICAL READS PER CALL, 136
LOGICAL READS PER SESSION, 136
Logik
Boolsche, 34
logische Datenspeicherung, 117
Logische Operatoren, 34
Priorit
atsregeln, 35
Logische Struktur
Datenbank, 99
LOOP
FOR, 85
INDEX
PL/SQL, 84
WHILE, 84
LOWER(), 37
LPAD(), 41
LRU
Database Buffer Cache, 96
Library Cache, 96
LRU-List, 209
LSN, 163
lsnrctl, 24
help, 151
SET, 151
start, 151
stop, 151
LTRIM(), 40
LU6.2 IBM, 150
MAINTENANCE, 193
Management
Tools, 20
Undo, 123
Manager
Connection, 148
Recovery, 184
Manual Management, 122
MATCHED
MERGE, 89
Materialisierte Sicht, 204
Materialized
View, 204
Materialized View
299
Ubung,
Mathematical
Funktionen, 44
MAX(), 55
MAX ENABLED ROLES, 143
MAX SHARED SERVERS, 158
MAXEXTENTS
erh
ohen, 129
STORAGE, 121
Maxextents, 215
MD5, 148
Media Recovery, 106
Mengen
INTERSECT, 54
MINUS, 54
Operation, 54
UNION, 54
UNION ALL, 55
MERGE, 89
Meta-Daten
OEM, 101
Methode
Join, 200
Middle-Tier, 147
MIN(), 55
MINEXTENTS
STORAGE, 121
INHALTSVERZEICHNIS
3.9
13
StatsPack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
3.9.1
Installation . . . . . . . . . . . . . . . . . . . . . . . . . . 217
3.9.2
3.9.3
3.9.4
3.9.5
Ubung
StatsPack . . . . . . . . . . . . . . . . . . . . . . . 217
3.10.4 Ubung
Index-Cluster . . . . . . . . . . . . . . . . . . . . . 221
4 Backend / Frontend
4.1
4.2
4.3
223
PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
4.1.1
4.1.2
Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
4.2.1
4.2.2
JDBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Forms Kurzeinf
uhrung . . . . . . . . . . . . . . . . . . . . . . . 232
4.3.1
Vorbereitung . . . . . . . . . . . . . . . . . . . . . . . . . 232
4.3.2
4.3.3
4.3.4
Master-/Detail-Formular . . . . . . . . . . . . . . . . . . . 234
4.3.5
Andern
der Aktivierungsreihenfolge . . . . . . . . . . . . 234
4.3.6
Master-/Detail-Formular f
ur Inner-Join . . . . . . . . . . 234
4.3.7
14
INHALTSVERZEICHNIS
INDEX
A Appendix
237
. . . . . . . . . . . . . . . . . . . . . . . . . . . 253
. . . . . . . . . . . . . . . . . . . . . . . 257
Java, 226
Laufzeit Umgebung, 19
Pool, 97
Java Pool, 94, 209
Java-Applet
Datenbank-Konnektivit
at mit, 147
JAVA POOL SIZE, 96, 97, 210
JDBC, 149, 228
JDK
Home Directory, 21
JInitiator, 232
JOIN, 47, 88
+, 50
Ubung,
241
Arten, 47
CROSS, 52, 88
EQUIJOIN, 47
FULL OUTER, 89
INNER, 89
IS NULL, 52
Kreuzprodukt, 52
LEFT OUTER, 89
Methoden, 47
NATURAL, 88
255
Ubung,
Non-Equijoin, 50
NOT NULL, 52
NULL, 50
OUTER, 50
RIGHT OUTER, 89
SELF, 53
USING, 89
WHERE
Anzahl Spalten, 50
Join
Methoden, 200
jre, 19
Kan
alen
Parallelisieren, 190
Kanal
RMAN, 185
331
Kanalzuweisung
Automatisch, 192
Kardinalit
at
gering, 128
hoch, 127
Katalog
Recovery
RMAN, 188
Keep Buffer Cache, 96
Kerberos, 148
Kernel
Parameter, 19
Key
Foreign, 69
Primary, 69
Zugriff, 125
KILL SESSION
ALTERSYSTEM, 106
Kommentare, 31
Konfiguration
Client, 156
Dedicated Server, 100
Dienste, 150
Server, 154
Kostenbasiert
Optimierer, 200
Kreuzprodukt, 47
JOIN, 52
L
oschen
Benutzer, 80
kaskadierend, 71
LAMP, 224
LANG, 20
Large Pool, 94, 97, 209
LARGE POOL SIZE, 96, 97, 210
Last Recentliy Used, 96
Latches, 209
LD LIBRARY PATH, 109
LDAP, 148, 157
LEAF, 199
LEFT OUTER JOIN, 89
Legato Storage Manager, 184
LENGTH(), 39
Lesekonsistenz, 123
Level
Backup, 184
LF ROWS LEN, 199
LGWR, 94, 98
DBWR, 98
Trace Files, 108
libc.so, 19
Library Cache, 94, 96
LIKE, 34
Ubung,
239
Platzhalter, 34
Linux, 224
shutdown, 19
328
DROP
CLUSTER, 220
CONSTRAINT
UNIQUE, 73
INDEX, 67
Index, 131
ROLE, 144
SEQUENCE, 66
Spalte, 126
SYNONYM, 64
TABLE, 61, 98
TABLESPACE, 120
Undo Tablespace, 124
USER, 80
User, 140
VIEW, 64
DSS
Index, 128
Dynamic Performance Views, 111, 112
Dynamic Service Registration, 157
Einf
uge
DEFAULT, 90
Einloggen
ohne Passwort, 139
EJB
Datenbank-Konnektivit
at mit, 147
ELSE
CASE, 88
PL/SQL
IF, 83
ENABLE
CONSTRAINT, 74
Constraint, 133
ENABLE RESTRICTED SESSION
ALTERSYSTEM, 106
END
BACKUP, 170
CASE, 88
LOOP
FOR, 85
PL/SQL
IF, 83
LOOP, 84
PROCEDURE, 85
Enterprise Edition, 20
Enterprise JavaBeans
Datenbank-Konnektivit
at mit, 147
Entziehe
Rechte, 81
EQUIJOIN, 47
mehr als zwei Tabellen, 49
ERRORS
SHOW, 85
Erstellen
Benutzer, 80
Cursor, 86
PROCEDURE, 85
INDEX
erstellen
Data Files, 177
ESCAPE
Zeichen, 34
Exam 1Z0-*, 16
Examen, 16
EXCEPTION
PROCEDURE, 85
Exception
PL/SQL, 82
Exceptions-Tabelle, 133
EXECUTE, 197
EXIT-Kriterium
LOOP, 84
EXPIRED
LIST, 190
User-Stati, 136
explain
autotrace, 196
Extents, 99
EXTERNALLY
CREATE ROLE, 143
User
Authentifizierung, 137
Externe Prozeduren, 148
Kapitel 1
Einfu
hrung in PL / SQL
Oracle 8i/9i
FAST
REFRESH, 204
FAST START IO TARGET, 192
FAST START MTTR TARGET, 192
Fehlerbehebung, 110
Fehlermeldung
Beschreibungen, 25
Integrit
at, 69
Werte, 71
FETCH, 197
File
Archive Log, 99
Files
.ora, 103
Alert Log, 108
Archive Redo Log, 100
Audit-Log, 145
Background Trace, 108
Control, 98, 99, 113
Data, 99, 117
Database, 94, 99
Namen nach festen Regeln, 110
Other Key, 100
Parameter, 100, 103
Password, 100
Redo Log, 99, 115
Trace, 105, 108
User Trace, 108
Firewall, 148
FIRST ROWS
Optimierung, 200
FOR
17
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
18
1.0.1
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
at sich kostenlos nach Registrierung von [7] herunterladen. Die Datenbank besteht aus drei Paketen, die hier
nach einer Anmeldung runtergeladen werden k
onnen. Folgende Pakete m
ussen
vorliegen:
lnx 920 disk1.cpio.gz (553,239,173 bytes)
lnx 920 disk2.cpio.gz (588,798,999 bytes)
lnx 920 disk3.cpio.gz (442,087,410 bytes)
Auerdem sollte von [11] das Paket orarun.rpm runtergeladen werden, das
sp
ater noch ben
otigt wird, um die Kernelparameter zu konfigurieren.
INDEX
Datumsformate, 42
DB Block Gets, 211
DB BLOCK LRU LATCHES, 209
DB BLOCK SIZE, 96
db block size, 171
DB CACHE ADVICE, 212
DB CACHE SIZE, 96, 209, 210
DB CREATE FILE DEST, 110
DB CREATE ONLINE DEST n, 110
DB KEEP CACHE SIZE, 96, 209, 210
DB NAME, 105
DB nk CACHE SIZE, 210
DB RECYCLE CACHE SIZE, 96, 210
DBA
Rolle, 101
dba, 18
DBA-Studio, 25
DBA *, 111
DBA CONSTRAINTS, 111
DBA FREE SPACE, 111
DBA IND COLOUMNS, 131
DBA INDEXES, 111, 131
DBA OBJECTS, 111
DBA SEGMENTS, 111
DBA TAB PRIVS, 111
DBA TABLES, 111
DBA TABLESPACES, 117
DBA TS QUOTAS, 140
DBA USERS, 111, 140
DBA TRAIL, 145
dbca, 22
dbms output.put line, 83
dbms resource manager, 207
dbshut, 24
dbstart, 24
dbv, 160
dbverify, 160
DBWR, 94
LGWR, 98
Trace Files, 108
DBWRn, 98
DCL, 30
DDL, 60
Deaktivierung
CONSTRAINT, 74
DECLARE
PL/SQL, 86
DECODE(), 44
Dedicated Server, 100
Konfiguration, 100
Dedizierter Server Modus, 22
DEFAULT, 90
CREATE, 90
CREATE USER, 80
INSERT, 90
TABLESPACE, 80
Default
Listener-Name, 150
327
Profile, 135
Rolel, 143
DEFERRED
BUILD, 204
deferred
Constrain, 134
Deklaration
%rowtype, 83
%type, 83
PL/SQL, 82
DEL LF ROWS, 131
DEL LF ROWS LEN, 199
DELETE, 77
Berechtigung, 81
GRANT, 81
OBSOLETE, 193
ON
COMMIT, 126
ROLLBACK, 77
DES, 148
DESC, 36
DESCRIBE, 32
Developer Suite 10
Forms, 232
Dezimalstellen
Abschneiden, 45
Runden, 44
DICTIONARY, 111
Dictionary Managed Tablespace, 118
Dienste
Heterogene, 148
Konfiguration, 150
Registrierung, 150
Directory Naming, 157
Directory Service, 148
Dirty Buffer, 98
DISABLE
Constraint, 133
DISABLE RESTRICTED SESSION
ALTERSYSTEM, 106
DISENABLE
CONSTRAINT, 74
Dispatcher, 100
Neustart, 97
User Prozesse, 158
DISTINCT, 32
INTERSECT, 54
kein bei UNION ALL, 55
MINUS, 54
UNION, 54
DML, 30, 75
Locks, 126
DNS, 154
Domain
Index, 127
Name, 22
Download
Oracle, 18
324
Optional, 99
BACKGROUND DUMP DEST, 108
BACKUP
BEGIN, 170
COLD, 160
Control Files, 176
TO TRACE, 177, 277
CROSSCHECK, 190
DATABASE
RMAN, 186
END, 170
LIST, 189
Backup, 160
Cold
273
Ubung,
Hot, 170
inkonsistent
RMAN, 278
inkrementell, 184
Large Pool, 97
OFFLINE
ARCHIVELOG, 166
NOARCHIVELOG, 160
ONLINE, 170
Online, 99
Privileg, 101
Base Tables, 112
BATCH USERS, 206
Bedingung, 32
Before Image, 170
Before Images, 214
Before-Image, 123
Before-Images, 118
BEGIN
BACKUP, 170
PROCEDURE, 85
BEGIN BACKUP
ALTER TABLESPACE, 98
Benutzer
Erstellen, 80
L
oschen, 80
Bequeath, 150
Berechnungen
Datum, 45
Spalten, 31
Berechtigungen
Objekt, 81
unzureichend, 269
Berechtigungspr
ufung, 148
Betriebssystem
Authentifikation, 138
Block, 171
BETWEEN, 33
Beziehungen, 26
Bind
Variable, 197
Bitmap
Index, 128
INDEX
Block, 99
anonym, 82
Betriebssystem, 171
Oracle, 171
PL/SQL, 82
Standardgr
oe, 96, 99
Block Media Recovery, 193
Boolsche
Logik, 34
Boolsche Logik
Priorit
atsregeln, 35
Buffer
Dirty, 98
Redo Log, 97
Buffer Cache, 209
Buffer-Cache
306
Ubung,
BUFFER CACHE, 96
BUILD
DEFERRED, 204
IMMEDIATE, 204
BY
CREATE USER, 80
BY password
CREATE ROLE, 143
BY passwort
User
Authentifizierung, 137
C
Bibliotheken, 19
Compiler, 19
Cache
Advice, 212
Data Dictionary, 96
Database Buffer, 96
Hint, 212
Keep Buffer, 96
Library, 96
Recycle, 96
Cache Hit Ratio
Messen, 210
Cache Miss Ratio, 210
Call Level
Resource Management, 136
Cancel
Recovery, 179
Cartesian Product, 52
CASCADE
DROP USER, 140
Foreign Key
l
oschen, 71
CASE, 88
CATALOG
RESYNC, 190
Catalog
Recovery
RMAN, 188
21
22
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
dbca
An dieser Stelle kann einfach auf weiter geklickt werden.
Es werden unterschiedliche Optionen f
ur die Verwaltung von vorhandenen Datenbanken angeboten. Da bisher noch keine Datenbank vorhanden ist, sind die
Optionen Konfigurieren und L
oschen ausgeblendet. Da eine Datenbank erstellt werden soll, w
ahlen wir Datenbank erstellen.
Dies ist ein wichtiger Schritt, denn ab Oracle 9i wird die M
oglichkeit geboten Vorlagen zu erstellen, wie eine Datenbank beschaffen sein soll. Wir w
ahlen
hier die erste Option, da diese Vorlage zur allgemeinen Verwendung gedacht
ist. Auerdem werden bei Auswahl dieser Option auch schon alle Datendateien
erstellt.
Beim Klick auf Details geht eine neues Fenster auf. Dieses Fenster enh
alt eine
Auflistung aller Parameter f
ur die Datenbankvorlage und kann bei Bedarf als
html gespeichert werden.
Hier mu der Name f
ur die Datenbank angegeben werden. Oracle h
angt an diesen Namen sp
ater den Domainnamen ran, so das dieser Datenbankname sp
ater
meinname.meinedomain lautet. Auerdem wird hier der Name f
ur die Datenbankinstanz angegeben.
WICHTIG: Uber
diesen Namen, die sogenannte SID kann die Datenbank sp
ater
referenziert werden. Das heit, der Zugriff auf die Datenbank, z.B. von einem
anderen Rechner aus, ist sp
ater u
oglich.
ber diese SID m
Auswahl, in welchem Modus auf die Datenbank zugegriffen werden soll. Hier
gibt es zwei M
oglichkeiten:
Der Zugriff auf die Datenbank erfolgt u
ber den dedizierten Server Modus.
Das heit, f
ur 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 u
ber den sogenannten Shared Server
Modus. (siehe Seite 158). 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
achsten User weitergegeben. Das hat den groen Vorteil, dass nicht immer
wieder neue Verbindungen zur Datenbank aufgebaut und wieder freigegeben
werden m
ussen. Option 1 wurde in diesem Fall von uns gew
ahlt, da sie f
ur eine
Testinstallation v
ollig ausreicht.
An dieser Stelle werden die Initialisierungsparameter f
ur die Datenbank angegeben. Dazu geh
oren die Speicherverwaltung, die Zeichens
atze, die verwandt
werden sollen, die DB-Skalierung (d.h. der maximale Speicherplatz, der f
ur Sortiervorg
ange genutzt werden kann, wobei h
ohere Werte die Effizienz von umfangreichen Sortiervorg
angen erh
ohen), die Dateispeicherorte und die Aktivierung des Archivelogmodus. Dieser Modus speichert Redo-Log Dateien, bevor
INDEX
ALTER DATABASE
ADD LOGFILE GROUP
REUSE, 265
ALTER SESSION
SET SQL TRACE, 108
ALTER TABLESPACE
BEGIN BACKUP, 98
ANALYZE
INDEX, 199, 201
Index, 131
TABLE, 201
Berechtigung, 205
GRANT, 205
AND, 34
Anonym
Block, 82
ANY
Privileg, 141
Unterabfragen, 59
Anzeige
Ausf
uhrungsplan, 196
Index Informationen, 131
Index Statistiken, 131
Informationen zu Rollen, 144
Informationen zu Tabellen, 126
offene Transaktionen, 124
Parameter, 196
Privileg-Informationen, 142
Redo Log Groups, 115
Table
Tablespace, 125
Tablespace
autoextensible, 119
Tablespaces, 117
Undo Tablespace
Status, 123
UNUSED Spalten, 126
User-Informationen, 140
User-Stati, 136
Anzeigen
Script, 189
Apache, 224
Application
Client, 149
Applikationen
skalierbar, 125
Applikationsspezifisch
Index, 127
Architecture
Optimal Flexible, 109
Architektur
Oracle Net, 149
Archive Log-Files, 99
Archive Redo Logs, 116
ARCHIVELO
Backup
OFFLINE, 166
ARCHIVELOG, 99, 116
323
Recovery
OFFLINE, 169
Archiver, 99
Archives Redo Log Files, 100
Archives Redo Logfiles, 94
Archivierer
Optionen
anern, 105
ARCn, 94, 99
arithmetisch
Funktionen, 44
AS, 31
ASC, 36
ASCII(), 41
Assistant
Net Configuration, 153
Assoziation
einfache, 26
konditionelle, 26
multiple, 26
multiple-konditionelle, 26
AUD$, 146
AUDIT
aktivieren, 145
deaktivieren, 146
Auditing, 145
Ausdruck, 32
Ausf
uhrungsplan, 196
gespeichert, 203
Authentifikation
extern, 138
Authentifizierung
User, 137
AUTID FILE DEST, 145
AUTID TRAIL
DB, 145
FALSE, 145
OS, 145
AUTOBACKUP
CONTROLFILE, 187
autoextensible
Tablespace, 119
Automatic Segement-Space Management, 121
Automatic Segment Management, 123
Automatisch
Kanalzuweisung, 192
automatisches COMMIT, 78
AUTOTRACE
ON, 205
autotrace, 196
AVG(), 56
B-Tree
Index, 127
Background
Process Structures, 94
Background Process Structures, 97
Background Trace File, 108
Background-Prozesse
320
ANHANG A. APPENDIX
25
1.0.2
Oracle-Tools
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
26
1.0.3
Datenbank-Design
Der Normalisierungsprozess
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
oglichkeit der einzelnen Datens
atze. Es d
urfen keine Dateninhaltswiederholungen vorkommen.
3. Normalform
Die dritte Normalform basiert auf der zweiten Normalform und stellt eine weitere Verfeinerung dar. Es d
urfen innerhalb einer Tabelle die Feldwerte nur vom
Identifikationsschl
ussel abh
angig sein und untereinander keine Abh
angigkeiten
haben.
Beziehungen
In der Regel besteht eine relationale Datenbank nicht nur aus einer Tabelle,
sondern aus mehreren. Die einzelnel Tabellen d
urfen nicht isoliert betrachtet
werden. Zwischen Tabellen k
onnen Beziehungen bestehen. Die Anzahl der m
oglichen Beziehungen ist begrenzt und ergibt sich aus der Kombination der m
oglichen Assioziationstypen.
Assoziation
Eine Assoziation bestimmt, wieviel Datens
atze einer Tabelle 2 zu einem Datensatz der Tabelle 1 geh
oren.
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
atze ( >= 0)
Datensatzanzahl in Tabelle 2 beliebig viele Datens
319
316
ANHANG A. APPENDIX
select lastname,firstname,birthdate
from employees
where birthdate in
(select min(birthdate) from employees)
;
Welche Produkte liefern deutsche Lieferanten?
select distinct pro.productname
from
suppliers sup, products pro
where
sup.supplierid = pro.supplierid
and country = Germany
;
5. Erstellen Sie den ersten Snapshot.
sqlplus perfstat/pinguin@testdb29
execute statspack.snap
6. F
uhren Sie die Abfragen aus.
s.o.
7. Erstellen Sie den zweiten Snapshot
sqlplus perfstat/pinguin@testdb29
execute statspack.snap
8. Erstellen Sie den Bericht
29
EmployeeID
LastName
FirstName
Title
TitleOfCourtesy
BirthDate
HireDate
Address
City
Region
PostalCode
Country
HomePhone
Extension
ReportsTo
int
varchar2(20)
varchar2(10)
varchar2(30)
varchar2(25)
date
date
varchar2(60)
varchar2(15)
varchar2(15)
varchar2(10)
varchar2(15)
varchar2(24)
varchar2(4)
int
NOT NULL
NOT NULL
NOT NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
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
SNAP_TIM
-------05.03.04
05.03.04
start /oracle/ora92/rdbms/admin/spreport.sql
...
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Geben Sie einen Wert f
ur begin_snap ein: 1
Begin Snapshot Id specified: 1
Geben Sie einen Wert f
ur end_snap ein: 2
...
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is sp_1_2. To use this name,
press <return> to continue, otherwise enter an alternative.
Geben Sie einen Wert f
ur report_name ein: /tmp/sp_report_1_2
9. Schauen Sie sich den Bericht im Betriebssystem an.
less /tmp/sp_report_1_2
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
30
1.0.5
SQL Statements
-- Session 2:
select productname, unitprice from sys.products where productid = 75;
select productname, unitprice from sys.products where productid = 75
*
FEHLER in Zeile 1:
ORA-01555: Snapshot zu alt: Rollback-Segmentnummer 24 namens "RBS04" ist zu klein.
SELECT
A.3.11
StatsPack
DELETE
start ~/1ZO-033/Northwind-Skript/alles.txt
Data Definition Language (DDL)
3. F
uhren Sie alle notwendigen Schritte aus, um StatsPack zu installieren.
CREATE
DROP
ALTER
RENAME
TRUNCATE
Transaction Control
start /oracle/ora92/rdbms/admin/spcreate.sql
...
Geben Sie einen Wert f
ur perfstat_password ein: pinguin
...
Geben Sie einen Wert f
ur default_tablespace ein: USERS
...
Geben Sie einen Wert f
ur temporary_tablespace ein: TEMP
...
NOTE:
SPCPKG complete. Please check spcpkg.lis for any errors.
COMMIT
ROLLBACK
SAVEPOINT
Data Control Language (DCL)
GRANT
REVOKE
315
312
ANHANG A. APPENDIX
) q
where p.supplierid = q.supplierid
and q.Preis = p.unitprice
;
Ausf
uhrungsplan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=82 Bytes=4674)
1 0
TABLE ACCESS (FULL) OF MV_MIN_PREISE (Cost=2 Card=82 Bytes=4674)
In der Unix-Shell:
cd /oracle/admin/testdb29/udump/
tkprof testdb29_ora_1792.trc pinguin.trc
Ermittelt werden alle Mitarbeiter (ename), bei denen der Job nicht Manager
ist.
A.3.10
Im folgenden werden Sie das Undo-Management von Oracle etwas genauer kennenlernen.
1. Stellen Sie das Undo-Management auf Manuell um.
select * from v$tablespace;
...
1 UNDOTBS1 YES
...
IS NULL
Mit IS NULL kann man Datenfelder auf den Wert NULL abtesten.
Mit ... = NULLw
are dies nicht m
oglich, da hier auf das Vorkommen der
Zeichenkette NULL getestet wird.
select empno, ename from emp where comm is null;
Ermittelt werden alle Mitarbeiter (ename) und deren Mitarbeiternummer (empno), bei denen die Spalte comm den Wert NULL besitzt.
IN
BETWEEN
undots02;
undots02;
undots02;
undots02;
undots02;
Ubungen
01
Ubungen
siehe Seite 238.
33
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
34
1.1.5
Wenn Sie in der Unix-Shell nicht genau wissen, wonach Sie suchen wollen, benutzen Sie in der Regel Platzhalter. Als Platzhalter f
ur ein Zeichen benutzen
Sie dabei das Fragezeichen ? und als Platzhalter f
ur eine beliebige Zeichenkette
benutzen Sie den Stern *. In Oracle-SQL verh
alt sich dies ein wenig anders. Als
ur
Platzhalter f
ur ein Zeichen gilt hier der Unterstrich und als Platzhalter f
eine beliebige Zeichenkette dient das Prozentzeichen %.
select * from emp where ename like F%
Ermittelt werden alle Datens
atze der Tabelle emp, bei denen der Name mit F
beginnt.
select * from emp where ename like F_rd
Ermittelt werden alle Datens
atze der Tabelle emp, bei denen der Name mit F
beginnt und an dritter und vierter Stelle rd steht.
select * from emp where ename like %g
Ermittelt werden alle Datens
atze der Tabelle emp, bei denen der Name mit g
endet.
311
connect scott/tiger@testdb29;
start ~/1ZO-033/Northwind-Skript/suppliers.txt
start ~/1ZO-033/Northwind-Skript/products.txt
set timing on;
alter session
alter session
analyze table
analyze table
set query_rewrite_enabled=true;
set query_rewrite_integrity=enforced;
products compute statistics;
suppliers compute statistics;
ESCAPE
Durch ESCAPE kann man nach
Ubungen
02
Ubungen
siehe Seite 238.
1.1.6
SQL ist eine mengenorientierte Abfragesprache. Daher baut diese Sprache auch
auf Boolsche Logik auf. Der Ausdruck im WHERE-Kriterium kann logische
Operatoren, wie AND, OR und NOT beinhalten. Beachten sollten Sie, dass der
Ausdruck hinter WHERE wahr ergeben muss, um den Datensatz zur
uckgeben
zu k
onnen. Bei AND m
ussen beide Ausdr
ucke wahr sein, um als Ergebnis wahr
zur
uckzuliefern. Bei OR muss lediglich ein Ausdruck wahr sein, um als Ergebnis
wahr zur
uckzuliefern. NOT negiert das Ergebnis, das heit, aus wahr wird falsch
und aus falsch wird wahr.
select * from emp where sal > 1000 and sal < 3000;
Ermittelt werden alle Datens
atze der Tabelle emp, bei denen das Gehalt gr
oer
als 1000 und kleiner als 3000 ist.
308
ANHANG A. APPENDIX
select name,
100-round((physical_reads/(db_block_gets+consistent_gets))*100,2)
as Hit_Ratio
from v$buffer_pool_statistics
;
FEHLER in Zeile 1:
ORA-01476: Divisor ist Null
1.2
Eine Ubersicht
befindet sich in [14].
1.2.1
H
aufig ist es notwendig, die Spalten der Ergebnismenge gem
a einer Vorgabe zu
gestalten. Hierf
ur stellt SQL eine Reihe von Funktionen zur Verf
ugung. Beachten Sie bitte, dass sich diese Funktionen nur auf die Anzeige auswirken, nicht
jedoch auf die eigentlichen gespeicherten Daten. Diese werden in keiner Weise
ver
andert.
Zeichenkettenfunktionen k
onnen nicht nur zwischen SELECT und FROM benutzt werden, sondern auch im WHERE-Ausdruck. Im folgenden sehen wir uns
drei Zeichenkettenfunktionen bezugnehmend auf Gro- und Kleinschreibung an.
7. L
oschen Sie die Tabelle Abteilung.
drop table abteilung;
LOWER()
8. F
uhren Sie die gleichen Tests f
ur den Recycle-Pool durch. Halten Sie auch
hier Ihre Ergebnisse schriftlich fest:
UPPER()
Es wird durch die Funktion UPPER eine Zeichenkette in Grobuchstaben umgewandelt.
37
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
38
INITCAP()
INITCAP gibt den ersten Buchstaben gro, alle weiteren klein geschrieben
zur
uck.
select initcap(ename) as Nachname from emp;
NACHNAME
-------Smith
Allen
Ward
...
Diese Abfrage gibt als Ergebnismenge die Nachnamen (ename) der Mitarbeiter
zur
uck. Der erste Buchstabe wird gro geschrieben und alle weiteren werden
klein geschrieben.
Zusammenfassung
LOWER() wandelt die Anzeige der Spalte / des Ausdruckes x in Kleinbuchstaben um.
UPPER() wandelt die Anzeige der Spalte / des Ausdruckes x in Grobuchstaben um.
INITCAP() wandelt das erste Zeichen der Anzeige der Spalte / des Ausdruckes x in Grobuchstaben um alles andere bleibt klein.
Neben den im vorigen Kapitel besprochenen Zeichenkettenfunktionen gibt es
noch eine groe Anzahl weiterer Funktionen. Hier soll nur ein Auszug der wichtigsten Funktionen dargestellt werden.
CONCAT()
select concat(ename,job) as Nachname from emp;
NACHNAME
-------------SMITHCLERK
ALLENSALESMAN
WARDSALESMAN
...
Es werden die Spalten Nachname (ename) und Job verkn
upft. Dies entspricht
dem Verkn
upfungsoperator ||, wobei concat() aber nur 2 Argumente verarbeiten kann.
SUBSTR()
select ename as Nachname, substr(ename,1,3) from emp;
NACHNAME
SUB
----------------SMITH
SMI
ALLEN
ALL
WARD
WAR
...
307
304
Ressourcen Gruppen
OLTP GROUP
BATCH GROUP
ADHOC GROUP
OTHER GROUP
ANHANG A. APPENDIX
Level 1
20%
0%
0%
0%
Level 2
0%
80%
20%
0%
Level 3
0%
0%
0%
100%
User erstellen
create user OLTP_1 identified by OLTP_1;
create user Batch_1 identified by Batch_1;
create user Adhoc_1 identified by Adhoc_1;
41
LPAD()
select lpad(Tech,10,*) from dual;
Es werden bis zur Gesamtl
ange von 10 Zeichen mit * links aufgef
ullt.
REPLACE()
replace(s1,s2[,s3])
Suche s2 in s1 und ersetze ihn durch s3. Ist s3 nicht angegeben, wird s2 in s1
entfernt.
select replace(SCHADE, D, LK) from dual;
SCHALKE.
Resources
exec dbms_resource_manager.create_plan_directive
(plan => NIGHT_PLAN, group_or_subplan => OLTP_Group,
cpu_p1 => 20, parallel_degree_limit_p1 => 0, comment=>)
;
exec dbms_resource_manager.create_plan_directive
(plan => NIGHT_PLAN, group_or_subplan => BATCH_Group,
cpu_p2 => 80, parallel_degree_limit_p1 => 10, comment=>)
;
exec dbms_resource_manager.create_plan_directive
(plan => NIGHT_PLAN, group_or_subplan => ADHOC_Group,
cpu_p2 => 20, parallel_degree_limit_p1 => 5, comment=>)
;
exec dbms_resource_manager.create_plan_directive
(plan => NIGHT_PLAN, group_or_subplan => OTHER_GROUPS,
cpu_p3 => 100, parallel_degree_limit_p1 => 0, comment=>)
;
Submit
exec dbms_resource_manager.submit_pending_area();
exec dbms_resource_manager.create_pending_area();
CHR()
select chr(65) from dual;
A
ASCII()
select ascii(A) from dual;
65
1.2.2
Conversion Functions
Wichtige Zahlenformate
Format
999999
099999
Beschreibung
5 Stellen
Auff
ullen mit Nullen
H
aufige Zahlenformate
Beispiel
1234
001234
42
9
0
D
G
L
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
Stellvertreter f
ur eine Ziffer (keine f
uhrenden Nullen)
Stellvertreter f
ur eine Ziffer (F
uhrende Nullen)
Dezimaltrennzeichen
Tausenedertrennzeichen
Position des W
ahrungssymbols, NLS CURRENCY
Wichtige Datumsformate
zweistelliger Tageswert
DD
ausgeschriebener Tag
DAY
zweistelliger Monatswert
MM
ausgeschriebener Monat
Month
YY
zweistelliger Jahreswert
vierstelliger Jahreswert
YYYY
Beispiele f
ur Datumsformate:
DD.MM.YYYY 11.02.2003
Day, derDD.MM.YYYY Dienstag, der 11.02.2003
Day, derDD Month YYYY Dienstag, der 11 Februar 2003
TO CHAR()
3. Schreiben Sie eine Abfrage basierend auf der Tabelle lehrer, welche die Anzahl
der Datens
atze ermittelt und beobachten Sie, ob die Materialized View benutzt
wird.
select count(*) from lehrer;
COUNT(*)
---------5
Abgelaufen: 00:00:00.00
Ausf
uhrungsplan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE
1 0
SORT (AGGREGATE)
2 1
TABLE ACCESS (FULL) OF LEHRER
Die Materialized Views wurde nicht verwendet, da der CBO nicht aktiv ist (kein
ANALYZE).
4. F
ugen Sie einen Datensatz zur Tabelle lehrer hinzu.
Es wird das Gehalt der Angestellten in eine Zeichenkette konvertiert und mit
5 Stellen angegeben. Falls das Gehalt nicht 5 Stellen betr
agt, so wird es mit
f
uhrenden Nullen aufgef
ullt. Dies ist zum Beispiel bei der PLZ in Deutschland
sinnvoll.
Es wird das Gehalt der Angestellten in eine Zeichenkette konvertiert und mit 5
Stellen vor dem Komma (mit Tausender-Trennzeichnen) und zwei Stellen nach
dem Dezimalzeichen ausgegeben.
A.3.7
Ressourcen-Manager
Teil 1
Erstellen Sie folgenden Ressource-Manager-Plan per Anweisung. Aktivieren Sie
ihn anschlieend. Erstellen Sie auch folgende Benutzer und ordnen Sie diese den
entsprechenden Gruppen zu.
OLTP Group: OLTP 1
BATCH Group: Batch 1
ADHOC Group: Adhoc 1
303
300
ANHANG A. APPENDIX
7. F
uhren Sie folgende Befehle aus.
TRUNC()
1.2.5
Abgelaufen: 00:00:00.00
Datumsberechnungen
Datumswerte werden in Oracle intern als numerische Werte interpretiert. Hierbei entspricht eine ganze Zahl einem vollen Tag. Die Zahl 0,5 w
urde als 12
Stunden interpretiert werden, die Zahl 0,75 w
urde als 18 Stunden interpretiert
werden. Bei Berechnungen mit Datumswerten gelten folgende Eigenschaften:
Es wurde die Materialized View verwendet. Dies ist eine sehr optimale Methode.
11. F
uhren Sie folgende Anweisung aus:
alter session set query_rewrite_enabled=false;
Date Functions
45
46
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
MONTHS BETWEEN()
A.3.6
Materialized Views
2. Melden Sie sich als scott mit dem Kennwort tiger an der Datenbank an.
connect scott/tiger@testdb29;
ADD MONTHS()
3. Erstellen Sie eine Tabelle namens bigtab, die auf den Spalten und Datens
atzen
der Tabelle all objects basiert.
Ubungen
06
Ubungen
siehe Seite 248.
299
296
ANHANG A. APPENDIX
PRODUCTNAME
---------------------------------------Chai
Chang
Chartreuse verte
Chef Antons Cajun Seasoning
Chef Antons Gumbo Mix
Chocolade
6 Zeilen ausgew
ahlt.
Abgelaufen: 00:00:00.01
Ausf
uhrungsplan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE (Cost=139 Card=77 Bytes=1309)
1 0
SORT (UNIQUE) (Cost=139 Card=77 Bytes=1309)
2 1
BITMAP INDEX (FAST FULL SCAN) OF ID3
4. Optimierung: Wie teuer ist das Produkt namen Chai. Sie wissen nicht, ob
dieses Produkt gro oder klein geschrieben ist. Optimieren Sie dieses Statement
so weit es geht. Hier geht es um Geschwindigkeit um jeden Preis.
create index id34 on products(productname);
analyze index id34 validate structure;
select distinct productname,unitprice from products
where lower(productname) = chai
;
PRODUCTNAME
UNITPRICE
--------------------------------Chai
18
Abgelaufen: 00:00:03.09
Ausf
uhrungsplan
--------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE
1 0
SORT (UNIQUE)
2 1
TABLE ACCESS (FULL) OF PRODUCTS
select /*+ index(id34)*/ distinct productname,unitprice from products
where lower(productname) = chai;
PRODUCTNAME
UNITPRICE
--------------------------------Chai
18
Abgelaufen: 00:00:03.08
Ausf
uhrungsplan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE (Cost=1082 Card=8625 Bytes=301875)
1 0
SORT (UNIQUE) (Cost=1082 Card=8625 Bytes=301875)
2 1
TABLE ACCESS (FULL) OF PRODUCTS (Cost=1017 Card=8625 Bytes=301875)
Nun wird in der Tabelle dept nach der deptno 30 gesucht. Wird in der Tabelle
der Datensatz mit der deptno 30 gefunden, so werden diese beiden Datens
atze
in der Ergebnismenge verbunden.
Tabelle emp
Tabelle dept
Empno ename ... deptno deptno dname loc
7369 Smith ... 20 20 research dallas
7499 Allan ... 30 30 sales Chicago
Dieser Prozess durchl
auft alle Datens
atze der Tabelle emp. Wichtig hierbei ist,
dass nur Datens
atze, die tats
achlich in Beziehung stehen, in der Ergebnismenge
auftauchen. In unserem Beispiel f
uhrt das dazu, dass die Abteilung mit der
Nummer 40 in der Ergebnismenge gar nicht auftaucht, da es hierf
ur keinen
Mitarbeiter gibt. Eine leere Abteilung sozusagen.
EQUIJOIN u
ber mehr als zwei Tabellen
Nehmen wir einmal an, es g
abe eine weitere Tabelle, welche die Dienstwagentypen in Abh
angigkeit der Position bzw. des Jobs darstellt.
Als Ergebnis wollen Sie den Namen des Mitarbeiters und der Abteilung, in der er
arbeitet und zus
atzlich noch den Dienstwagentyp ermitteln. Die Daten der Ergebnismenge erstrecken sich demnach u
ber die drei Tabellen Mitarbeiter (emp),
Abteilung (dept) und Dienstwagen (official car). Die beiden Tabellen Mitarbeiter (emp) und Abteilung (dept) sind u
ber die jeweilige Abteilungsnummer
(deptno), die in beiden Tabellen steht, verbunden. Die beiden Tabellen Mitarbeiter (emp) und Dienstwagen (official car) sind u
ber den Job auf Seiten der
Tabelle Mitarbeiter (emp) und u
ber Position auf Seiten der Tabelle official car.
Wir haben folglich zwei WHERE-Kriterien, die beide gelten m
ussen. Infolgedessen werden diese beiden WHERE-Kriterien durch ein AND verbunden. Die
Anweisung k
onnte folgendermaen aussehen.
select d.dname,e.ename,e.job,oc.typ
from official_car oc,emp e, dept d
where oc.position=e.job and e.deptno=d.deptno
;
DNAME
ENAME
JOB
TYP
---------- ---------- ---------- -------------------RESEARCH
JONES
MANAGER
BMW 7er
ACCOUNTING CLARK
MANAGER
BMW 7er
SALES
BLAKE
MANAGER
BMW 7er
ACCOUNTING KING
PRESIDENT
Mercedes SL
SALES
ALLEN
SALESMAN
BMW 3er
SALES
MARTIN
SALESMAN
BMW 3er
SALES
TURNER
SALESMAN
BMW 3er
SALES
WARD
SALESMAN
BMW 3er
49
50
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
Abgelaufen: 00:00:02.07
Vereinfacht kann man sagen, dass in der Regel eine Abfrage, die auf Daten von X
verschiedenen Tabellen zugreift, X-1 verschiedene WHERE-Kriterien vonn
oten
sind. Zu beachten ist auch hier, dass die Jobs, denen keine Dienstwagen zustehen
(Clerk etc.), auch nicht in der Ergebnismenge auftauchen.
Ausf
uhrungsplan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE
1 0
SORT (AGGREGATE)
2 1
TABLE ACCESS (FULL) OF PRODUCTS
Hinweis:
Bei der Anzahl der WHERE-Kriterien ist nicht entscheidend, wie viel Spalten
ausgegeben werden. Nehmen wir uns das obere Beispiel. Angenommen, sie wollen lediglich wissen, welche Dienstwagen in welchen Abteilungen zur Verf
ugung
stehen, nicht jedoch die Mitarbeiter. Auch in diesem Fall ist ein Join u
ber alle
drei Tabellen notwendig, um die richtige Ergebnismenge zu erhalten. Zwischen
der Tabelle Abteilung und Dienstwagen allein gibt es kein zutreffendes WHEREKriterium. Somit w
urde auch in diesem Falle die Abfrage so aussehen:
-- Fall 2
select /*+first_rows*/ count(*)
from scott.products where discontinued = 1
;
COUNT(*)
---------131072
Abgelaufen: 00:00:00.00
select d.dname,oc.typ
from official_car oc,emp e, dept d
where oc.position = e.job and e.deptno = d.deptno
;
Der lieben Ordnung wegen w
are hier noch, um Duplikate bei der Ausgabe auszuschlieen, ein DISTINCT das Mittel der Wahl:
select DISTINCT d.dname,oc.typ
from official_car oc,emp e, dept d
where oc.position = e.job and e.deptno = d.deptno
;
DNAME
TYP
------------------------ACCOUNTING BMW 7er
ACCOUNTING Mercedes SL
RESEARCH
BMW 7er
SALES
BMW 3er
SALES
BMW 7er
Non-Equijoins
Wenn keine Spalte einer Tabelle mit einer Spalte einer anderen Tabelle direkt
korrespondiert, dann ist nur ein Non-Equijoin m
oglich.
OUTER JOIN
Ausf
uhrungsplan
--------------------------------------------------------0
SELECT STATEMENT Optimizer=HINT: FIRST_ROWS (Cost=3 Card=1 Bytes=2)
1 0
SORT (AGGREGATE)
2 1
BITMAP CONVERSION (COUNT)
3 2
BITMAP INDEX (SINGLE VALUE) OF INX_DISC
3. Optimierung: Welche Produkte fangen mit CH (Klein- oder Groschreibung
egal) an?
create bitmap index id3 on products(productname);
analyze table products compute statistics for columns productname size 80;
select distinct productname from products
where lower(productname) like ch%;
PRODUCTNAME
---------------------------------------Chai
Chang
Chartreuse verte
Chef Antons Cajun Seasoning
Chef Antons Gumbo Mix
Chocolade
6 Zeilen ausgew
ahlt.
Abgelaufen: 00:00:09.05
Ausf
uhrungsplan
--------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE
1 0
SORT (UNIQUE)
2 1
TABLE ACCESS (FULL) OF PRODUCTS
select /*+ index(id3) */distinct productname
from products where lower(productname) like ch%
;
295
292
A.3.4
ANHANG A. APPENDIX
Stored Outlines
SELF JOIN
Unter einem SELF JOIN versteht man eine Verbindung einer Tabelle mit sich
selbst. Dieser Join ist wohl der am schwersten zu verstehende JOIN, da eine
Tabelle mit sich selbst verkn
upft ist.
Um diesen SELF JOIN verst
andlich zu machen, benutzen wir das Beispiel der
Tabelle Mitarbeiter (emp). In der Tabelle Mitarbeiter (emp) hat jeder Mitarbeiter eine Mitarbeiternummer empno und daneben noch die Mitarbeiternummer
des Vorgesetzten (mgr).
Schauen wir uns hierf
ur die Tabelle etwas genauer an. Herr Smith hat die Mitarbeiternummer(empno) 7369. Sein Vorgesetzter ist der Herr mit der Mitarbeiternummer 7902 (entspricht der Spalte MGR), also der Herr Ford. Herr ALLAN
hat die Mitarbeiternummer(empno) 7499. Sein Vorgesetzter ist der Herr mit der
Mitarbeiternummer 7698 (entspricht der Spalte MGR), also der Herr Blake. Auf
diese Weise wird die gesamte Hierarchie der Firma abgebildet. Soll nun in einer
Abfrage ermittelt werden, welcher Mitarbeiter welchen Vorgesetzten (jeweils
den Namen) hat, so ist die eine Verbindung der Spalten Mitarbeiternummer
(empno) und der Spalte Manager (mgr) ein und derselben Tabelle:
select mitarbeiter.ename as "Mitarbeiter",
vorgesetzter.ename as "Vorgesetzter"
from
emp mitarbeiter,
emp vorgesetzter
where mitarbeiter.mgr = vorgesetzter.empno
;
Mitarbeiter Vorgesetzt
----------------------SMITH
FORD
ALLEN
BLAKE
WARD
BLAKE
JONES
KING
MARTIN
BLAKE
BLAKE
KING
CLARK
KING
SCOTT
JONES
TURNER
BLAKE
ADAMS
SCOTT
JAMES
BLAKE
FORD
JONES
MILLER
CLARK
Die Ergebnismenge w
urde folgendermaen aussehen: Das einzige Manko ist,
dass der Chef des Ganzen nat
urlich keine MGR hat und demnach auch nicht
angezeigt wird. Aber auch hier kann man sich leicht helfen. Wir nutzen einfach
das Konzept der Outer Joins.
SELECT mitarbeiter.ename AS "Mitarbeiter",
vorgesetzter.ename AS "Vorgesetzter"
FROM emp Mitarbeiter, emp vorgesetzter
WHERE mitarbeiter.mgr = vorgesetzter.empno(+)
;
Mitarbeiter Vorgesetzter
---------- ---------SMITH
FORD
53
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
54
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
BLAKE
BLAKE
KING
BLAKE
KING
KING
JONES
BLAKE
SCOTT
BLAKE
JONES
CLARK
Hierdurch wird erreicht, dass alle Mitarbeiter angezeigt werden, egal, ob diese
auch einen Manager (Vorgesetzten) haben. Die Ergebnismenge w
urde nunmehr
folgendermaen ausschauen:
1.3.2
Mengenoperationen
MINUS
Von der ersten Menge wird die zweite Menge abgezogen. MINUS verwendet
DISTINCT.
select field1, field2, ... field_n from tables
MINUS
select field1, field2, ... field_n from tables;
select p.productname,c.categoryname
from products p, categories c
where p.categoryid=c.categoryid
;
Ausf
uhrungsplan
-----------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE
1 0
MERGE JOIN
2 1
SORT (JOIN)
3 2
TABLE ACCESS (FULL) OF CATEGORIES
4 1
SORT (JOIN)
5 4
TABLE ACCESS (FULL) OF PRODUCTS
20. Erstellen Sie einen Index auf der Spalte categoryid der Tabelle products.
F
uhren Sie nun die Abfrage nochmals aus. Um welchen Join handelte es sich
hierbei und warum?
UNION
Ergibt die Gesamtmenge beider Mengen. UNION verwendet DISTINCT.
select field1, field2, ... field_n from tables
UNION
select field1, field2, ... field_n from tables;
291
288
A.3.3
ANHANG A. APPENDIX
Optimierer
HAVING Einschr
ankungen nach Gruppenfunktionen
H
aufig sollen nicht alle Gruppen ausgegeben werden. Wenn Sie nach Gruppenfunktionen einschr
anken wollen, so ben
otigen Sie die Anweisung HAVING.
1. Erstellen Sie die Tabelle order details neu aus dem Script zur Nordwind-DB.
3. F
ugen Sie zur Tabelle order details eine Spalte namens paketgroesse varchar(10) hinzu.
Auch hier wird das Durchschnittsgehalt je Abteilung ermittelt. Jedoch nur die
Durchschnittsgeh
alter, die u
ber 2000 liegen, werden ausgegeben.
start ~/1ZO-033/Northwind-Skript/order_details.txt
2. Schalten Sie Autotrace ein.
5. Geben Sie f
ur 1/3 der Datens
atze den Wert mittel in die Spalte Paketgroesse.
update order_details set paketgroesse=mittel where paketgroesse=2;
6. Geben Sie f
ur 1/3 der Datens
atze den Wert gross in die Spalte Paketgroesse.
update order_details set paketgroesse=gross where paketgroesse=0;
commit;
select paketgroesse,count(*) from order_details group by paketgroesse;
PAKETGROES
COUNT(*)
---------- ---------gross
718
klein
719
mittel
718
oe klein ist.
7. Ermitteln Sie die Datens
atze aus order details, deren Paketgr
Wird ein Index-Scan oder ein Full-Table-Scan durchgef
uhrt? Begr
unden Sie Ihre
Antwort.
select * from order_details where paketgroesse=klein;
Durch die Funktion NVL(comm,0) werden NULL-Werte in der Spalte comm als
0 interpretiert. Demnach wird nun (300+500+1400+0+0+0+0+0+0+0+0+0+0+0)
/ 14 gerechnet.
1.3.5
Ubungen
03
Ubungen
siehe Seite 239.
57
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
58
1.3.6
Unterabfragen
H
aufig wollen Sie nicht das geringste Gehalt als Ergebnismenge, sondern den
oder die Mitarbeiter, die das geringste Gehalt erhalten. Hierf
ur leistet eine Unterabfrage gute Dienste.
select ename from emp where sal =
(
select min(sal) from emp
)
;
In der in Klammern eingeschlossenen Unterabfrage wird zuerst das geringste
Gehalt ermittelt (z.B. 800). Nun wird f
ur die Unterabfrage der ermittelte Wert
eingesetzt. Somit lautet die Abfrage:
Zusatzaufgabe 2:
L
oschen Sie den Bitmap-Index auf Done und erstellen Sie anstelle dessen einen
normalen Index. F
uhren Sie die entsprechenden Messungen erneut durch. Benutzen auch eventuell Hints.
Zusatzaufgabe 3:
Erstellen Sie eine groe Tabelle (ca. 3 bis 4 Mio Datens
atze) und erstellen Sie
287
284
ANHANG A. APPENDIX
1.4.2
DROP TABLE
1.4.3
TRUNCATE
MAX(ORDERID)
-----------11077
Abgelaufen: 00:00:00.00
Alle Datens
atze der Tabelle Mitarbeiter (emp) werden gel
oscht.
61
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
62
1.4.4
ALTER TABLE
Sicher kommt es vor, dass eine Abfrage so lange dauert, dass es sinnvoller w
are,
diese Session abzubrechen. Hierf
ur k
onnen Sie folgendes machen: Melden Sie
sich als Scott an und f
uhren Sie eine lange Abfrage aus (z. B. Cross Join u
ber
order details)
Machen Sie eine weitere Session auf:
F
uhren Sie folgende Abfrage aus, um den Benutzer herauszufinden, dessen Session beendet werden soll select username,sid,serial from v$session;
USERNAME
SID
SERIAL#
------------------------------ ---------- ---------1
1
2
1
...
SYS
9
34
SCOTT
12
242
Beenden Sie die Session folgendermassen (SID, SERIAL):
Es wird zur Tabelle emp eine neue Spalte namens birthdate und dem Datentyp
date hinzugef
ugt.
A.3.2
DESC emp;
Name
Null?
Typ
-----------------------------------EMPNO
NOT NULL NUMBER(4)
ENAME
VARCHAR2(10)
JOB
VARCHAR2(9)
MGR
NUMBER(4)
HIREDATE
DATE
SAL
NUMBER(7,2)
COMM
NUMBER(7,2)
DEPTNO
NUMBER(2)
Indizes
WICHTIG: Legen Sie sich ein Cold-Backup Ihrer Datenbank an, um im Fehlerfall die Datenbank schnell wiederherstellen und weiterarbeiten zu k
onnen.
Bitte f
uhren Sie folgende Schritte als Vorbereitung f
ur die Ubung
durch.
283
280
ANHANG A. APPENDIX
8. Nun wollen wir uns auch jeweils die Zeit anzeigen lassen, die eine Abfrage
ben
otigte. F
uhren Sie hierf
ur folgende Anweisung aus:
set timing on;
9. F
uhren Sie eine Abfrage aus, welche alle Datens
atze und alle Attribute (Spalten) der Tabelle employees zur
uckgibt. Wie lange dauerte die Abfrage?
select * from employees;
Abgelaufen: 00:00:00.01
Ausf
uhrungsplan
--------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE
1 0
TABLE ACCESS (FULL) OF EMPLOYEES
1.4.10
CREATE SEQUENCE
Es wird eine Sequence namens s1 erzeugt. Der Startwert dieser Sequence ist
1 (start with 1) und der Maximalwert betr
agt 5 (maxvalue=5). Erh
oht wird
jeweils um 1 (increment by 1). Wird der Maximalwert erreicht, so wird nicht
von vorn begonnen (nocycle).
10. Erzeugen Sie eine Tabelle namens empl cop, welche genau die Spalten und
die Datens
atze der Employees enth
alt. Wie lautet die Anweisung hierf
ur?
create table empl_cop as select * from employees;
11. Verdoppeln Sie die Anzahl der Datens
atze in dieser Tabelle empl cop insgesamt 16 mal. Wie viel Datens
atze haben Sie nunmehr?
-- 16 mal:
insert into empl_cop select * from empl_cop;
commit;
select count(*) from empl_cop;
COUNT(*)
---------589824
12. WICHTIG: Alles weitere bezieht sich jeweils immer auf die empl cop!
Schreiben Sie eine Abfrage, welche alle Employees und daneben die Anzahl der
Datens
atze der Employees ausgibt. Wie lautet die Abfrage und wie lange dauert
diese? Uberlegen
Sie, warum diese Abfrage so aufwendig ist. Wir werden sp
ater
eine
ahnliche Abfrage so optimieren, dass die Ausf
uhrung unter 1/10 Sekunde
dauert.
Beispielergebnismenge
LASTNAME
COUNT(*)
-------------------- ---------Buchanan
65536
Callahan
65536
Davolio
65536
Dodsworth
65536
Fuller
65536
King
65536
Leverling
65536
Peacock
65536
Suyama
65536
65
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
66
A.3
A.3.1
Tuning Ubungen
und L
osungen
Tools f
ur die Leistungs
uberwachung
Informationen u
ber Sequences mit Hilfe des Data Dictionary
select sequence_name,min_value,max_value,increment_by,last_number
from user_sequences
;
SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY LAST_NUMBER
---------------------------------------------------------S1
1
5
1
6
Mit dieser Sicht des Data Dictionary werden die Optionen der Sequences ermitachste verf
ugbare Sequencewert.
telt. last number ist der n
L
oschen einer Sequence
drop sequence Sequencename ;
1.4.11
INDEX
279
276
ANHANG A. APPENDIX
shutdown immediate;
host;
rm /oracle/oradata/testdb29/users01.dbf
exit
startup;
...
Datenbank mit Mount angeschlossen.
ORA-01157: Datendatei 3 kann nicht identifiziert/gesperrt werden
Siehe DBWR-Trace-Datei.
ORA-01110: Datendatei 3: /oracle/oradata/testdb29/users01.dbf
Wiederherstellung der Datenbank testdb29
Versuchen Sie die Datei users01.dbf wiederherzustellen.
shutdown immediate;
host;
cp /backup/users01.dbf /oracle/oradata/testdb29
exit
startup;
...
Datenbank mit Mount angeschlossen.
ORA-01113: F
ur Datei 3 ist eine Datentr
ager-Recovery notwendig
ORA-01110: Datendatei 3: /oracle/oradata/testdb29/users01.dbf
Als n
achstes versuchen Sie nun, die seit der letzten Sicherung durchgef
uhrten
Transaktionen aus den Online-Redo-Log-Dateien wiederherzustellen. Es kann
sein, dass bei Ihnen die Datei users01.dbf nicht die Dateindatei 3 ist.
recover datafile 3;
1.5. CONSTRAINTS
1.5
Constraints
1.5.1
Primary Key
1.5.2
Foreign Key
Der Foreign Key Constraint ist ein Constraint unter SQL, dessen Aufgabe darin
besteht, die referentielle Integrit
at von zwei Tabellen sicherzustellen.
ALTER TABLE tabellenname
ADD CONSTRAINT constraintname
FOREIGN KEY (spalte1, spalte2 ...)
REFERENCES tabellenname(spalte1, spalte2 ...)
;
Nehmen wir hierf
ur das Beispiel der beiden Tabellen Mitarbeiter (emp) und
Abteilung (dept). Die beiden Tabellen stehen in einer 1:n Beziehung zueinander.
Eine Abteilung besteht aus mehreren Mitarbeitern bzw. kann aus mehreren
Mitarbeitern bestehen. Ein Mitarbeiter wiederum ist in genau einer Abteilung.
Die Verbindung der beiden Tabellen wird u
ber die in beiden Tabellen vorkommende Spalte Abteilungsnummer (deptno) hergestellt. Ein Mitarbeiter, der in
einer Abteilung arbeitet, die es gar nicht gibt, macht keinen Sinn. Daher d
urfen
in der Tabelle Mitarbeiter nur Abteilungsnummern stehen, die auch in der Tabelle Abteilung auftauchen.
Weiterhin k
onnen nur Abteilungen gel
oscht werden, in denen keine Mitarbeiter mehr arbeiten. W
are dies n
amlich m
oglich, h
atten wir wieder das Problem,
dass es Mitarbeiter gibt, die in Abteilungen arbeiten, die es gar nicht mehr gibt.
69
70
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
A.2.10
In dieser Ubung
wollen wir das Szenario der vorherigen Ubung
durchspielen.
Die Datenbank wird aber in den Archive-Log-Modus versetzt.
select log_mode from v$database;
LOG_MODE
-----------NOARCHIVELOG
1 Zeile wurde ausgew
ahlt.
shutdown immediate;
sqlplus /nolog
connect sys/sys as sysdba
startup mount;
alter database archivelog;
Manuell:
Ubergeordn. Schl
ussel nicht gefunden
shutdown immediate;
host;
cp /oracle/oradata/testdb29/* /backup
exit
startup;
Dienstag 08:00 bis 15:59 Arbeitslast
Im folgenden werden Sie die Arbeitslast vom Dienstag simulieren. Legen Sie
hierf
ur eine Tabelle an, f
ugen dort f
unf Datens
atze ein und f
uhren drei LogSwitches aus.
create table unterricht (fachnummer number, fachname varchar2(20));
insert into unterricht values(1,Deutsch);
insert into unterricht values(2,Deutsch);
insert into unterricht values(3,Englisch);
insert into unterricht values(4,Mathe);
insert into unterricht values(5,Zeichnen);
commit;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
Dienstag 16:00 Verlust der Datei users01.dbf
Simulieren Sie den Verlust der Datendatei users01.dbf.
275
272
ANHANG A. APPENDIX
1. Offnen
Sie die Datei sqlnet.ora. Andern
Sie dort die folgende Zeile:
names.directory path = (HOSTNAME)
Speichern Sie die Datei sqlnet.ora.
2. Versuchen Sie sich an der Datenbank testdb29 anzumelden. Was passiert?
ORA-12154 TNS: Der Servicename konnte nicht aufgelost werden.
3. Offnen
Sie die Datei listener.ora. Andern
Sie die Datei folgendermassen:
1.5. CONSTRAINTS
Durch die INSERT-Anweisung wird versucht, in die Tabelle Abteilung eine Abteilungsnamen hinzuzuf
ugen, den es bereits gibt. Dies wird durch den UNIQUEConstraint verhindert.
update dept set dname=RESEARCH where deptno=10;
ORA-00001:
Versto gegen Eindeutigkeit, Regel (SCOTT.U1)
Durch die UPDATE-Anweisung wird versucht, in die Tabelle Abteilung einen
Abteilungsnamen auf einen anderen Abteilungsnamen zu
andern, den es bereits
gibt. Dies wird durch den Unique-Constraint verhindert.
...
(SID_DESC=
(GLOBAL_DBNAME=pinguin)
(ORACLE_HOME=/opt/oracle/product/9ir2)
(SID_NAME=testdb29)
)
...
L
oschen
1.5.5
NOT NULL
Durch den NOT NULL Constraint wird verhindert, dass in den entsprechenden
Spalten NULL-Werte enthalten sein d
urfen. Nur m
oglich, wenn keine bestehenden Daten gegen NOT NULL verstossen.
ALTER TABLE tabellenname MODIFY spalte NOT NULL;
7. Offnen
Sie die Datei sqlnet.ora. Brinden Sie dort die folgende Zeile wieder auf den alten Zustand:
names.directory path = (TNSNAMES, ONAMES, HOSTNAME)
Speichern Sie die Datei sqlnet.ora.
1.5.6
73
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
74
1.5.7
CONSTRAINT Aktivierung
1.5.8
CONSTRAINT Deaktivierung
1.5.9
Ubungen
08
Ubungen
siehe Seite 251.
A.2.8
Namensaufl
osung
1. Offnen
Sie die Datei sqlnet.ora.
Wie ist die Reihenfolge der Namensaufl
osung?
TNSNAMES, ONAMES, HOSTNAME
2. Nennen Sie die Datei tnsnames.ora in tnsnames.old um. Versuchen Sie
sich an dern Datenbank testdb29 anzumelden. Was passiert und warum?
ORA-12154 TNS: Der Servicename konnte nicht aufgelost werden.
3. Nennen Sie die Datei tnsnames.old wieder in tnsnames.ora um. Was
passiert und warum?
Der Connect wird durchgef
uhrt.
4. Offnen
Sie die Datei sqlnet.ora. Andern
Sie dort die folgende Zeile:
names.directory path = (ONAMES, HOSTNAME)
Speichern Sie die Datei sqlnet.ora.
5. Versuchen Sie sich an der Datenbank testdb29 anzumelden. Was passiert?
ORA-12154 TNS: Der Servicename konnte nicht aufgelost werden.
6. Offnen
Sie wieder die Datei sqlnet.ora. Andern
Sie dort die folgende
Zeile:
names.directory path = (TNSNAMES, ONAMES, HOSTNAME)
Speichern Sie die Datei sqlnet.ora.
7. Versuchen Sie sich wieder an der Datenbank testdb29 anzumelden. Was
passiert?
Der Connect wird durchgef
uhrt.
8. Offnen
Sie die Datei tnsnames.ora. Andern
Sie dort den Port f
ur die Datenbank testdb29 auf 1539. Versuchen Sie sich wieder an der Datenbank
testdb29 anzumelden. Was passiert?
ORA-12541 TNS: Kein Listener.
9. Offnen
Sie die Datei listener.ora. Andern
Sie auch dort den Port f
ur
die Datenbank testdb29 auf 1539. Starten Sie den Listener neu. Was
passiert?
Der Connect wird durchgef
uhrt.
10. Andern
Sie die Port-Einstellungen in listener.ora und tnsnames.ora
wieder zur
uck auf 1521
11. Erweitern Sie die Datei tnsnames.ora, so dass Sie sich auf die Datenbank
Ihres Nachbarn verbinden k
onnen.
271
268
ANHANG A. APPENDIX
1.6.3
DELETE
L
oschoperationen werden in SQL durch die DELETE-Anweisung ausgef
uhrt.
Auch L
oschoperationen m
ussen genau wie auch INSERT- und UPDATE-Anweisungen
durch ein COMMIT best
atigt werden. Falls die L
oschoperationen am Ende doch nicht durchgef
uhrt werden sollen, so k
onnen diese mit ROLLBACK
zur
uckgerollt werden.
delete from tabellenname where bedingung
DELETE FROM emp where job = SALESMAN;
Es werden alle Datens
atze der Tabelle Mitarbeiter (emp) gel
oscht,bei denen der
Job SALESMAN ist.
Andern
Sie den Zustand des Constraints so ab, dass bestehende Datens
atze auf
Ubereinstimmung
gepr
uft werden. Was passiert und warum?
alter table constr_test enable validate constraint ck_name_constr_test;
Tabelle wurde ge
andert.
77
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
78
1.7
1.7.1
Transaction Control
ROLLBACK und COMMIT
Ziel einer Datenbank ist es, die Datenbank von einem konsistenten Zustand in
den n
achsten konsistenten Zustand zu u
uhren.
berf
Stellen Sie sich vor, Sie erh
ohen den Preis von 1000000 Produkten um 3 %. Nachdem 700000 Produkte aktualisiert wurden, gibt es einen Fehler. Die Datenbank
befindet sich nicht mehr in einem konsistenten Zustand. Der erste konsistente Zustand sind die Produkte vor der Erh
ohung und der n
achste konsistente
Zustand w
are der Zustand nach der Anderung
aller 1000000 Produkte.
F
uhren Sie unter Oracle Einf
uge-, Anderungsoder L
oschaktionen aus, so werden die beteiligten Datens
atze noch nicht festgeschrieben. Erst durch ein COMMIT werden die ge
anderten Datens
atze wirklich festgeschrieben. Analog zum
Festschreiben per Commit gibt es auch die M
oglichkeit, die durchgef
uhrten
Anderungen r
uckg
angig zu machen. Die Anweisung hierf
ur lautet ROLLBACK.
Wir wollen nun die beiden Anweisungen COMMIT und ROLLBACK in einem
kleinen Beispiel etwas genauer betrachten:
insert into dept (deptno,dname) values (50,MARKETING);
insert into dept (deptno,dname) values (60,MERCHAND);
commit;
A.2.6
In die Tabelle Abteilung dept werden zwei neue Datens
atze hinzugef
ugt. Diese
Datens
atze werden mit COMMIT festgeschrieben.
insert into dept (deptno,dname) values (70,DEP1);
insert into dept (deptno,dname) values (80,DEP2);
rollback;
In die Tabelle Abteilung dept werden zwei neue Datens
atze hinzugef
ugt. Diese Datens
atze zum Abschluss wieder zur
uckgerollt. Das bedeutet, die beiden
Datens
atze sind nicht eingef
ugt worden.
1.7.2
Automatisches COMMIT
Bei einigen Befehlen ist ein automatisches COMMIT eingebaut. Das bedeu
tet, wenn Sie Ihre Datenbank ge
andert, aber die Anderungen
noch nicht mit
COMMIT permanent gemacht haben und dann einen dieser Befehle ausf
uhren,
1.7.3
SAVEPOINT
Das setzen von Savepoints erlaubt interime Labels innerhalb einer Transaktion
zu setzen und diese explizit bei einem ROLLBACK anzusprechen. Auch wenn
SAVEPOINTS gesetzt sind ist immer ein Gesamt ROLLBACK m
oglich. Das
explizite ROLLBACK zu einem SAVEPOINT macht alle Datenmanipulationen
bis zur
uck zum angegebenen SAVEPOINT r
uckg
angig. LOCKS, welche nach
Constraints
Im Folgenden werden Sie die Funktionsweise des Deaktivierens und der verschiedenen Aktivierungszust
ande von Constraints kennen lernen. Arbeiten Sie
folgende Ubung
mit dem SQL*Plus Woksheet durch.
Melden Sie sich als sys an.
Erstellten Sie eine Tabelle constr test im lokal verwalteten Tablespace ts constr test
mit einer Datendatei von 50 MB. Die Tabelle soll eine Spalte name besitzen mit
dem Datentyp varchar(20).
create tablespace ts_constr_test
datafile /var/tablespaces/ts_constr_test.dbf
size 50M extent
management local
;
create table constr_test (name varchar(20))
tablespace ts_constr_test
;
Geben sie folgende Namen ein: Klaus, Silke, Manu, Stefan, Alex, Ines.
insert
insert
insert
insert
insert
insert
into
into
into
into
into
into
constr_test
constr_test
constr_test
constr_test
constr_test
constr_test
values
values
values
values
values
values
(Klaus);
(Silke);
(Manu);
(Stefan);
(Alex);
(Ines);
267
264
ANHANG A. APPENDIX
A.2.4
In dieser Ubung
werden Sie neue Redo-Log-Member zu bereits bestehenden
Redo-Log-Gruppen hinzuf
ugen (spiegeln). Das Spiegeln der Member dient zur
Erh
ohung der Ausfallsicherheit und der Verf
ugbarkeit. Weiterhin werden Sie
Redo-Log-Gruppen hinzuf
ugen. Dies kann die Performance steigern.
1. Ermitteln Sie die Datein Ihrer Log-Files aus den Data Dictionary Views
V$LOG und V$LOGFILE. Wieviele Gruppen und Member besitzt Ihre Datenbank?
Es sind drei Gruppen mit jeweils einem Member.
2. Erstellen Sie zwei neue Verzeichnisse. Benennen Sie die Ordner /redoSP
und /redo4.
Teil 1
F
ugen Sie den bestehenden Redo-Log-Gruppen neue Member hinzu und spiegeln
Sie diese. Die Member sollten sich auf unterschiedlichen Datentr
agern befinden.
1. Melden Sie sich mittels SQL*Plus Worksheet als sys an.
2. F
ugen Sie zu jeder Redo-Log-Gruppe einen weiteren Member hinzu. Legen Sie die Member so an, dass die neuen Member im Ordner /redoSP
gespeichert werden. Benennen Sie den neuen Redo-Log-Member der ersten
Gruppe mit redo01a.log, den der zweiten Gruppe mit redo02a.log und
den der dritten Gruppe mit redo03a.log.
alter database
add logfile member
/redoSP/redo01a.log to group 1,
/redoSP/redo02a.log to group 2,
/redoSP/redo03a.log to group 3
;
select group#,member,status from v$logfile;
3. Pr
ufen Sie Ihr Ergebnis mit Hilfe der View V$LOGFILE.
Was stellen Sie fest?
Alle sind als INVALID gekennzeichnet.
1.8.6
1.8.7
Teil 2
Nun werden Sie eine neue Redo-Log-Gruppe hinzuf
ugen.
1. Melden Sie sich mittels SQL*Plus Worksheet an Ihrer Datenbank als sys
an.
2. F
ugen Sie die vierte Gruppe hinzu. Diese soll ebenfalls zwei Member mit
einer Gr
oe von 50MB besitzen. Speichern Sie den ersten Member im
Ordner /redo4 und den zweiten in /redoSP ab. Bennen Sie die Redo-LogDateien mit redo04a.log (erster Member) bzw. redo04b.log (zweiter
Member).
alter database
add logfile group 4
(/redo4/redo04a.LOG,
/redoSP/redo04b.LOG)
size 50M
;
81
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
82
1.9
Einfu
hrung in die PL/SQL-Programmierung
Grunds
atzlich kann man einen PL/SQL-Block in drei Abschnitte unterteilen.
1. Deklarationsabschnitt
Als erstes erfolgt die Deklaration von Variablen, Konstanten etc.
2. Ausf
uhrbarer Abschnitt
Als zweites werden die entsprechenden Befehle in den ausf
uhrbaren Abschnitt eingetragen.
3. Exceptionsabschnitt
Als letztes haben Sie einen Abschnitt mit Exceptions. Hier wird eine Ausnahmebehandlung durchgef
uhrt.
Wir wollen die drei Abschnitte anhand eines kleinen Beispiels verdeutlichen.
Die Syntax der hier verwendeten Befehle und Kontrollstrukturen wird in den
weiteren Kapiteln genauer beschrieben.
1.9.1
Anonymer Block
-- Deklarationsabschnitt
declare
v_zahl1 number(5) := 5;
v_zahl2 number(5) DEFAULT 5;
-- Ausf
uhrbarer Abschnitt & Exception
begin
select count(*) into anzahl from scott.emp;
dbms_output.put_line(anzahl);
-- Exception-Abschnitt
Exception
when too_many_rows then
dbms_output.put_line(Sie haben zu viele Werte.);
when others then
dbms_output.put_line(unbekannte Ausnahmeverletzung.);
end;
A.2.3
In dieser Ubung
Sie die Kontroldateien Ihrer Datenbank spiegeln, um eine h
ohere Ausfallsicherheit zu gew
ahrleisten. Die Kontrolldateien sollten dabei auf unterschiedliche Datentr
ager gespeichert werden.
1. Ermitteln Sie aus der Data Dictionary View V$CONTROLFILE den Speicherort der Kontroldateien. Notieren Sie sich die angegebenen Pfade.
2. Erstellen Sie drei neue Verzeichnisse. Bennennen Sie diese in /hdd1, /hdd2
und /hdd3. Diese Bezeichnungen sollen unterschiedliche Datentr
ager darstellen. Wenn es Ihnen m
oglich ist, sollten Sie diese Verzeichnisse auch als
Mount-Points f
ur unterschiedliche Datentr
ager verwenden.
3. Melden Sie sich mit dem SQL*Plus-Worksheet als sys an.
4. Andern
Sie Ihr SPFILE so, dass die neuen Pfadangaben f
ur die Kontrolldateien darin angegeben werden. Bedenken Sie, dass die Pfadangaben f
ur
die Kontrolldateien keine dynamischen Werte des SPFILE sind.
alter systemset control_files =
(
/hdd1/control01.ctl,
/hdd2/control02.ctl,
/hdd3/control03.ctl
)
SCOPE=SPFILE
;
5. Fahren Sie Ihre Instanz herunter und verschieben (nicht kopieren) Sie
die Kontrolldateien mittels Betriebssystem-Befehlen an die entsprechenden Verzeichnisse.
6. Starten Sie die Instanz wieder (OPEN). Ermitteln Sie aus der Data Dictionary View V$CONTROLFILE wieder den Speicherort der Kontroldateien.
Wo befinden sich die drei Kontroldateien jetzt?
/hdd1/control01.ctl,/hdd2/control02.ctl,/hdd3/control03.ctl
Zusatz:
Fahren Sie die Instanz herunter. Benennen Sie die Kontrolldateien um und simulieren so den Ausfall s
amtlicher Kontrolldateien. L
at sich die Instanz starten?
Nein.
Simulieren Sie den Ausfall nur einer Kontrolldatei. Was passiert beim Start?
Es wird ein Lesefehler der Kontrolldatein angezeigt (alert.log). Es wird aber
versucht die DB zu mounten. Dies gelingt aber nicht.
263
260
ANHANG A. APPENDIX
1.9. EINFUHRUNG
IN DIE PL/SQL-PROGRAMMIERUNG
1.9.6
Durch eine FOR LOOP ... END LOOP-Schleife wird ein Block n-mal durchlaufen. Die Anzahl der Durchl
aufe wird durch die Grenzwerte hinter IN definiert.
Im folgenden Beispiel wird die Schleife demnach 11 mal durchlaufen. Begonnen
wird bei 0, anschlieend wird hochgez
ahlt und wenn die Variable zaehler den
Wert 10 erreicht hat, wird die Schleife beendet.
FOR Z
ahlvariable IN untere_Grenze .. obere_Grenze LOOP
Anweisungen;
END LOOP;
-- x muss nicht deklariert werden:
For x In 1 .. 10 Loop
dbms_output.put_line(x);
End Loop;
1.9.7
85
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
86
1.9.8
1.9.9
Beispiele
259
sp.klassen_id=k.klassen_id
order by l.nachname,w.tag_id,s.stunden_id;
-- Klassen
create or replace view V_Klasse as
select k.klassenname,
w.tag Tag,
s.stundennummer Stunde,
r.raumbezeichnung Raum,
f.Fach_Kurz Fach,
l.nachname lehrer
from Stundenplan sp,
Lehrer l,
wochentag w,
stunden s,
fach f,
klassenraum r,
klasse k,
Lehrer_fach lf
where sp.fach_lehrer_id = lf.fach_lehrer_id and
lf.lehrer_id=l.lehrer_id and
sp.tag_id=w.tag_id and
sp.stunden_id=s.stunden_id and
lf.fach_id=f.fach_id and
sp.raum_id=r.raum_id and
sp.klassen_id=k.klassen_id
order by k.klassenname,w.tag_id,s.stunden_id;
-- Raumbelegung
create or replace view V_Raum as
select
r.raumbezeichnung Raum,
w.tag Tag,
s.stundennummer Stunde,
k.klassenname,
f.Fach_Kurz Fach,
l.nachname lehrer
from Stundenplan sp,Lehrer l,wochentag w,stunden s,fach f,klassenraum r,klasse k,
Lehrer_fach lf
where sp.fach_lehrer_id=lf.fach_lehrer_id and lf.lehrer_id=l.lehrer_id and
sp.tag_id=w.tag_id and
sp.stunden_id=s.stunden_id and
lf.fach_id=f.fach_id and
sp.raum_id=r.raum_id and
sp.klassen_id=k.klassen_id
order by r.raumbezeichnung,w.tag_id,s.stunden_id;
256
ANHANG A. APPENDIX
-- L
osung:
select distinct contactname, orderid from customers c
left join orders o on c.customerid = o.customerid
where orderid is null
;
Welche Kunden wurden bisher von Speedy Express beliefert? Benutzen Sie INNER JOIN und NATURAL JOIN, soweit es m
oglich ist.
-- L
osung:
create view shippers_view as
select shipperid as shipvia, companyname as sh_companyname from shippers
;
select distinct companyname, sh_companyname from customers
NATURAL JOIN orders
NATURAL JOIN shippers_view
where lower(sh_companyname) = speedy express
;
drop view shippers_view
;
Erstellen Sie eine Abfrage, die Ihnen rechts den Angestellten und links den
Vorgesetzten ausgibt. Der Chef sollte in der Spalte Vorgesetzter BOSS zu stehen
haben (Tipp: NVL).
-- L
osung:
select e.lastname Mitarbeiter,nvl(boss.lastname,Boss) as Chef
from employees e
left join employees boss on e.reportsto = boss.employeeid
;
Erstellen Sie eine Abfrage, welche die Durchschnittskommission von scott.emp
ermittelt. Ein Null-Wert sollte hierbei als 0 interpretiert werden und demnach
in der Durchschnittsberechnung mit einbezogen werden
-- L
osung:
select avg(nvl(COMM,0)) from scott.emp;
Schreiben Sie eine Abfrage, welche die Mehrwertsteuer der Produkte berechnet.
Produkte der Kategorie 1 haben die Mehrwertsteuer 0%, der Kategorie 2 und 3
Mehrwertsteuer 7% und der Rest 16%.
-- L
osung Variante 1:
SELECT productname,
CASE
WHEN p.categoryid = 1 THEN 0
WHEN p.categoryid IN (2,3) THEN unitprice*0.07
ELSE unitprice* 0.16
END AS MwSt
FROM products p
;
-- L
osung Variante 2:
select productname, to_char(unitprice, 999g999d99),
to_char(unitprice*
(
USING JOIN
Beim USING JOIN wird der gemeinsame Spaltenname explizit angegeben. Dies
ist bei mehreren, gleichnamigen Spalten notwendig. Ein ON kommt in der Syntax nicht vor.
SELECT deptno, ename, dname
FROM emp
JOIN dept USING (deptno)
;
INNER JOIN
select d.deptno,e.ename
from scott.dept d
join scott.emp e
on e.deptno = d.deptno
;
1.10.5
89
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
90
1.10.6
-- L
osung:
??
Zusatzaufgabe 2:
Verbessern Sie die G
ultigkeitspr
ufung bei der Parameter
ubergabe.
DEFAULT
-- L
osung:
??
A.1.10
Welche Kunden (contactname) haben Produkte der Kategorie beverages bestellt. Benutzen Sie NATURAL JOINs, soweit es m
oglich ist.
-- L
osung:
select distinct contactname from customers
NATURAL JOIN orders
NATURAL JOIN order_details
NATURAL JOIN products
NATURAL JOIN categories
where lower(categoryname) = beverages
;
Welcher Kunde hat noch nie etwas bestellt? Benutzen Sie einen OUTER JOIN.
Einf
ugen von Datens
atzen
insert into test(nummer,city) values(1,default);
255
252
ADD
ALTER
ADD
ALTER
ADD
ALTER
ADD
ANHANG A. APPENDIX
-- Foreign Keys:
ALTER TABLE products
ADD CONSTRAINT prod_fk_cat
FOREIGN KEY (categoryid)
REFERENCES categories(categoryid);
ALTER TABLE products
ADD CONSTRAINT prod_fk_supp
FOREIGN KEY (supplierid)
REFERENCES suppliers(supplierid);
ALTER TABLE order_details
ADD CONSTRAINT orderd_fk_prod
FOREIGN KEY (productid)
REFERENCES products(productid);
ALTER TABLE order_details
ADD CONSTRAINT orderd_fk_orders
FOREIGN KEY (orderid)
REFERENCES orders(orderid);
ALTER TABLE orders
ADD CONSTRAINT orders_fk_shippers
FOREIGN KEY (shipvia)
REFERENCES shippers(shipperid);
ALTER TABLE orders
ADD CONSTRAINT orders_fk_customers
FOREIGN KEY (customerid)
REFERENCES customers(customerid);
ALTER TABLE employeeterritories
ADD CONSTRAINT emplterr_fk_employ
FOREIGN KEY (employeeid)
REFERENCES employees(employeeid);
ALTER TABLE employeeterritories
ADD CONSTRAINT emplterr_fk_terr
FOREIGN KEY (territoryid)
REFERENCES territories(territoryid);
ALTER TABLE territories
ADD CONSTRAINT terr_fk_region
FOREIGN KEY (regionid)
REFERENCES region(regionid);
ALTER TABLE employees
ADD CONSTRAINT employ_fk_employ
FOREIGN KEY (reportsto)
REFERENCES employees(employeeid);
Kapitel 2
Fundamentals
Stellen Sie folgendes sicher (Speichern Sie auch diese Anweisungen in einer Datei): Der unitprice muss gr
oer oder gleich 0 sein (products und order details).
-- L
osung:
ALTER TABLE products ADD CONSTRAINT prod_1_CK1 CHECK (unitprice >= 0);
ALTER TABLE order_details ADD CONSTRAINT orderd_1_CK1 CHECK (unitprice >= 0);
Das Land der Kunden darf nicht Irak oder Nordkorea oder Kuba sein.
93
94
2.1
KAPITEL 2. FUNDAMENTALS
Oracle-Server Bestandteile
251
-- L
osung:
alter table lehrer modify (name varchar(45));
Setzen Sie das Gehalt f
ur alle Herren auf 3000.
-- L
osung:
UPDATE lehrer SET gehalt = 3000 where ANREDE = Herr;
commit;
Setzen Sie das Gehalt f
ur alle Frauen auf 3100.
-- L
osung:
UPDATE lehrer SET gehalt = 3100 where ANREDE = Frau;
commit;
Erstellen und f
ullen Sie eine Tabelle namens Herren (Name, Vorname, Gehalt).
-- L
osung:
create table herren as select name,vorname,gehalt from lehrer where ANREDE = Herr;
L
oschen Sie aus der Tabelle Lehrer alle Herren.
-- L
osung:
delete from lehrer where ANREDE = Herr;
commit;
Benennen Sie die Tabelle Lehrer in Frauen um.
-- L
osung:
rename lehrer to frauen;
A.1.8
Contraints
Erstellen Sie alle Beziehung der Northwind-Datenbank. Speichern Sie die Anweisungen in einer Datei!
-- L
osung:
---Primary Keys:
ALTER TABLE employees
ADD CONSTRAINT empl_pk PRIMARY KEY (employeeid);
ALTER TABLE employeeterritories
ADD CONSTRAINT emplterr_pk PRIMARY KEY (employeeid,territoryid);
ALTER TABLE territories
ADD CONSTRAINT terr_pk PRIMARY KEY (territoryid);
ALTER TABLE region
ADD CONSTRAINT region_pk PRIMARY KEY (regionid);
ALTER TABLE customers
ADD CONSTRAINT customers_pk PRIMARY KEY (customerid);
ALTER TABLE orders
ADD CONSTRAINT orders_pk PRIMARY KEY (orderid);
ALTER TABLE order_details
ADD CONSTRAINT order_details_pk PRIMARY KEY (orderid,productid);
ALTER TABLE products
248
ANHANG A. APPENDIX
-- L
osung:
select lastname,firstname,birthdate from employees
where birthdate =
(
select max(birthdate) from employees where birthdate <
(
select max(birthdate) from employees where birthdate <
(
select max(birthdate) from employees
)
)
)
;
A.1.6
Redo Log Buffer: Der Redo Log Buffer ist ein Circular Buffer und speichert
Anderungen
von Datenbl
ocken. LOG BUFFER definiert die Gr
oe des Redo
Log Buffer in Bytes.
Large Pool: Der Large Pool ist ein optionaler Speicherbereich im SGA. Er
wird f
ur Session Memory verwendet bei Shared Server. Weitere Anwendungen
sind I/O, Backup/Restore (RMAN), ... Der Large Pool verwendet kein LRUAlgorithmus. LARGE POOL SIZE definiert die Gr
oe des Large Pools (Default
0). LARGE POOL SIZE ist nicht dynamisch.
Funktionen
Schreiben Sie eine Abfrage, die Ihnen alle lastname der Employees in Grobuchstaben ausgibt.
-- L
osung:
select upper(lastname) from employees;
Schreiben Sie eine Abfrage, die Ihnen alle lastnames der Employees in Kleinbuchstaben ausgibt.
-- L
osung:
select lower(lastname) from employees;
Schreiben Sie eine Abfrage, die Ihnen den ersten Buchstaben von lastnames der
Employees in Grobuchstaben und den Rest in Kleinbuchstaben ausgibt.
-- L
osung:
select initcap(lastname) from employees;
Schreiben Sie eine Abfrage, die Ihnen den ersten und den letzten Buchstaben von
lastnames der Employees in Grobuchstaben und den Rest in Kleinbuchstaben
ausgibt.
-- L
osung:
select initcap(substr(lastname,1,length(lastname)-1)) ||
upper(substr(lastname,-1,1))
from employees;
Schreiben Sie eine Abfrage, die Ihnen alle Employees ausgibt, in deren lastname
zwei l (also ll) vorkommen. Es soll dabei egal sein, ob es jeweils ein groes oder
kleines l sind.
-- L
osung:
select lastname from employees where instr(lower(LASTNAME),ll) > 0;
Schreiben Sie eine Abfrage, die Ihnen eine Spalte als Ergebnismenge zur
uckgibt, in welcher der erste Buchstaben des Vornamens, dahinter ein Punkt und
dahinter, getrennt durch ein Leerzeichen, der lastname ausgegeben wird. Bei
dem lastname sollte lediglich der erste Buchstabe gro sein. (z.B. R. King)
2. Offnen
der Datenbank, so dass User sich einloggen k
onnen. Daten, die
nicht durch abgebrochene Transaktionen gesperrt sind (Locks), stehen zur
Verf
ugung.
3. Transaktionen ohne abschlieendes COMMIT werden zur
uckgerollt.
Der SMON f
uhrt auch Speicherverwaltungsaufgaben durch.
Benachbarte Bereiche in den Database Files werden zusammengefasst.
Tempor
are Segmente werden in den Database Files freigegeben.
97
98
KAPITEL 2. FUNDAMENTALS
DBWRn:
Der Database Writer schreibt Dirty Buffers von dem Database
Buffer Cache in die Database Files. Er verz
ogert dies aber bis eines der folgenden
Ereignisse eintritt:
Ein Checkpoint wird gesetzt.
Der Bedarf an Dirty Buffer u
bersteigt einen Grenzwert.
Timeout
-- L
osung:
select c.contactname, sum(od.unitprice*od.quantity) as Umsatz
from orders o,order_details od, customers c
where o.orderid = od.orderid and
c.customerid = o.customerid
group by c.contactname
;
Welche Kunden haben bisher Chai bestellt?
-- L
osung Variante 1:
SELECT DISTINCT o.customerid
FROM orders o, order_details od, products p
WHERE o.orderid = od.orderid
AND od.productid = p.productid
AND UPPER(p.productname) = CHAI
;
-- L
osung Variante 2:
select distinct companyname from customers
where customerid in
(
select customerid from orders where orderid in
(
select orderid from order_details where PRODUCTID =
(
select PRODUCTID from products where PRODUCTNAME = Chai
)
)
)
;
Wie heit der zweit
alteste Mitarbeiter?
-- L
osung Variante 1:
select lastname,firstname,birthdate from employees
where birthdate in
(
select min(birthdate) from employees where birthdate >
(
select min(birthdate) from employees
)
)
;
-- L
osung Variante 2:
select lastname from employees where birthdate=
(
select min(birthdate)
from
(
select lastname, birthdate from employees
minus
select lastname, birthdate from employees
where birthdate = (select min(birthdate) from employees)
)
);
Wie heit der drittj
ungste Mitarbeiter?
247
244
ANHANG A. APPENDIX
Schreiben Sie eine Abfrage, die Ihnen die Angestellten und Vorgesetzten ausgibt.
Die reportsto-Spalte gibt die employeeid des Vorgesetzten an, der wiederum auch
selbst ein Angestellter ist!
-- L
osung:
select e.LASTNAME,e.FIRSTNAME, c.LASTNAME,c.FIRSTNAME from
employees e,employees c
where e.reportsto = c.employeeid(+)
;
Schreiben Sie eine Abfrage, die Ihnen die Kunden und Ihren Gesamtbestellwert
(ohne Discount) auflistet.
2.2
2.2.1
Die User SYSTEM und SYS werden automatisch bei der Erstellung der Datenbank erstellt.
User SYS
Default-Passwort: change on install
Der User SYS ist Eigent
umer des Data-Dictionary.
CUSTO SUM(UNITPRICE
---------------ALFKI
9192,4
ANATR
2805,9
ANTON
15030,7
AROUT
27613
BERGS
53936,3
BLAUS
4763,6
-- L
osung:
select c.customerid, sum(od.unitprice*od.quantity)
from customers c, orders o, order_details od
where c.customerid = o.customerid
and o.orderid = od.orderid
group by c.customerid
;
Wieviel Produkte hat ALFKI bestellt?
-- L
osung:
select count(*) from orders o,order_details od
where o.customerid = ALFKI and o.orderid = od.orderid
;
Wie ist der Gesamtumsatz von ALFKI?
-- L
osung:
select to_char(round(sum(od.UNITPRICE * od.quantity),2),9999D00) as Gesamtumsatz
from orders o, order_details od
where o.customerid = ALFKI and o.orderid = od.orderid
;
User SYSTEM
Default-Passwort: manager
Der User SYSTEM ist Eigent
umer aller internen Tabellen und Views, die von
den Oracle Tools verwendet werden.
Rolle DBA
Den Usern SYS und SYSTEM ist die DBA-Rolle zugewiesen.
Privilegien SYSDBA/SYSOPER
Spezielle Privilegien sind SYSDBA und SYSOPER. SYSOPER kann die Instanz starten, herunterfahren, (un-)mounten und bedingt recovern. SYSDBA
hat die gleichen Rechte wie SYSOPER. Zus
atzlich kann man auch mit diesem
Privileg neue Datenbanken erzeugen und vollst
andiges Backup und Recovery
durchf
uhren. Als User SYS und SYSTEM sollte man entweder sich mit den
Privilegien SYSDBA oder SYSOPER anmelden.
2.2.2
Anmelden Repository
Im Repository befinden sich die Meta-Daten u
ber einem OEM. Meta-Daten
sind Daten u
ber Daten. Es geht auch ohne Repository. Dann erfolgt halt die
Verbindung u
ber Standalone.
Bei der Anmeldung Standalone wird sich ohne Verwendung eines Repositories
verbunden.
101
102
2.3
KAPITEL 2. FUNDAMENTALS
2.3.1
Initialisierungsparameter
CITY
-----Aachen
Albuquerque
-- L
osung:
select distinct city from customers
minus
select distinct city from suppliers;
Schreiben Sie eine Abfrage, die Ihnen die Kundennamen ausgibt, die noch nie
etwas bestellt haben!
-- L
osung:
select distinct COMPANYNAME from customers
minus
select distinct COMPANYNAME from customers c,orders o
where c.customerid = o.customerid
;
Schreiben Sie eine Abfrage, die Ihnen die Lieferanten ausgibt, die keine Produkte
liefern!
-- L
osung:
select distinct s.companyname from suppliers s,products p
minus
select distinct s.companyname from suppliers s,products p
where s.supplierid = p.supplierid
;
243
240
ANHANG A. APPENDIX
Schreiben Sie eine Abfrage, die Ihnen die Summe des Warenbestandes (unitsinstock) aus der Tabelle products, gruppiert nach den Lieferantennummern (supplierid) ausgibt.
NOMOUNT
SUPPLIERID SUMME
---------------1
69
-- L
osung:
select supplierid,sum(unitsinstock) as Summe from products
group by supplierid
;
NOMOUNT wird zur Datenbankerstellung und zur Wiederherstellung der Control Files verwendet. Es werden folgende Schritte abgearbeitet.
startup nomount;
Schreiben Sie eine Abfrage, die Ihnen die Summe des Warenbestandes (unitsinstock) aus der Tabelle products, gruppiert nach den Lieferantennummern (supplierid) ausgibt! Es sollen nur die Lieferanten erscheinen, bei denen die Summe
des warenbestandes gr
oer als 70 ist.
SUPPLIERID SUMME
---------------2
133
-- L
osung:
select supplierid,sum(unitsinstock) as Summe from products
group by supplierid having sum(unitsinstock) > 70
;
Schreiben Sie eine Abfrage, die Ihnen die Summe des Warenbestandes (unitsinstock) aus der Tabelle products, gruppiert nach den Lieferantennummern (supplierid) und den Kategorienummern (categoryid) ausgibt!
SUPPLIERID CATEGORYID SUM(UNITSINSTOCK)
---------------------------------------1
1
56
1
2
13
2
2
133
3
2
126
-- L
osung:
select supplierid,categoryid,sum(unitsinstock) from products
group by supplierid,categoryid
;
Listen Sie alle Lieferanten auf, die mehr als 5 Produkte liefern!
SUPPLIERID
---------7
12
-- L
osung:
select supplierid from products
group by supplierid having count(Productname) > 5
;
Offnen
der alertSID.log und der Trace Files.
Die Datenbank muss per DB NAME gesetzt sein oder in den Initialisierungsfiles
stehen.
MOUNT
startup mount;
Die Datenbank wird gemountet aber nicht ge
offnet. Dies ist f
ur folgende Arbeiten notwendig.
Umbennen/Verschieben von Datafiles
(De-)Aktivierung von Redo-Log-Archivierungs-Optionen
Volles Datenbank-Recovery
Es werden folgende Schritte abgearbeitet.
Assoziieren einer Datenbank mit einer vorher gestarteten Instanz,
Offnen
der Control Files.
Lesen der Control Files um Namen und Status der Datenfiles und Redo
Log Files zu erhalten.
Die Existenz der Datenfiles und Redo Log Files wird aber noch nicht
u
uft.
berpr
OPEN
startup open;
Jeder g
ultige User kann jetzt auf die Datenbank zugreifen. Es werden folgende
Schritte abgearbeitet.
Offnen
der Online Datafiles.
Listen Sie die Lieferanten mit Ihren jeweils teuersten Produkt auf. Es sollen nur
die Lieferanten angezeigt werden, bei denen das teuerste Produkt billiger als 10
DM ist.
Offnen
der Redo Log Files.
Der SMON f
uhrt ggf. Instanz Recovery durch.
105
106
KAPITEL 2. FUNDAMENTALS
A.1.2
LIKE, Platzhalter
startup force;
Erstellen Sie eine Abfrage, die Ihnen alle Produkte ausgibt, die mit C
anfangen.
Diese sollen absteigen nach dem Produktname sortiert sein.
2.3.4
ALTER DATABASE
-- L
osung:
select PRODUCTNAME from products
where PRODUCTNAME
like C%
order by PRODUCTNAME desc
;
B,
Erstellen Sie eine Abfrage, die Ihnen alle Produkte ausgibt, die mit A,
oder C
anfangen.
-- L
osung:
select PRODUCTNAME from products
where PRODUCTNAME
like A% or
PRODUCTNAME like B% or
PRODUCTNAME like C%
;
Andert
des Status der Datenbank von NOMOUNT zu MOUNT.
alter database testdb29 open read only;
Erstellen Sie eine Abfrage, die Ihnen alle Produkte ausgibt, bei denen der 5.
Buchstabe ein c
oder dst. Diese sollen aufsteigend nach dem Produktname
sortiert sein.
Offnet
eine Database schreibgesch
utzt.
alter database testdb29 open read write;
Offnet
eine Database mit Schreibzugriff.
2.3.5
ALTER SYSTEM
-- L
osung:
select PRODUCTNAME from products where PRODUCTNAME
like ____c% or PRODUCTNAME like ____d% order by 1
;
Erstellen Sie eine Abfrage, die Ihnen alle Produkte ausgibt, bei denen der 5.
Buchstabe kein cst.
-- L
osung:
select PRODUCTNAME from products where PRODUCTNAME not
like ____c%
;
A.1.3
Gruppierungen
Schreiben Sie eine Abfrage, die Ihnen die Spalte City der Tabelle employees
ausgibt. Es soll keine Stadt mehrmals auftauchen.
CITY
---------------Seattle
Tacoma
Ta
-- L
osung:
select distinct city from employees;
239
236
2.4
Unix-Umgebungsvariablen
export
export
export
export
ORACLE_HOME=/opt/oracle/OraHome1
ORACLE_SID=TESTDB29
PATH=$PATH:$ORACLE_HOME/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
2.4.1
2.4.2
CREATE DATABASE
2.4.3
Datenbankarten
Typical
Online Transaction Processing (OLTP)
Data Warehousing
Mixed
109
110
KAPITEL 2. FUNDAMENTALS
Custom
Einstellungen werden von erfahrenen Datenbankadministratoren individuell vorgenommen.
2.4.4
2.4.5
Problembehebung
Master-Objekt: REPORTSTO
Datenblockname: BOSS
Datenblock erstellen und danach Layoutmanager aufrufen.
...
Es erscheint der Layout-Manager mit den Formularen.
Auswahl der Spalten TITLE, LASTNAME, FIRSTNAME
Rahmentitel: BOSS
Beachte: Im Layout-Manager m
ussen alle Formulare auf die Leinwand passen,
sonst werden diese nicht angezeigt.
4.3.7
Wertelisten (LOV)
Beispiel:
Beschr
ankung der Anzeige von REPORTSTO auf vorhandene EMPLOYEEIDs.
Im Objektnavigator auf Wertelisten (LOV) und danach das Pluszeichen anklicken. Wertelisten-Assitent verwenden.
Neue Datensatzgruppe
SQL-Abfrage:
select EMPLOYEEID as REPORTSTO from employees order by EMPLOYEEID
EMPLOYEEID ausw
ahlen.
Titel: REPORTSTO
...
Fertig. Unter Wertelisten und Datensatzgruppen erscheint je ein neues Objekt.
235
232
4.3
Forms Kurzeinfu
hrung
Developer Suite 10
Forms [32 Bit] Version 9.0.4.0.19 (Production)
Oracle Toolkit Version 9.0.4.0.31 (Production)
2.6
Control Files
4.3.1
Vorbereitung
Datenbankname und Identifier
Server
Tablespace Namen
Namen und Pfade der Data Files und Redo Log Files
Aktive Redo Log Sequenz Nummer
Checkpoint Informationen
Anfang und Ende des Undo-Segments
Redo Log Archive Information
Client
Backup Information
Formulare werden bei 10 als Applets erstellt, die Verbindung mit einem Servlet aufnehmen: Auf der Clientseite ist nur ein WWW-Browser (Netscape, IE)
notwendig. Die Software (JInitiator 1.3.1.13) wird automatisch installiert.
2.6.1
4.3.2
Da Control Files sehr wichtig sind, sollte man die Control Files spiegeln. Man
kann bis zu 8 identische Control Files auf unterschiedlichen Festplatten verwalten. Bei einem Festplattencrash kann man ein anderes Control File bei heruntergefahrener Instanz an den urspr
unglichen Ort der zerst
orten Datei kopieren
und mit dieser Datei neu starten.
Men
u Datei - Anmelden
sys/sys@testdb29
Control Files m
ussen beim Erstellen der Datenbank mit angegeben werden.
Ansonsten kann keine Datenbank erstellt werden. Die Lage und Namen der
Control Files wird in den Dateien SPFILE und PFILE gespeichert.
Modul erstellen/umbenenen
Beim Starten wird ein Formular MODUL1 erstellt. Ist dies nicht vorhanden,
kann dies mit Men
u Bearbeiten Erstellen erfolgen. Ein Doppelklick auf MODUL1 im Objektnavigator
offnet die Attributpalette. Dort kann der Name MODUL1 in NORTHWIND FORMULAR01 ge
andert werden.
Men
u Datei Speichern unter NORTHWIND FORMULAR01.fmb
Block erstellen
Bl
ocke dienen zur Zuordnung von Formular-Feldern zu Tabellen-Spalten.
Men
u Werkzeuge Datenblock-Assistent Tabelle oder Ansicht
Durchsuchen anklicken. Es erscheinen die Tabellen der Datenbank.
Auswahl EMPLOYEES. Es erscheinen die Spalten der Tabelle.
>>w
ahlt alle Spalten aus.
Tabellenblockname: EMPLOYEES
Datenblock erstellen und danach Layout-Editor aufrufen.
2.6.2
Andern
des SPFILE f
ur verschobene CONTROLFiles
alter system
set control_files = /oracle/oradata/testdb29/CONTROL01.CTL,
/hdd2/control02.ctl,
/hdd3/control03.ctl
SCOPE = SPFILE
;
shutdown immediate;
startup;
2.6.3
113
114
2.6.4
KAPITEL 2. FUNDAMENTALS
Ubung
Control Files spiegeln
Ubungen
siehe Seite 262.
4.2. JAVA
ODBC-Treiber mySQL
Beispiel unter Windows
mySQL-ODBC-Treiber von [4] laden.
ODBC-Treiber installieren
Systemsteuerung Verwaltung - Datenquellen (ODBC)
System-DSN Hinzuf
ugen mySQL-ODBC-Treiber
Data Source Name: myodbc3-test (kann beliebig gew
ahlt werden)
Description: MySQL ODBC 3.51 TEST DSN
Host/Server: localhost
Database Name: mysql
User: root
Password: pinguin
Port: 3306
SQL-Command: ( select * from user )
Test Data Soucre
Beispiel
import java.sql.*;
public class MySql
{
public static void main( String args[] )
{
try { Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );}
catch ( Exception e ) {
System.out.println( "Fehler bei ODBC-JDBC-Bridge" + e );
return;
}
Connection conn;
Statement stmt;
ResultSet rSet;
try {
// //// Anpassen
String url = "jdbc:odbc:meiMySQL";
conn = DriverManager.getConnection( url, "root", "pinguin" );
stmt = conn.createStatement();
String sqlQuery = "SELECT * FROM mysql.user";
rSet = stmt.executeQuery( sqlQuery );
// ////
}
catch ( Exception e ) {
System.out.println( "Fehler bei Datenbankzugriff" + e );
return;
}
try {
while ( rSet.next() )
System.out.println ( rSet.getString(1) + "\t" + rSet.getString(2));
stmt.close();
conn.close();
}
catch ( Exception e ) {
System.out.println( "Fehler bei Tabellenabfrage" + e );
return;
}
}
}
231
228
4.2.2
JDBC
JDBC-Treibertypen
Typ 1 JDBC-ODBC-Br
ucken
2.8
Tablespaces, Datafiles
Oracle speichert Daten in Tablespace (logisch) und in Data Files (physisch). Ein
Tablespace kann nur zu einer Datenbank geh
oren. Ein Tablespace kann ein oder
mehrere Data Files beinhalten. Ein Data File kann nur zu einem Tablespace
und zu einer Datenbank geh
oren.
2.8.1
System Tablespace
Wird mit der Datenbank erstellt.
Enth
alt das Data Dictionary.
Enth
alt das System Undo Segment.
Non-System Tablespace
Thin-Treiber Oracle
Separate Segmente.
Einfache Speicherplatz-Administration.
set CLASSPATH=$CLASSPATH:.../classes12.zip
Eventuell reicht ein Kopieren des JDBC-Treibers nach $JAVA HOME/jre/lib/ext.
2.8.2
2.8.3
Tablespace erzeugen
2.8.4
117
118
2.8.5
KAPITEL 2. FUNDAMENTALS
Wenn der SYSTEM-Tablespace als Locally Managed Tablespaces angelegt wurde, kann weiterer Tablespace nur locally angelegt werden.
2.8.6
2.8.7
Temporary Tablespace
4.2. JAVA
227
Eine L
osung:
class Teilnehmer {
private String name, vorname, kurs;
public Teilnehmer(String n, String v, String k) {
this.name = n;
this.vorname = v;
this.kurs = k;
}
public String getName() {
return name;
}
public void setName(String n) {
name=n;
}
public String getVorName() {
return vorname;
}
public void setVorName(String v) {
vorname=v;
}
public String getKurs() {
return kurs;
}
public void setKurs(String k) {
kurs=k;
}
}
class Datenausgabe {
//
Uber diese Methode sollen alle Teilnehmer-Objekte ausgegeben werden.
public static void printDaten(Teilnehmer te) {
System.out.println("Name: " + te.getName());
System.out.println("Vorname: " + te.getVorName());
System.out.println("Kurs: " + te.getKurs());
System.out.println();
}
}
class T_Verwaltung {
public static void main(String[] args) {
System.out.println("Verwaltung der Teilnehmer einer Schulungsfirma");
Teilnehmer t1 = new Teilnehmer("Meier","Kurt","Netzwerk-Administrator");
Teilnehmer t2 = new Teilnehmer("Bayer","Astrid","DB-Administrator");
Datenausgabe.printDaten(t1);
Datenausgabe.printDaten(t2);
System.out.println("");
System.out.println("Meiser wechselt zum Kurs DB-Administrator");
System.out.println("");
t1.setKurs("DB-Administrator");
Datenausgabe.printDaten(t1);
Datenausgabe.printDaten(t2);
}
}
224
4.1
PHP
2.9
Apache starten.
2.9.1
apachectl start
4.1.1
PHP Oracle
1. 200K (INITIAL)
2. 200K (NEXT)
<html>
<body>
<?php
// open a connection
if (!$db = @ora_logon("scott@testdb29","tiger")) {
$error = ora_error();
printf("There was an connecting error. Error was: %s", $error);
die();
}
else echo "Connect...\n<br>";
$curs = ora_open($db);
$sql = "SELECT * FROM dept";
5. 675 K
2.9.2
121
122
KAPITEL 2. FUNDAMENTALS
Kapitel 4
Backend / Frontend
223
220
KAPITEL 3. HIGH-PERFORMANCE-TUNING
Dropping Clusters
Nutze INCLUDING TABLES f
ur das L
oschen der Tabellen und des Clusters.
DROP CLUSTER scott.ord_clu INCLUDING TABLES;
Oder l
osche die Tabellen vor dem Cluster.
DROP TABLE scott.ord;
DROP TABLE scott.item;
DROP CLUSTER scott.ord_clu;
3.10.3
Index-Organized Tables
2.11. TABELLEN
2.11
Tabellen
2.11.1
Regular Table
Dies ist die am meisten verwendete Tabellenart. Ein Datenbankadministrator hat nur wenig Einfluss auf die Speicherung der Datens
atze.
Partitioned Table
Diese Art erm
oglicht die Bildung von skalierbaren Applikationen. Jede
Partition kann in unterschiedlichen Tablespaces gespeichert werden.
Index-Organized Table
Schneller Key-basierter Zugriff.
Clustered Table
Wird aus einer oder mehreren Tabellen gebildet, die sich den gleichen
Datenblock teilen.
Von den vier Tabellentypen wird hier die Regular Table eingehender besprochen.
2.11.2
ROWID
2.11.3
2.11.4
Das Verschieben einer Tabelle von einem Tablespace in einem anderen sollte
nur in Ausnahmef
allen erfolgen. Dies kann z.B. notwendig sein, wenn die Performance drastisch sinkt. S
amtliche Indizes dieser Tabelle werden gel
oscht und
m
ussen neu erstellt werden.
2.11.5
describe user_tables;
select table_name, tablespace_name
from user_tables;
125
126
2.11.6
KAPITEL 2. FUNDAMENTALS
Tempor
are Tabelle erstellen
Tempor
are Tabellen k
onnen z.B. f
ur Zwischenberechnungen verwendet werden.
DML Locks werden daf
ur nicht verwendet.
create global temporary table mein_temp
on commit delete rows as
select * from dual
;
insert into mein_temp values (3);
select * from mein_temp;
-- Es wird ein Dateinsatz angezeigt.
commit;
select * from mein_temp;
-- Es wurden keine Zeilen ausgew
ahlt
2.11.7
Eine Tabellenspalte auf UNUSED setzen geht schneller als DROP Spalte. Dies
ist aber als SYS nicht m
oglich.
2.11.8
2.11.9
describe dba_tables;
select * from dba_tables
where table_name = DUAL;
select table_name, tablespace_name from dba_tables
where owner = SYS;
select object_name, created from dba_objects
where object_name like EMPLOYEES;
1. Cluster erstellen.
CREATE CLUSTER scott.off_clu
(
country VARCHAR2(2),postcode VARCHAR2(8)
)
SIZE 500 HASHKEYS 1000
TABLESPACE DATA01
STORAGE(INITIAL 5M NEXT 5M PCTINCREASE 0);
2. Tabellen im Cluster erstellen.
219
216
KAPITEL 3. HIGH-PERFORMANCE-TUNING
V$WAITSTAT
Prozentsatz von Warten auf Zugriff auf einen bestimmten Rollback-SegmentBlock.
select class, count
from v$waitstat
where class
in
(system undo header, system undo block, undo header, undo block)
;
Logische Lesevorg
ange
select sum(value)
from v$sysstat
where name
in (db block gets, consistent gets)
;
Wenn count gr
oer als 1% f
ur irgend eine Class, dann mehr Rollback-Segmente.
3.8.11
Ubung
Undo / Rollback Segments
Ubungen
siehe Seite 312.
2.12. INDIZES
Erstellen eines Funktionsindex: Ein Funktionsindex beinhaltet eine Funktion. Oft ist dies lower(), um Gro- und Kleinschreibung zu ignorieren.
Achtung: Query Rewrite muss vorher gegeben worden sein.
CREATE INDEX scott.funct_ind1
ON scott.emp(lower(ename))
PCTFREE 30
STORAGE(INITIAL 200K NEXT 200K
PCTINCREASE 0
MAXEXTENTS 50)
TABLESPACE indx01
;
Bitmap
Beispiel mit Storage Parametern.
create bitmap index id_dual
on dual (dummy)
pctfree 30 storage(initial 200k next 200k pctincrease 0 maxextents 50)
tablespace testus
;
Diese Werte (initial, next, pctincrease, maxextents) werden in diesem Beispiel
ignoriert, da der Tablespace testus als Local Managed definiert wurde.
2.12.3
Andern
der Storage Parameter eines Index
Die zu
andernden Parameter sind die gleichen wie bei Tabellen. Meist wird
MAXEXTENTS erh
oht.
129
130
KAPITEL 2. FUNDAMENTALS
2.12.4
Index verschieben
3.8.4
Achtung:
1. Angabe von Minextents / Maxextents etc. nur bei DMT m
oglich
2. DMT nur m
oglich, wenn System-TS auch DMT ist
3.8.5
Online-Setzen
2.12.5
Index reorganisieren
3.8.6
Deallocating Space
3.8.7
Partitionierte Indizes m
ussen einzeln mit REBUILD reorganisiert werden.
3.8.8
Offline-Setzen
3.8.9
L
oschen von Rollback Segmenten
3.8.10
COALESCE Index-Zusammenf
uhrung
Wichtige Sichten
V$ROLLSTAT
Um den Index neu zu organisieren kann bei B-Tree-Index COALESCE angewendet werden. Dabei k
onnen Abfragen von Usern, die den Index verwendet,
ausgef
uhrt werden. Wird laut Dozent kaum verwendet (ausser in der Pr
ufung).
Besser ist hier Rebuild Online.
215
212
3.7.6
KAPITEL 3. HIGH-PERFORMANCE-TUNING
2.13. DATENINTENGRITAT
2.13
Datenintengrit
at
2.13.1
Constraint Stati
disable novalidate
Das Constraint wird nicht getestet. Neue und vorhandene Werte k
onnen
gegen die Regeln des Constraint verstossen.
disable validate
Jegliche Anderungen
in der Constraint Spalte sind nicht erlaubt.
enable novalidate
Neue Daten m
ussen den Constraint-Regeln entsprechen. Vorhandene Daten werden aber nicht u
uft.
berpr
3.7.7
enable validate
Sowohl neue Daten als auch vorhandene Daten m
ussen den ConstraintRegeln entsprechen.
Cache-Advice
Gibt Empfehlungen f
ur den Buffer-Cache.
Anschalten
DISABLE
Der Primary Key sollte nicht ausgeschaltet werden, da der entsprechende Index
gel
oscht wird.
Abfragen
select distinct size_for_estimate,estd_physical_reads
from v$db_cache_advice;
Ausschalten
2.13.2
3.7.8
Cache
Bl
ocke werden an der MRU-Seite gecacht. Dies ist sinnvoll bei h
aufigen FullTable-Scan der gleichen Tabelle.
Cache-Hint
SELECT /*+ CACHE(scott.emp) */ empno, ename FROM scott.emp;
Exceptions-Tabelle
133
134
2.13.3
KAPITEL 2. FUNDAMENTALS
Verz
ogerte (deferred) CONSTRAINTs
Die Regel
uberpr
ufung erfolgt erst beim Ende einer Transaktion, z.B. bei COMMIT. Angabe bei CONSTRAINT-Erstellung.
create table test1 (name varchar2(20)
constraint ch_test1 check (name not in Anna)
deferrable initially deferred);
Hier ist die Verz
ogerung m
oglich aber am Anfang deaktiviert.
2.13.4
Ubung
Constraints
Ubungen
siehe Seite 267.
3.7.5
L
osungsans
atze
211
208
KAPITEL 3. HIGH-PERFORMANCE-TUNING
2.15. USER
Anderungen
2.15
User
exec dbms_resource_manager.clear_pending_area();
exec dbms_resource_manager.create_pending_area();
2.15.1
Schema
exec dbms_resource_manager.update_plan_directive
(plan => Plan_1, group_or_subplan => OLTP_USERS, new_cpu_p1 => 70,new_comment=>)
;
exec dbms_resource_manager.submit_pending_area();
Hinweise:
alle Parameter heien jetzt new
Unlimited ist -1
Wichtige Parameter k
onnen mit dem OEM ermittelt werden.
3.6.4
Aktivieren / Deaktiveren
Ein Schema ist eine benannte Sammlung von Objekten. Wenn ein User erstellt
wird, wird auch das gleichnamige Schema erstellt. Das Schema erscheint erst
wenn Objekte in dem Schema angelegt werden. Die Begriffe User und Schema
werden oft gleichwertig benutzt.
2.15.2
Welche Quota f
ur welche Tablespaces?
Welche Profile?
Welche Privilegien?
Welche Rollen?
3.6.5
Weitere Einstellungen
Abfragenl
ange: Wenn gesch
atzte Ausf
uhrungszeit gr
oer ist, dann erfolgt Abbruch.
TABLE mu analysiert worden sein.
Maximale Sessionzahl je Gruppe
Maximale Undo-Gr
oe
3.6.6
Ubung
Resourcen-Plan
Ubungen
siehe Seite 303.
137
138
KAPITEL 2. FUNDAMENTALS
3.6. EINFUHRUNG
IN DEN RESOURCEN-PLAN
3.6.3
2.15.3
exec dbms_resource_manager.create_plan
(plan => Plan_1,comment=>Mein erster Plan)
;
Externe Authentifikation
Das Betriebssystem u
bernimmt die Authentifizierung. Die folgende Variable sollte man nicht
andern, da manche Anwendungen diese Voreinstellung verwenden.
OS_AUTTHENT_PREFIX =OPS$"
create user "OPS$domain\user" identified externally;
Unix-Shell
207
Erstellen
exec dbms_resource_manager.clear_pending_area();
exec dbms_resource_manager.create_pending_area();
exec dbms_resource_manager.create_consumer_group
(consumer_group => OLTP_USERS,comment=>Meine erste Gruppe)
;
exec dbms_resource_manager.create_consumer_group
(consumer_group => ADHOC_USERS,comment=>)
;
exec dbms_resource_manager.create_consumer_group
(consumer_group => BATCH_USERS,comment=>)
;
sqlplus /
2.15.4
Externe Passwort-Authentifizierung
Eine M
oglichkeit der Identifizierung von SYSDBA und SYSOPER (nicht der Benutzer!) ist die der Nutzung einer sogenannten Passwort-Datei. Diese PasswortDatei ist bereits standardm
aig angelegt und liegt unter $ORACLE HOME/dbs.
Der Name der Datei lautet pwdSID.ora . Bitte l
oschen Sie diese Datei auch
zu Versuchszwecken nicht! Wenn Sie die Auswirkungen des Fehlens der Datei
testen m
ochten, verschieben Sie diese an einen anderen Ort.
Um die Nutzung der Passwortdatei einzurichten, ist es notwendig, den Initialisierungsparameter REMOTE LOGIN PASSWORDFILE zu
andern. Normalerweise zeigt dieser den Wert NONE an. F
ur die Nutzung der Passwortdatei muss
er den Wert EXCLUSIVE aufweisen. Dieser Parameter ist nicht dynamisch.
Andern
Sie den Initialisierungsparameter, indem Sie den Befehl
ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;
eingeben. Starten Sie Ihre Instanz neu.
Melden Sie sich nunmehr mit dem Privileg SYSDBA an. Verschieben Sie Ihre Passwortdatei pwdSID.ora an einen beliebigen anderen Ort (den Sie sich
nat
urlich merken). Melden Sie sich nun von Ihrer Datenbank ab und erneut als
SYSDBA an. Ohne Passwortdatei haben Sie nun ein Problem, obwohl Sie u
ber
das Privileg SYSDBA verf
ugen. Eine Meldung, dass Sie nicht u
ber die notwendigen Berechtigungen verf
ugen verdeutlicht Ihnen die unsch
one Situation.
Kopieren Sie die Passwortdatei wieder an Ihren urspr
unglichen Ort. Wenn Sie
neue Benutzer anlegen und Ihnen das Privileg SYSDBA zuweisen, u
bernimmt
die Passwortdatei die Authentifizierung der Benutzer aber nur derer, denen das
Privileg SYSDBA oder SYSOPER zugewiesen wurde. Gibt es keine Passwortdatei, stehen Ihnen die Privilegien SYSDBA und SYSOPER nicht zur Verf
ugung
und k
onnen auch nicht Benutzern zugewiesen werden (unter Privilegien tauchen
sie gar nicht auf). Eine Passwortdatei erstellen Sie auf BETRIEBSSYSTEMEBENE - also nicht unter SQL - mit dem Befehl
exec dbms_resource_manager.create_plan_directive
(plan => Plan_1, group_or_subplan => OLTP_USERS, cpu_p1 => 80,comment=>)
;
exec dbms_resource_manager.create_plan_directive
(plan => Plan_1, group_or_subplan => ADHOC_USERS, cpu_p2 => 80,comment=>)
;
exec dbms_resource_manager.create_plan_directive
(plan => Plan_1, group_or_subplan => BATCH_USERS, cpu_p2 => 10,comment=>)
;
exec dbms_resource_manager.create_plan_directive
(plan => Plan_1, group_or_subplan => OTHER_GROUPS, cpu_p3 => 100,comment=>)
;
exec dbms_resource_manager.submit_pending_area();
exec dbms_resource_manager.create_pending_area();
exec dbms_resource_manager_privs.grant_switch_consumer_group
(grantee_name => ADHOC_1,consumer_group => ADHOC_USERS, grant_option => FALSE)
;
exec dbms_resource_manager.set_initial_consumer_group
(user => ADHOC_1,consumer_group => ADHOC_USERS)
;
204
3.5
KAPITEL 3. HIGH-PERFORMANCE-TUNING
Materialized Views
2.16. PRIVILEGIEN
2.16
Privilegien
Privilegien k
onnen nicht bei der Usererstellung in einem Befehl zugewiesen werden.
2.16.1
System-Privilegien
Verbreitet in Datawarehouses
Verbreitet als Snapshot
ANY
Systemweit in jedem Schema.
3.5.1
Beispiel
select orderid,count(*)
from order_details
group by orderid
;
Nach Erstellen einer Materialized Views ist die Abfragedauer lediglich 0,07 Sekunden.
3.5.2
3.5.3
BUILD
IMMEDIATE
DEFERRED
3.5.4
O7_DICTIONARY_ACCESSIBILITY = FALSE
sofort
nach dem ersten Refresh
2.16.2
REFRESH
COMPLETE
FAST
COMMIT
REFRESH
vollst
andiges Neuerstellen (default)
nur die Ver
anderungen
Bei FAST mu ein Log erstellt werden.
nach jedem Commit
geschieht durch dbms snapshot.refresh(mv1)
Objekt-Privilegien
ON
Der Grant-Befehl muss ein ON haben.
grant select ON anna.annatest to berta;
141
142
KAPITEL 2. FUNDAMENTALS
3.4
Die Weitergabe erfolgt hier mit WITH GRANT OPTION (nicht ADMIN OPTION):
3.4.1
Der Eigent
umer des Schemas hat immer die GRANT OPTION auf Objekte
seines Schemas.
Entfernen von Objekt-Privilegien
revoke select ON anna.annatest from berta;
3.4.2
Stored Outlines
Gespeicherte Ausf
uhrungspl
ane
3.4.3
Das Experiment
Objekt-Privilegien sind kascadierend. Beim Entziehen der Berechtigung von Anna verlieren auch alle User, die Objekt-Berechtigungen von Anna erhalten haben, diese Rechte.
2.16.3
Informationen u
ber Privilegien
2.16.4
Ubung
Benutzerverwaltung
select orderid from order_details where quantity=10;
Ubungen
siehe Seite 269.
Cost-Optimizer entscheidet sich f
ur Full-Scan.
3.4.4
Ubung
Stored Outlines
Ubungen
siehe Seite 291.
3.4.5
Ubung
Otimierungen
Ubungen
siehe Seite 293.
203
200
KAPITEL 3. HIGH-PERFORMANCE-TUNING
3.3
Optimierungen
3.3.1
Access-Methoden
Table-Scan
Rowid-Access
Index-Lookup
Hash Key Access
2.18. AUDITING
2.18
145
Auditing
3.3.2
Join-Methoden
Sort-Merge
Zwei sortierte Haufen
Nested Loops
FALSE deaktiviert
3.3.3
Der Optimierer
Regelbasiert
Kostenbasiert
3.3.4
eher veraltet
aktuell und m
oglichst zu bevorzugen
2.18.1
2.18.2
DD BASE TABLE
SYS.AUD$
Audit trail information stored in
Der Optimierungsmodus
CHOOSE
RULE
ALL ROWS
FIRST ROWS
Cost, wenn Tabellen analysiert sind. Rule, wenn Tabellen nicht analysiert sind.
Es wird immer Rule verwendet.
Cost, optimiert f
ur die R
uckgabe aller Datens
atze der Ergebnismenge.
Cost, optimier f
ur die R
uckgabe des ersten Datensatzes der Ergebnismenge.
Wenn die Ereginisse in die Tabelle SYS.AUD$ gespeichert werden, sollte diese
von Zeit zu Zeit mit TRUNCATE geleert werden.
alter system set AUDIT_TRAIL = DB scope = spfile;
Zum Abfrage dient die View DBA TRAIL.
Andern
in der init.ora oder mit
2.18.3
3.3.5
audit
audit
audit
audit
Auditing aktivieren
146
2.18.4
KAPITEL 2. FUNDAMENTALS
Auditing deaktivieren
3.2.3
Uberpr
ufen der Index-G
ultigkeit
LF ROWS LEN = L
ange aller Datens
atze (LEAF)
DEL LF ROWS LEN = L
ange aller gel
oschte Datens
atze (LEAF)
select (del_lf_rows_len/lf_rows_len)*100 from index_stats;
Ist das Ergebnis gr
oer als 20%. sollte ein Rebuild des Index erfolgen.
3.2.4
Ubung
Index-Verwaltung
Ubungen
siehe Seite 283.
199
196
3.1
3.1.1
KAPITEL 3. HIGH-PERFORMANCE-TUNING
2.20
start /oracle/ora92/rdbms/admin/utlxplan.sql
Weiterleitung von Aufrufen (Calls) vom Client zum Server und zur
uck
Einschalten
Zeichensatz
ubersetzung zwischen dem Zeichensatz des Clients und dem
Zeichensatz der Datenbank
Two-Task Common
Oracle Net Foundation Layer
3.1.2
TKPROF
Das Aktivieren des Tracings erfolgt durch Anpassen des Parameters SQL TRACE
in der init-Datei oder mit
alter system set sql_trace = true;
bzw.
alter session set sql_trace = true;
Client Application Oracle Call Interface (OCI): Die meisten Programmschnittstellen (ADO, ODBC, JDBC etc.) kommunizieren mit Oracle Net
u
ber die OCI-Schicht.
Der Speicherort des Trace-File wird durch den Parameter user dump dest definiert. Die aktuellen Parameter lassen sich anzeigen.
Oracle RDBMS:
show parameters;
Das Trace-File ist schwer lesbar. Es kann ein eine lesbare Datei umgewandelt
werden.
tkprof /oracle/admin/pingudb/udump/pingudb_ora_2404.trc t1.txt
Anmerkung: TIMED STATISTICS sollte auf TRUE gestellt sein.
3.1.3
Der Cursor
Speicherbereich mit
SQL-Anweisung: PARSED, UNPARSED
Ausf
uhrungsplan
Pointer auf die aktuelle Zeile
Oracle Net Foundation Layer: Oracle Net Foundation Layer ist zust
andig
f
ur den Aufbau und die Aufrechterhaltung einer Verbindung zwischen ClientAnwendungen und dem Server. Auf der Client-Seite hat der Oracle Net Foundation Layer folgende Aufgaben:
Auffinden des Standortes des Servers.
Ermitteln ob ein oder mehrere Protokolle an der Verbindung beteiligt sind.
Verarbeiten von Ausnahmen und Interrupts.
Auf der Serverseite arbeitet Oracle Net Foundation Layer zus
atzlich noch mit
dem Listener zusammen. Oracle Net Foundation Layer kommuniziert auch noch
mit Namensdiensten und mit Oracle Advanced Security zusammen, um sichere
Verbindungen zu gew
ahrleisten.
149
150
KAPITEL 2. FUNDAMENTALS
Oracle Protocol Support (OPS): Oracle Protocol Support stellt die Protokollschnittstelle f
ur verschiedene Netzwerkprotokolle zur Verf
ugung:
TCP/IP
TCP/IP mit SSL
Named Pipes
Kapitel 3
LU6.2 IBM
Virtual Interface (VI)
2.21
2.21.1
Der Listener
High-Performance-Tuning
Verbindungsmethoden
Wenn ein Client eine Verbindungsanforderung an einen Server stellt, reagiert
der Listener mit einer der folgenden Aktionen:
Starten eines Server-Prozesses (Spawn) und Weitergeben (Bequeath) der
Verbindung an ihn.
Das Handoff der Verbindung an einen Dispatcher in eine Shared ServerKonfiguration.
Umleiten der Verbindung zu einem Dispatcher oder Server-Prozess (Windoofs).
195
192
2.25.6
KAPITEL 2. FUNDAMENTALS
Automatische Kanalzuweisung
Sie k
onnen den Standardgrad bezugnehmend auf die parallele Ausf
uhrung angeben.
2.22. NAMENSAUFLOSUNG
UNTER ORACLE
2.22
Namensaufl
osung unter Oracle
Damit ein Client sich mit einer Datenbank verbinden kann, muss dieser den
Namen der Datenbank aufl
osen k
onnen. Oracle stellt hierf
ur verschiedene Methoden zur Verf
ugung:
run {
backup datafile 1, 2, 3;
}
In diesem Fall werden drei Kan
ale zugeordnet und f
ur die Sicherung benutzt.
2.25.7
Trial Recovery
2.25.8
Externe Benennung
In kleineren Organisationen wird meist das Local Naming oder Host Naming
verwendet. Bei gr
oeren Organisationsformen wird oft Directory Naming mittels
LDAP-kompatiblen Directory Server eingesetzt.
2.22.1
sqlnet.ora
Welche der Methoden eingesetzt wird, ermittelt Oracle anhand der Datei sqlnet.ora.
# SQLNET.ORA Network Configuration File:
#
/oracle/ora92/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.
NAMES.DEFAULT_DOMAIN = testdb29.de
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH = (TNSNAMES, ONAMES, HOSTNAME)
Gem
a den Einstellungen f
ur NAMES.DIRECTORY PATH w
urde gegenw
artig
als erstes die Namensaufl
osung mit Hilfe von Local Naming, anschlieend
mit Hilfe eines Oracle Name Servers und als letztes durch Hostnaming
durchgef
uhrt werden.
2.22.2
M
oglichkeit w
are es die Konfigurationsdateien manuell zu editieren. Gl
ucklicherweise stellt Oracle ein Tool zur Verf
ugung, welches diese Aufgabe u
bernimmt.
Es handelt sich hierbei um den Net Configuration Assistant. Aufruf:
$ORACLE_HOME/bin/netca
Wenn Sie dieses Tool starten, m
ussen Sie als erstes ausw
ahlen, was Sie machen
m
ochten. Zur Auswahl steht die Konfiguration des Listeners (auf dem Datenbankserver), die Konfiguration von Benennungsmethoden (in der sqlnet.ora), die
Konfiguration des lokalen Net Service Names und das Einrichten eines zentralen
Name-Servers. Beispiel:
1. Konfiguration von lokalen Net Service Name
2. Hinzuf
ugen
3. Oracle 9i-Datenbank
153
154
KAPITEL 2. FUNDAMENTALS
4. Dienstname: testdb29
5. Netzwerkprotokoll: TCP
6. Host-Name: pinguin
Standardport (1521)
7. Verbindungstest
Anmeldenamen: system oder sys
8. Net Service Name: testdb29
2.22.3
Host Naming
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup datafile 1;
backup datafile 2;
backup datafile 3;
}
In diesem Beispiel werden zwar drei Kan
ale zugeordent, es erfolgen jedoch drei
unabh
angige Befehle f
ur die Sicherung
backup datafile 1;
backup datafile 2;
backup datafile 3;
Oracle arbeitet erst eine Anweisung komplett ab, bevor weitere Anweisungen
durchgef
uhrt werden. Folglich ist immer nur ein Kanal zu aktiv. Versuchen wir,
das ganze etwas umzuschreiben:
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup datafile 1, 2, 3;
}
In diesem neuen Skript f
uhrt eine Sicherungsanweisung die Sicherung f
ur die
drei Datendateien durch (BACKUP DATAFILE 1, 2, 3). Folglich sind alle drei
Kan
ale aktiv und k
onnen genutzt werden.
Ahnlich
verh
alt es sich bei der Sicherung einer gesamten Datenbank. Nehmen
wir an, dass eine Datenbank aus 16 Dateien besteht. Sie f
uhren nun folgendes
kleine Skript zur Sicherung der Datenbank aus:
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup database;
}
Auch in diesem Beispiel kann nur ein Kanal genutzt werden, da die Datenbank
als Ganzes in eine Datei gesichert wird. Schreiben wir nun das Ganze etwas um:
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup database filesperset 4;
}
Da in ein Sicherungsset nur vier Dateien eingeschlossen werden k
onnen (FILESPERSET=4), erfolgt die Sicherung in vier Sicherungssets (16 Dateien - >vier
Dateien je Set - >4 Sets). In diesem Fall k
onnen alle Kan
ale benutzt werden,
da in vier Sets gesichert wird.
191
188
KAPITEL 2. FUNDAMENTALS
2.25.3
Der Recovery-Catalog speichert alle Sicherungs- und Wiederherstellungsoperationen und erlaubt neben der Wiederherstellung eine Reihe von n
utzlichen
Analysefunktionen. Der Recovery-Catalog ben
otigt einen eigenen Tablespace.
Diesen Tablespace in der zu sichernden Datenbank zu erstellen w
are ein Fehler.
Im Falle des Crashs der Datenbank w
are auch der Recovery-Catalog nicht mehr
ansprechbar, und damit w
are eine Wiederherstellung nicht mehr m
oglich. Empfehlenswert ist das Erstellen einer eigenen Datenbank f
ur den Recovery-Catalog
und das Sichern dieser Recovery-Catalog-Datenbank mit Hilfe eines Cold- oder
Hot-Backups.
2.22. NAMENSAUFLOSUNG
UNTER ORACLE
2.22.6
Directory Naming
L
ost den Namen eines Datenbankdienstes oder Net Service in einem ConnectDescriptor auf, der in einem zentralen LDAP-kompatiblen Directory-Server gespeichert ist.
2.22.7
Externe Benennung
2.22.8
Recovery-Catalog erstellen
Voraussetzung f
ur das Erstellen eines Recovery-Cataloges ist ein eigener Tablespace. Desweiteren brauchen wir einen Benutzer, der Besitzer dieses RecoveryCataloges ist. Hierf
ur muss sich diesem Benutzer die Rolle RECOVERY CATALOG OWNER,
CONNECT und RESOURCE zugewiesen werden.
1. Erstellen der Catalog-Datenbank (in unserem Beispiel heit diese Datenbank cat). Sie k
onnen hierf
ur den Database Configuration Assistent benutzen.
2.22.9
Ubung
Namensaufl
osung
Ubungen
siehe Seite 271.
create tablespace rman_ts
datafile /rman-katalog/rman_ts01.dbf size 20M
default storage (initial 100K next 100K pctincrease 0)
;
3. Erstellen des RMAN-Users (in unserem Beispiel heit dieser Benutzer
rman).
create user rman identified by rman
default tablespace users
temporary tablespace temp
;
grant connect to rman;
grant ressource to rman;
grant recovery_catalog_owner to rman;
4. Der entsprechende Catalog wird nun erstellt. Dies muss mit Hilfe des Recovery Manager RMAN geschehen. Hierf
ur m
ussen Sie den Recovery Manager starten und sich mit der entsprechenden Catalog-Datenbank verbinden.
rman catalog rman/rman@cat
RMAN> create catalog tablespace users;
5. Die zu sichernde Datenbank oder Datenbanken m
ussen nun registriert
werden. Hierf
ur starten Sie wieder der Recovery Manager RMAN unter
Angabe der Catalog-Datenbank und unter Angabe der Zieldatenbank.
rman catalog rman/rman@cat target internal/oracle@testdb29
RMAN> register database;
157
158
2.23
KAPITEL 2. FUNDAMENTALS
Shared Server
Der Oracle Shared Server wurde aus dem Oracle Multithreaded Server weiterentwickelt. Bei der Multithreaded Server-Konfiguration u
bernimmt ein DispatcherProzess die Zuordnung von Benutzer-Prozessen und Server-Prozessen. Wird eine neue Benutzer-Verbindung zur Datenbank hergestellt, so werden alle Anweisungen dieser Benutzer-Verbindung durch den Dispatcher-Prozess in eine
Anforderungs-Warteschlange (Request-Queue) eingeordnet. Die Server-Prozesse
holen nun die Anweisungen aus der Request-Queue heraus und f
uhren diese
Anweisungen in der Datenbank aus. Das Ergebnis der Anweisung wird in einer Antwort-Warteschlange (Response-Queue) abgelegt, um vom DispatcherProzess an den Benutzerprozess weitergeleitet zu werden. Es kann somit beispielsweise 100 Benutzerprozesse geben, die von lediglich 10 oder 20 Serverprozessen bedient werden.
Erh
alt der Listener eine Anforderung von einem Client f
ur eine Shared-ServerVerbindung, so leitet der Listener die Anforderung an den am wenigsten besch
aftigten Dispatcher weiter. Dieser kommuniziert nun mit dem Client, um eine
Verbindung herzustellen. Diese Vorgehensweise wird als Direct Handoff bezeichnet. Der Client kommuniziert immer mit dem gleichen Dispatcher. Vor Oracle
9i hat der Listener die Adresse des Dispatchers an den Client zur
uckgegeben.
Der Client hat dann die Verbindung initiiert.
Da ein Dispatcher-Prozess nur ein Kommunikationsprotokoll bedienen kann,
brauchen Sie f
ur jedes Kommunikationsprotokoll einen Dispatcher-Prozess. Die
Server-Prozesse starten beim Starten der Instanz.
2.23.1
Connection Pooling
startup;
...
Datenbank mit Mount angeschlossen.
ORA-01157: Datendatei 3 kann nicht identifiziert/gesperrt werden
Siehe DBWR-Trace-Datei.
ORA-01110: Datendatei 3: /oracle/oradata/testdb29/users01.dbf
Wir m
ussen nun die Datendatei mit RMAN wiederherstellen.
1. Im ersten Teil muss wiederum ein Kanal zugeordnet werden:
ALLOCATE CHANNEL s1 TYPE disk FORMAT /backup01/b_%u_%s_%p;
2. Im zweiten Teil muss die Datendatei wiederhergestellt werden:
RESTORE DATAFILE /oracle/oradata/testdb29/users01.dbf;
3. Im dritten Teil m
ussen alle Transaktionen, die seit der Sicherung durch
RMAN durchgef
uhrt wurden, auf diese Datendatei angewendet werden.
RECOVER DATAFILE /oracle/oradata/test/users01.dbf;
Diese Teile m
ussen nunmehr mit RUN zusammengefasst und mit dem RMAN
ausgef
uhrt werden.
RUN {
ALLOCATE CHANNEL s1 TYPE disk FORMAT /backup01/b_%u_%s_%p;
RESTORE DATAFILE /oracle/oradata/test/users01.dbf;
RECOVER DATAFILE /oracle/oradata/test/users01.dbf;
}
Nun versuchen wir, die Datenbank zu o
ffnen und schauen, ob unser Obst wieder
da ist.
alter database open;
select * from obst;
NR OBSTNAME
-------------1 Erdbeeren
2 Kirschen
3 Himbeeren
Automatische Sicherung der Control-Datei
Sie k
onnen die Control-Datei mit Hilfe von RMAN automatisch sichern lassen.
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON
In folgenden F
allen wird dann die Control-Datei gesichert.
1. Nach jeder Copy oder Backup-Anweisung an der RMAN-Eingabeaufforderung.
2. Immer wenn innerhalb eines RUN-Blockes einem Copy- oder BackupBefehl eine anderen Anweisung folgt.
3. Am Ende eines Run-Blockes, wenn die letzte Anweisung ein Copy oder
Backup-Anweisung ist.
187
184
KAPITEL 2. FUNDAMENTALS
2.25
Inkrementelle Sicherung
Ein inkrementelle Sicherung basiert auf einer Ebenen-Struktur. Es werden nur
die Bl
ocke gesichert, die sich seit der letzten Sicherung der gleichen Ebene oder
einer tieferen Ebene ver
andert haben.
Level 0
Vollsicherung
Level 1
Alle Bl
ocke, die seit der letzten Level 1- oder Level 0-Sicherung ver
andert
wurden.
Level 2
Alle Bl
ocke, die seit der letzten Level 2-, Level 1- oder Level 0-Sicherung
ver
andert wurden.
Level 3
Alle Bl
ocke, die seit der letzten Level 3-, Level 2-, Level1- oder Level 0Sicherung ver
andert wurden.
Schauen wir uns das Ganze an einem Beispiel etwas genauer an:
Sie
Sie
Sie
Sie
2.25.1
In diesem Beispiel f
uhren wir die notwendigen Operationen mit Hilfe von SQLPLUS durch.
1. Fahren Sie die Datenbank ordnungsgem
a herunter. Sind noch Benutzer mit der Datenbank verbunden, so wartet SHUTDOWN NORMAL
nat
urlich so lange, bis diese sich abgemeldet haben. Wenn Sie dies vermeiden wollen, so fahren Sie die Datenbank zuerst mit SHUTDOWN IMMEDIATE herunter und anschlieend starten Sie die Datenbank mit STARTUP RESTRICT. Jetzt k
onnen Sie die Datenbank problemlos wieder mit
SHUTDOWN NORMAL herunterfahren. Geben Sie einfach nur SHUTDOWN ein, so wird als Standardwert NORMAL angenommen.
2. Kopieren Sie die Dateien (Datendateien, Controldateien und Redo-LogDateien) in den Ordner /backup01.
3. Starten Sie die Datenbank normal mit STARTUP NORMAL.
Genau genommen ist es ausreichend, wenn Sie eine Control-Datei sichern. Ausschlaggebend hierf
ur ist der Fakt, dass die Controldateien identisch sind und
nur aus Fehlertoleranzgr
unden redundant gehalten werden.
Nat
urlich ist es f
ur einen Administrator nicht u
blich jede Nacht die Sicherung
manuell durchzuf
uhren. Aus diesem Grunde wird an dieser Stelle das oben beschriebene Beispiel mit Hilfe eines Skriptes durchgef
uhrt, welches automatisch
jede Nacht gegen 22:00 Uhr ausgef
uhrt wird. Als Basis der Automatisierung
wird eine Shell-Script-Datei namens cold-backup.sh erzeugt.
# cold-backup.sh
sqlplus "sys/sys@testdb29 as sysdba" @~/sql-scripte/shutdown.sql
cp /oracle/oradata/testdb29/* /backup01
cp /control01/test/control02.ctl /backup01
cp /control02/test/control03.ctl /backup01
sqlplus "sys/sys@testdb29 as sysdba" @~/sql-scripte/startup.sql
Dieses Script ruft SQLPLUS mit der Parameterdatei shutdown.sql auf.
shutdown immediate
startup restrict
shutdown normal
exit
Diese Parameterdatei shutdown.sql f
ahrt die Datenbank mit der Option IMMEDIATE herunter und anschlieend wird die Datenbank normal mit der Einschr
ankung RESTRICT gestartet und normal heruntergefahren. Nun wird SQLPLUS durch den Befehl exit beendet und die Abarbeitung der Befehle in der
cold-backup.sh fortgef
uhrt. Es folgen die eigentlichen Copy-Befehle, gefolgt
vom abschlieenden Aufruf von SQLPLUS mit der Parameterdatei startup.sql.
startup
exit
Default
RMAN> configure default device type disk format /db01/BACKUP/\$U;
Diese Parameterdatei erledigt nichts weiter als das erneute Hochfahren der Datenbank.
161
162
2.24.3
KAPITEL 2. FUNDAMENTALS
OFFLINE-Recovery NOARCHIVELOG
Bei Besch
adigung einer oder mehrerer Datendateien bzw. der gesamten Daten
bank kann nur die komplette Datenbank wiederhergestellt werden. Alle Anderungen, die nach der letzten Sicherung durchgef
uhrt wurden, sind nicht wiederherstellbar.
Fall 1
Nehmen wir einmal an, dass sich alle Transaktionen seit dem letzten ColdBackup noch in den aktuellen Online-Redo-Logs befinden. Dass heit, alle notwendigen Informationen f
ur das Herstellen des Zustandes zum Zeitpunkt des
Besch
adigung sind noch im aktuellen Online-Redo-Log vorhanden. Wenn Sie
wissen wollen, welche der Online-Redo-Log-Dateien die aktuelle Online-RedoLog-Datei ist, so finden Sie das u
ber folgende Abfrage heraus:
select v1.status,v1.sequence#,v1.first_change#,v2.member
from v$log v1,v$logfile v2 where v1.group# = v2.group#
;
STATUS SEQUENCE# FIRST_CHANGE# MEMBER
-----------------------------------------------------------------INACTIVE
232
401561 /oracle/oradata/testdb29/redo01.log
CURRENT
233
401562 /oracle/oradata/testdb29/redo02.log
INACTIVE
231
400998 /oracle/oradata/testdb29/redo03.log
host;
cp /backup01/* /oracle/oradata/testdb29/
exit
recover database until cancel;
...
Log angeben: {<RET=suggested | filename | AUTO | Cancel}
cancel
2.24.12
Ubung
Cold Backup im Noarchive-Log-Modus
Ubungen
siehe Seite 273.
2.24.13
Ubung
Cold Backup im Archive-Log-Modus
Ubungen
siehe Seite 274.
create table big(s1 int) tablespace users;
insert into big values(1);
commit;
Angenommen die Datei users01.dbf wird besch
adigt und Sie ersetzen diese durch
deren Sicherungsdatei. Die Tabelle big samt Inhalt befindet sich selbstverst
andlich nicht in dieser Datei, da die Tabelle big zum Zeitpunkt der Sicherung noch
nicht existierte. Alle notwendigen Informationen f
ur ein Rollforward befinden
sich jedoch im aktuellen Online-Redo-Log (falls kein Log-Switch erfolgte) und
genau das machen wir uns nunmehr zu Nutze.
Als erstes fahren wir die Instanz herunter und kopieren die gesicherte Datei
users01.dbf nach /oracle/oradata/testdb29. Nun fahren Sie die Instanz
normal hoch.
shutdown abort;
host
cp /backup01/users01.dbf /oracle/oradata/testdb29/
exit
startup;
...
2.24.14
Ubung
Control File skripten / wiederherstellen
Ubungen
siehe Seite 277.
183
180
KAPITEL 2. FUNDAMENTALS
INACTIVE
INACTIVE
CURRENT
235
236
237
422305 /oracle/oradata/testdb29/redo01.log
422306 /oracle/oradata/testdb29/redo02.log
442308 /oracle/oradata/testdb29/redo03.log
5. L
oschen der Tabelle products am Montatg 8:30 Uhr.
drop table produkt;
6. Durchf
uhren eines Log-Switches
alter system switch logfile;
Nun bemerken Sie, dass die gel
oschte Tabelle noch gebraucht wird. Sie m
ussen
die Tabelle wieder herstellen. Als erstes stellen Sie die Datenbank von der letzten
Sicherung wieder her.
Angenommen im Augenblick werden die Transaktionen in der Online-Redo-LogDate redo03.log mit der LSN 237 gespeichert. Nun erstellen Sie die Tabelle big
erneut, f
ugen einen Datensatz hinzu und f
uhren anschlieend drei Log-Switches
durch.
create table big(s1 int) tablespace users;
insert into big values(1);
commit;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
shutdown immediate;
host;
cp /backup01/* /oracle/oradata/testdb29/
exit
select v1.status,v1.sequence#,v1.first_change#,v2.member
from v$log v1,v$logfile v2 where v1.group# = v2.group#
;
STATUS SEQUENCE# FIRST_CHANGE# MEMBER
-----------------------------------------------------------------INACTIVE
238
443218 /oracle/oradata/testdb29/redo01.log
INACTIVE
239
443219 /oracle/oradata/testdb29/redo02.log
CURRENT
240
443220 /oracle/oradata/testdb29/redo03.log
Als erstes fahren wir die Instanz9 herunter und kopieren die gesicherte Datei
users01.dbf nach /oracle/oradata/testdb29. Nun fahren Sie die Instanz
normal hoch.
Cancel-basiert
Eine Cancel-basierte Wiederherstellung muss durchgef
uhrt werden, wenn bei
einer Wiederherstellung eine archivierte Redo-Datei fehlt. Es ist dann nunmehr
m
oglich, bis zu dieser Datei wiederherzustellen und anschlieend die Datenbank
mit der Option RESETLOGS zu
offnen.
Wir wollen nun dieses Beispiel einmal praktisch umsetzen. Voraussetzung hierf
ur
ist, dass sich die Datenbank im ArchiveLog-Modus befindet und der ArchiverProzess l
auft.
archive log list;
Im ersten Schritt f
uhren wir eine vollst
andige Sicherung als Cold Backup durch
shutdown immediate;
host;
cp /oracle/oradata/testdb29/* /backup01/
exit
shutdown abort;
host
cp /backup01/users01.dbf /oracle/oradata/testdb29/
exit
startup;
...
Datenbank mit Mount angeschlossen.
ORA-01113: F
ur Datei 3 ist eine Datentr
ager-Recovery notwendig
ORA-01110: Datendatei 3: /oracle/oradata/testdb29/users01.dbf
Wenn wir nun probieren, ein Datentr
ager-Recovery durchzuf
uhren, so fragt
Oracle nach der entsprechenden Datei, in der die Transaktionen drinstehen,
in diesem Fall nach der Dateien mit der LSN 237. Da diese jedoch nicht mehr
vorhanden ist bzw. eine andere LSN hat, schl
agt ein Recovery fehl.
recover datafilfe 3;
...
Log angeben: {<RET=suggested | filename | AUTO | Cancel}
Die einzige M
oglichkeit ist nunmehr ein vollst
andiges Wiederherstellen der Datenbank unter Verlust der Tabelle big.
165
166
KAPITEL 2. FUNDAMENTALS
Fall 4
2.24.11
Ungl
ucklicherweise befinden sich diese Anderungen
nicht mehr in den OnlineRedo-Log-Dateien, so dass eine der weiter oben beschriebenen Methoden hier
leider nicht in Frage kommt. Nun wird die Datei temp01.dbf besch
adigt und
die Datenbank muss wiederhergestellt werden.
Da sich die Transaktionen nicht mehr in den Online-Redo-Log-Dateien befinden, ist zuerst einmal von einer kompletten Wiederherstellung auszugehen. Dies
w
urde jedoch einen Verlust der wichtigen Daten vom Montag 10:00 Uhr bedeuten. Daher ist es m
oglich, hier einen anderen Weg zu w
ahlen. Da sich im
Tablespace temp keine wichtigen Daten befinden, kann dieser gel
oscht und neu
erzeugt werden.
Um dieses Scenario einmal genauer zu betrachten, legen wir wieder die Datenbank testdb29 aus dem vorigen Kapiteln zugrunde. Voraussetzung ist wiederum,
dass ein Cold Backup (angenommen Sonntag 22:00 Uhr) dieser Datenbank existiert. Nun (angenommen Montag 10:00 Uhr) erstellen wir die wichtige Datei
big und f
ullen diese mit Datens
atzen. Leider wird die Datei temp01.dbf im
Laufe des Montags besch
adigt. Ein erneutes Hochfahren der Instanz scheitert
demzufolge. Sie k
onnen die besch
adigte Datei, die das Offnen
der Datenbank
verhindert, mit der Anweisung
Incomplete Recovery
Zeit-basiert
SCN-basiert
Cancel-basiert
Nach dem unvollst
andigen Wiederherstellen der Datenbank sind die OnlineRedo-Log-Dateien nat
urlich nicht mehr brauchbar. Die Datenbank mu mit
ALTER DATABASE OPEN RESETLOGS
ge
offnet werden. Hierdurch werden die Online-Redo-Log-Dateien zur
uckgesetzt,
die anschlieend wieder benutzt werden k
onnen.
Zeit-basiert
l
oschen, anschlieend die Datenbank
offnen, den Tablespace l
oschen und danach
den Tablespace neu erstellen. Nun k
onnen Sie ganz normal weiterarbeiten.
Zusammenfassung
Als Konsequenz des Cold Backup im NOARCHIVE-Log-Modus ergibt sich ein
gravierender Nachteil: Es ist nicht m
oglich ist, alle Daten wiederherzustellen. Es
ist im NOARCHIVE-Modus lediglich m
oglich, die Datenbank bis zum Zeitpunkt
der Sicherung wiederherzustellen. Des weiteren ist es f
ur viele Datenbanken nicht
m
oglich, jede Nacht heruntergefahren zu werden. Als Beispiel seien hier nur die
zahlreichen Datenbanken im Internet genannt.
Anmerkung: Vergessen Sie nicht, bei einem shutdown immediate den angemeldeten Benutzern eine Nachricht zukommen zu lassen, bevor Sie die Datenbank
herunterfahren. Sie werden es Ihnen danken.
shutdown immediate;
host;
cp /oracle/oradata/testdb29/* /backup01
exit
Nehmen wir an, Sie fahren die Datenbank am Montag gegen 8:00 Uhr wieder
hoch. Folgendes passiert dann in folgenden zeitlichen Abst
anden:
1. Erzeugen der Tabelle products am Montag um 8:05 Uhr.
create table produkt(nr int, productname char(10)) tablespace users;
2. Einf
ugen des ersten Datensatzes am Montag um 8:10 Uhr
2.24.4
OFFLINE-Backup ARCHIVELOG
179
176
KAPITEL 2. FUNDAMENTALS
shutdown immediate;
host
rm /oracle/oradata/testdb29/usr2.dbf
exit
cd /oracle/oradata/testdb29/archive
ls -1
TESTT001S00163.ARC
TESTT001S00162.ARC
TESTT001S00161.ARC
7. Jetzt versuchen Sie, die Instanz wieder hochzufahren. Da die Datei usr02.dbf
besch
adigt ist, kann aber die Datenbank lediglich gemountet werden.
startup;
...
Datenbank mit MOUNT angeschlossen.
ORA-01157: Datendatei 7 kann nicht identifiziert/gesperrt werden
Siehe DBWR-Trace-Datei.
ORA-01110: Datendatei 7: /oracle/oradata/testdb29/users02.dbf
2.24.5
OFFLINE-Recovery ARCHIVELOG
Arbeitsschritte:
1. Instanz herunterfahren
2. Alle notwendigen Dateien vom Tape zur
uck kopieren.
8. Nun wird die Datei usr02.dbf aus dem Ordner /backup01 wiederhergestellt. Anschlieend versuchen wir, die Datenbank zu
offnen.
alter database open;
*
Fehler in Zeile 1:
ORA-01113: F
ur Datei 7 ist eine Datentr
ager-Recovery notwendig
ORA-01110: Datendatei 7: /oracle/oradata/testdb29/users02.dbf
9. Wir m
ussen also noch ein Datentr
ager-Recovery durchf
uhren, um die Datenbank wieder wie gewohnt
offnen zu k
onnen
3. startup mount;
4. recover automatic database;
Wenn die Archive-Logs woanders liegen
recover from /backup/ database;
Sollten nun eine oder mehrere Dateien besch
adigt sein, so ist eine vollst
andige
Wiederherstellung problemlos m
oglich. Alle notwendigen Informationen befinden sich in den Online-Redo-Log-Dateien bzw. in den archivierten Redo-LogDateien. Wir werden nun den Verlust der Datendatei users01.dbf simulieren.
2.24.8
BACKUP CONTROLFILE
shutdown immediate;
host
rm /oracle/oradata/testdb29/users01.dbf
exit
startup
...
Datenbank mit Mount angeschlossen.
ORA-01157: Datendatei 3 kann nicht identifiziert/gesperrt werden
Siehe DBWR-Trace-Datei.
ORA-01110: Datendatei 3: /oracle/oradata/testdb29/users01.dbf
Wir stellen nun die Datendatei users01.dbf von der Sicherung wieder her und
versuchen nun erneut, die Datenbank testdb29 zu
offnen.
Recover
host
cp /backup01/users01.dbf /oracle/oradata/testdb29/
exit
alter database open;
*
FEHLER in Zeile 1:
ORA-01113: F
ur Datei 3 ist eine Datentr
ager-Recovery notwendig
ORA-01110: Datendatei 3: /oracle/oradata/testdb29/users01.dbf
shutdown immediate;
-- Control-Dateien kopieren
startup mount;
recover database until cancel using backup control file;
-- Mit CANCEL abbrechen.
alter database open resetlogs;
Wir m
ussen nun die Transaktionen, die seit der Sicherung durchgef
uhrt wurden,
erneut durchf
uhren lassen. Dies wird durch ein Recovery erreicht. Da sich in
unserem Fall die ganze Recovery-Aktion nur auf eine Datendatei bezieht, muss
nat
urlich auch nur diese eine Datendatei durch ein Recovery wiederhergestellt
werden. F
ur das Recovery der Datendatei users01.dbf benutzen Sie folgende
Anweisung:
TO File
Backup von Control-Files
alter database backup controlfile to /backup/control.bkt;
169
170
KAPITEL 2. FUNDAMENTALS
2.24.6
ONLINE-Backup
Ver
anderung bezieht sich auf das Aufzeichnen der Anderungen
in den RedoLog-Dateien. Es wird jetzt nicht mehr lediglich ein After-Image des ver
andernden Datensatzes aufgezeichnet, sondern jeweils ein Before Image des gesamten
Blockes (Oracle-Block nicht Betriebssystem-Block!), in dem sich der ver
anderte Datensatz befindet. Desweiteren wird die SCN zu Beginn des Befehls ALTER
TABLESPACE BEGIN BACKUP in den Headern der einzelnen Datendateien
eingefroren, das heit, bis zum Befehl ALTER TABLESPACE END BACKUP
bleibt diese SCN identisch. Folglich befindet sich in der Sicherung der Datendateien in jedem Falle die SCN, die zu Beginn der Sicherung aktuell war. Diese
Vorgehensweise ist notwendig, da Oracle nicht weiss, zu welchen Zeitpunkt das
Betriebssystem den Block mit dem Header der Datendatei sichert. W
urde die
SCN w
ahrend der Sicherung nicht eingefroren werden, so k
onnte die SCN in
den Datendateien der Sicherung gr
oer als die SCN sein, die zu Beginn von ALTER TABLESPACE BEGIN BACKUP aktuell war. F
ur das korrekte Anwenden der Redo-Log-Eintr
age ist es jedoch zwingend erforderlich, dass die SCN
der gesicherten Datendateien der SCN zu Beginn der Sicherung entsprechen.
2. Als zweites f
uhren wir die eigentliche Sicherung durch
ALTER TABLESPACE user2 BEGIN BACKUP
host
cp /oracle/oradata/testdb29/usr02.dbf /backup01/
exit
ALTER TABLESPACE user2 END BACKUP
3. Nun erstellen wir die Tabelle products im Tablespace user2 und f
ugen die
ersten drei Datens
atze ein.
create table produkt(nr int, productname char(10)) tablespace users;
insert into produkt values(1,Milch);
insert into produkt values(2,K
ase);
insert into produkt values(3,K
ase);
commit;
alter system switch logfile;
archive log list;
Angenommen, dass die n
achste zu archivierende Log-Sequenz die 6 ist,
mu die LSN 5 schon archiviert worden sein. Im Archivierungsorder m
usste diese Datei schon zu finden sein (arc00005.001). Die After-Images der
drei eben eingef
ugten Datens
atze befinden sich demnach in der Datei
arc00005.001.
4. Als viertes werden wir weitere 3 Datens
atze einf
ugen und einen Log-Switch
ausf
uhren.
insert into produkt
insert into produkt
insert into produkt
commit;
alter system switch
archive log list;
values(4,Brot);
values(5,Kekse);
values(6,Mehl);
logfile;
values(7,Tee);
values(8,Saft);
values(9,Nektar);
values(10,Obst);
logfile;
175
172
KAPITEL 2. FUNDAMENTALS
1 Milch
2 K
ase
3 Butter
2 DM
6 DM
10 DM
2K
1 BS Block
4 Brot
5 Wurst
4 DM
14 DM
2K
1 BS Block
6 Sekt
7
Apfel
16 DM
22 DM
2K
1 BS Block
8 Trauben 19 DM
9 Gr
utze 24 DM
2K
1 BS Block
Gegen 12:04 Uhr sichert nun das Betriebssystem den zweiten, dritten und vierten
Betriebssystemblock. Der gesicherte Oracle-Block w
urde zum Zeitpunkt 12:05
Uhr nun folgendermassen aussehen:
1 Milch
2 K
ase
3 Butter
1 DM
3 DM
5 DM
2K
1 BS Block
4 Brot
5 Wurst
4 DM
14 DM
2K
1 BS Block
6 Sekt
7
Apfel
16 DM
22 DM
2K
1 BS Block
8 Trauben 19 DM
9 Gr
utze 24 DM
2K
1 BS Block
Der Oracle-Block ist in sich nicht mehr konistent. Ein Teil der Preise wurde
ver
andert, ein anderer noch nicht. Hierbei spricht man allgemein von einem
Block-Split. Bei einem Recovery w
urden wir vor einem Problem stehen. Aus genau diesem Grund wird in der Online-Redo-Log-Datei bei einer Ver
anderung ein
Before-Image des Blockes aufgezeichnet, also ein Image mit den alten Preisen.
Wird nun die entsprechende Sicherung (mit teilweise gesplitteten Bl
ocken) wiederhergestellt, so ist die SCN ja immer noch die, die zum Zeitpunkt des ALTER
TABLESPACE BEGIN BACKUP (in unserem Beispiel 100) aktuell war. Da
die w
ahrend der Sicherung ver
anderten Oracle-Bl
ocke in den Online-Redo-LogDateien stehen, k
onnen diese beim Wiederherstellen der Sicherung schnell die
inkonsistenten Oracle-Bl
ocke ersetzen.
Nachdem die Sicherung der entsprechenden Datendateien beendet ist, wird der
Hot Backup Modus durch ALTER TABLESPACE END BACKUP wieder aufgehoben. Nachdem der Hot Backup Modus aufgehoben wurde, wird die Checkpoint SCN in den Headern der einzelnen beteiligten Datendateien wieder auf
den aktuellen Stand gesetzt und alles geht seinen gewohnten Gang weiter.
Die Konsequenz dieser Arbeitsweise ist nat
urlich, dass zwischen ALTER TABLESPACE BEGIN BACKUP und ALTER TABLESPACE END BACKUP der
Log-Verkehr zunimmt, sprich die Redo-Log-Dateien nehmen an Gr
oe st
arker
zu als sonst. Folglich sollte man das Hot Backup nur zu Zeiten geringer DMLAktivit
at durchf
uhren, also zu Zeiten, wo wenig eingef
ugt, ge
andert und gel
oscht
wird. Desweiteren sollten Sie jeden Tablespace einzeln sichern, um die Zeit, die
der Tablespace sich im Hot-Backup-Mode befindet, zu minimieren.
Richtig:
173
/backup01/
/backup01/
/backup01/
/backup01/
Falsch:
ALTER TABLESPACE user BEGIN BACKUP;
ALTER TABLESPACE idx BEGIN BACKUP;
HOST;
cp /oracle/oradata/testdb29/usr02.dbf
cp /oracle/oradata/testdb29/usr03.dbf
cp /oracle/oradata/testdb29/idx02.dbf
cp /oracle/oradata/testdb29/idx03.dbf
EXIT
ALTER TABLESPACE user END BACKUP;
ALTER TABLESPACE idx END BACKUP;
/backup01/
/backup01/
/backup01/
/backup01/
F
ur das Wiederherstellen einer Sicherung ben
otigen Sie mindestens alle RedoLog-Dateien, die zwischen ALTER TABLESPACE ... BEGIN BACKUP und
ALTER TABLESPACE ... END BACKUP erzeugt wurden. Dies reicht aber
dann auch nur f
ur ein Incomplete Recovery. F
ur ein Complete Recovery ben
otigen Sie alle Redo-Log-Dateien von Beginn der Sicherung an.
Vorgehensweise beim Hot Backup:
1. Finden Sie heraus, ob sich die Datenbank im ArchiveLog-Modus befindet.
ARCHIVE LOG LIST;
Falls sich die Datenbank noch nicht im ArchiveLog-Modus befindet, so
wechseln Sie in den ArchiveLog-Modus. Hierbei mu die Datenbank gemountet sein:
alter database mount:
alter database archivelog;
archive log start;
alter database open;
2. Da der gesamte Redo-Log-Verkehr f
ur ein sp
ateres Recovery notwendig
ist, mu nun die Online-Redo-Log-Datei (LSN) ermittelt werden, in die
aktuell geschrieben wird.
archive log list;
Angenommen, dass die aktuelle Log Sequenz die Nummer 3 ist. Das heisst,
die LSN 3 ist die erste LSN, die f
ur das sp
atere Wiederherstellen erforderlich ist.
3. Nun versetzen Sie den Tablespace in den Hot Backup Mode.
174
KAPITEL 2. FUNDAMENTALS
1 DM
3 DM
5 DM
2K
1 BS Block
4 Brot
5 Wurst
2 DM
7 DM
2K
1 BS Block
6 Sekt
7
Apfel
8 DM
11 DM
2K
1 BS Block
2.24.7
8 Trauben 9 DM
9 Gr
utze 12 DM
2K
1 BS Block
ONLINE-Recovery
Arbeitsschritte:
1. Instanz herunterfahren
2. Alle notwendigen Dateien vom Tape zur
uck kopieren.
3. startup mount;
4. recover automatic database;
Wenn die Archive-Logs woanders liegen
recover from /backup/ database;
Die Wiederherstellung eines durch ein Hot-Backup gesicherten Tablespaces soll
an einem Beispiel verdeutlicht werden. Nehmen wir an, Sie haben den Tablespace user2 bestehend aus den Dateien usr02.dbf und usr03.dbf mit Hilfe eines
Hot Backups Sonntag 22:00 Uhr in den Ordner /backup01 gesichert. Nehmen
wir weiterhin an, dass am Montag eine Tabelle namens products erzeugt wurde
und in diese Tabelle im Laufe des Montags 1000 Datens
atze eingegeben wurden. Diese 1000 eingef
ugten Datens
atze haben zum Beispiel 3 Log Switches
verursacht. Am Montag abend ist die Datei usr02.dbf besch
adigt und mu wieder hergestellt werden. Um dieses Beispiel zu simulieren, k
onnen wir nat
urlich
nicht einfach so 1000 Datens
atze einf
ugen. Wir f
ugen einfach zu Testzwecken
10 Datens
atze ein und machen jeweils nach drei Datens
atzen einen manuellen
Log-Switch.
1. Als erstes ermitteln wir die erste LSN, die wir ben
otigen.
archive log list;
Angenommen, dass die erste LSN, ist die LSN 5.
1 DM
3 DM
5 DM
2K
1 BS Block
Gegen 12:02 Uhr wird der Preis aller Produkte um 100% erh
oht:
UPDATE products SET unitprice=unitprice*2;
COMMIT;
In diesem Fall werden die entsprechenden Seiten in den Daten-Buffer geladen
und entsprechen ver
andert. Dadurch werden diese Bl
ocke zu Dirty-Blocks und
im Zuge des n
achsten Checkpoints auf der Platte aktualisiert. Nehmen wir an,
dass ein Checkpoint gegen 12:03 Uhr auftrat und die Dirty-Buffers zur
uck in
die Datendateien geschrieben wurden. Folglich sieht der Oracle-Block 12:03 Uhr
folgendermassen aus:
171
168
KAPITEL 2. FUNDAMENTALS
Angenommen, dass sich die After-Images dieser beiden Produkte in der OnlineRedo-Log-Datei mit der LSN 162 befinden. Die ersten beiden Produkte sind
nat
urlich weiterhin in der Online-Redo-Log-Datei mit der LSN 161. Nun f
ugen
wir zwei weitere Produkte hinzu.
select v1.status,v1.sequence#,v1.first_change#,v2.member
from v$log v1,v$logfile v2 where v1.group# = v2.group#
;
STATUS SEQUENCE# FIRST_CHANGE# MEMBER
-----------------------------------------------------------------CURRENT
163
565008 /oracle/oradata/testdb29/redo03.log
INACTIVE
161
564809 /oracle/oradata/testdb29/redo02.log
INACTIVE
162
565003 /oracle/oradata/testdb29/redo01.log
insert into produkt values(5,Waffeln);
insert into produkt values(6,Brot);
commit;
alter system switch logfile;
Angenommen, dass sich die After-Images dieser beiden neuen Produkte in der
Online-Redo-Log-Datei mit der LSN 163 befinden. Die ersten Produkte sind
nat
urlich weiterhin in der Online-Redo-Log-Datei mit der LSN 161 bzw. in der
Online-Redo-Log-Datei mit der LSN 162. Ausschnitt aus den Online-Redo-LogDateien
LSN 161
LSN 162
LSN 163
1
2
3
4
5
6
Milch
K
ase
Butter
Kekse
Waffeln
Brot
TO TRACE
Das Vorhandensein einer aktuelle Version der Control-Datei ist einer der wichtigsten Faktoren bei einer erfolgreichen Wiederherstellung einer Datenbank. Wie
sie wissen, kann man bestimmte Parameter (maxdatafiles, maxlogfiles etc.) nach
dem Erstellen einer Datenbank eigentlich nicht mehr
andern. Nur beim Neuerstellen k
onnen Sie hierf
ur neue Werte angeben. Das Wort eigentlich birgt jedoch in sich doch noch eine M
oglichkeit, dies bei einer bestehenden Datenbank
im Nachhinein zu
andern. Sie m
ussen lediglich die Control-Datei neu erstellen. Da die Syntax zum Neuerstellen der Control-Datei relativ umst
andlich ist,
k
onnen Sie sich die aktuelle Control-Datei skripten lassen. Hierf
ur f
uhren Sie
lediglich folgende Anweisung aus:
alter database backup controlfile to trace;
Das erstellte Skript finden Sie in dem Ordner, der als USER DUMP DEST in
der INI-Datei definiert wurde. In unserem Fall liegt die entsprechende Datei
in /oracle/admin/testdb29/udump. In diesem Skript finden Sie die entsprechende CREATE CONTROLFILE-Anweisung. Folgende Schritte m
ussen Sie
durchf
uhren, um eine neue Control-Datei zu erstellen:
1. Starten Sie die Datenbank im Modus NOMOUNT
2. F
uhren Sie die CREATE CONTROLFILE Anweisung aus.
3. F
uhren Sie gegebenenfalls ein Recover aus.
4. Offnen
Sie die Datenbank.
Oracle empfielt, nach dem Neuerstellen einer Control-Datei eine vollst
andige
Sicherung der Datenbank.
Nun f
ugen wir zwei weitere Produkte hinzu.
2.24.9
Nun m
ussen Sie nur noch ein Recovery durchf
uhren, um den aktuellen Stand der
Datei zu erhalten. Lassen Sie uns ein Beispiel durchspielen. Als Grundlage dient
wiederum unsere Datenbank testdb29 mit dem Tablespace user2, bestehend aus
den beiden Dateien usr02.dbf und usr03.dbf. Wir werden als erstes eine weitere
dritte Datei usr04.dbf hinzuf
ugen.
Angenommen, dass sich die After-Images dieser beiden neuen Produkte in der
Online-Redo-Log-Datei mit der LSN 164 befinden. Die ersten beiden Produkte,
die sich in der Online-Redo-Log-Datei mit der LSN 161 befinden, sind jedoch
nicht mehr verf
ugbar. Diese Online-Redo-Log-Datei wurde u
berschrieben. Da
sich die Datenbank jedoch im Modus ARCHIVELOG befindet, wurden die nicht
aktuellen Online-Redo-Log-Dateien durch den Hintergrundprozess Archiver bereits weggesichert. Sie m
ussten sich wohlbehalten in genau dem Ordner, den wir
in der INIT-Datei als Parameter angegeben haben.
177
178
KAPITEL 2. FUNDAMENTALS
zum Offnen
ben
otigt. Hierf
ur k
onnen wir einfach die Datei erstellen und probieren, die Datenbank erneut zu
offnen.
alter database create datafile /oracle/oradata/testdb29/users04.dbf;
alter database open;
*
FEHLER in Zeile 1:
ORA-01113: F
ur Datei 9 ist eine Datentr
ager-Recovery notwendig
ORA-01110: Datendatei 9: /oracle/oradata/testdb29/users01.dbf
Nat
urlich ist noch ein Datentr
ager-Recovery f
ur die Datei users04.dbf notwendig. Hierf
ur m
ussen alle Redo-Log-Dateien seit Erstellen der besch
adigten Datendatei vorhanden sein. Die notwendigen Transaktionen werden dann auf die
neu erstellte Datendatei users04.dbf angewendet, so dass diese Datei dann den
Stand der besch
adigten Datei hat.
recover datafile /oracle/oradata/testdb29/users04.dbf;
alter database open;
Woher wei aber Oracle, wo die notwendigen anzuwendenden Transaktionen f
ur
die Datei beginnen? Oracle speichert in der Control-Datei die aktuelle SCN beim
Erstellen einer Datei. Ab hier muss dann begonnen werden, die entsprechenden
Transaktionen vorw
arts zu rollen, um f
ur die Datendatei den aktuellen Stand
wiederherzustellen.
Hinweis: Diese Methode funktioniert nur f
ur Datendateien, die erstellt wurden,
nachdem die Datenbank in den ArchiveLog-Modus wechselte.
2.24.10
Recover-M
oglichkeiten
log_archive_start = true
log_archive_dest_1 = "location=/oracle/oradata/testdb29/archive"
log_archive_format = %%ORACLE_SID%%T%TS%S.ARC
Durch den ersten Eintrag wird der Hintergrundprozess Archiver, der die OnlineRedo-Log-Dateien sichert, automatisch gestartet. Durch den zweiten Eintrag
wird das Ziel angegeben, in das die Online-Redo-Log-Dateien gesichert werden
sollen. Durch den dritten Eintrag wird lediglich das Format der gesicherten
Online-Redo-Log-Dateien definiert.
Anschlieend m
ussen Sie die Datenbank im Status MOUNT versetzen und den
Modus in ArchiveLog
andern. Anschlieend kann dann die Datenbank ge
offnet
werden.
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
Wir nehmen an, dass diese Datenbank testdb29 durch ein Offline-Backup ganz
normal gesichert wurde. Der Sicherungsordner sei /backup01. Hier sollte sich
nun eine Sicherung aller Datendateien, Controldateien und Online-Redo-LogDateien befinden. Nun erstellen wir eine Tabelle PRODUKT im Tablespace
USERS und tragen dort zwei Beispielprodukte ein.
select v1.status,v1.sequence#,v1.first_change#,v2.member
from v$log v1,v$logfile v2 where v1.group# = v2.group#
;
STATUS SEQUENCE# FIRST_CHANGE# MEMBER
-----------------------------------------------------------------INACTIVE
160
563628 /oracle/oradata/testdb29/redo03.log
CURRENT
161
564809 /oracle/oradata/testdb29/redo02.log
INACTIVE
159
561580 /oracle/oradata/testdb29/redo01.log
create table produkt(nr int, productname char(10)) tablespace users;
insert into produkt values(1,Milch);
insert into produkt values(2,K
ase);
commit;
alter system switch logfile;
Angenommen, dass sich die After-Images beider Produkte (also die Produkte selber) in der Online-Redo-Log-Datei mit der LSN 161 (current) befinden.
Nach dem Hinzuf
ugen wurde ein Log-Switch ausgef
uhrt. Das bedeutet, dass die
Online-Redo-Log-Datei mit der LSN 161 nicht mehr die aktuelle Online-RedoLog-Datei ist. Nun f
ugen wir zwei weitere Produkte hinzu.
select v1.status,v1.sequence#,v1.first_change#,v2.member
from v$log v1,v$logfile v2 where v1.group# = v2.group#
;
STATUS SEQUENCE# FIRST_CHANGE# MEMBER
-----------------------------------------------------------------INACTIVE
160
563628 /oracle/oradata/testdb29/redo03.log
ACTIVE
161
564809 /oracle/oradata/testdb29/redo02.log
CURRENT
162
565003 /oracle/oradata/testdb29/redo01.log
insert into produkt values(3,Butter);
insert into produkt values(4,Kekse);
commit;
alter system switch logfile;
167
164
KAPITEL 2. FUNDAMENTALS
Nehmen wir an, dassdie LSN 234 noch vorhanden ist. Demnach ist auch noch
die Transaktion vorhanden und eine Wiederherstellung sollte m
oglich sein.
Wie im oberen Beispiel nehmen wir an, die Datei users01.dbf wird besch
adigt
und Sie ersetzen diese durch deren Sicherungsdatei. Die Tabelle big samt Inhalt
befindet sich selbstverst
andlich nicht in dieser Datei, da die Tabelle big zum
Zeitpunkt der Sicherung noch nicht existierte. Alle notwendigen Informationen
f
ur ein Rollforward befinden sich jedoch in einer der Online-Redo-Log-Dateien
(nicht jedoch in der aktuellen Online-Redo-Log-Datei) und genau das machen
wir uns nunmehr zu Nutze.
Als erstes fahren wir die Instanz herunter und kopieren die gesicherte Datei
users01.dbf nach /oracle/oradata/testdb29. Nun fahren Sie die Instanz
normal hoch.
shutdown abort;
host
cp /backup01/users01.dbf /oracle/oradata/testdb29/
exit
startup;
...
Datenbank mit Mount angeschlossen.
ORA-01113: F
ur Datei 3 ist eine Datentr
ager-Recovery notwendig
ORA-01110: Datendatei 3: /oracle/oradata/testdb29/users01.dbf
Laut Ausgabe ist f
ur die Datei 3 ein Datentr
ager-Recovery notwendig. Alle
notwendigen Transaktionen befinden sich in der Online-Redo-Log-Datei mit der
LSN 234, die noch vorhanden ist (redo03.log).
recover datafilfe /oracle/oradata/testdb29/users01.dbf;
select * from big;
S1
--------1
Ale Ergebnis zeigt sich hier, dass bei Vorhandensein der notwendigen Transaktionsdaten eine Wiederherstellung auch im NOARCHIVELOG m
oglich ist.
Fall 3
Abschlieend steht nat
urlich die Frage im Raum, was im Falle eines Nichtvorhandenseins der notwendigen Transaktionen passiert. Um diesen Fall zu testen,
m
ussen lediglich mindestens 3 Log-Switches erfolgen. Somit wird bei drei LogGruppen die entsprechenden Transaktionen in jedem Fall u
berschrieben bzw.
als u
uhren wir dieses Scenario nun kurz durch.
berschreibbar markiert. F
Als initialer Schritt wird wiederum die Tabelle big gel
oscht (um den Ursprungszustand wieder herzustellen) und ein Cold-Backup erzeugt. Nun m
ussen Sie wieder herausfinden, welches Online-Redo-Log die aktuelle Online-Redo-Log-Datei
darstellt. Hierf
ur k
onnen wir wieder die oben beschrieben Abfrage benutzen.
select v1.status,v1.sequence#,v1.first_change#,v2.member
from v$log v1,v$logfile v2 where v1.group# = v2.group#
;
STATUS SEQUENCE# FIRST_CHANGE# MEMBER
------------------------------------------------------------------
Im zweiten Schritt starten fahren wir die Instanz wieder hoch und schauen uns
das aktuelle Log an. Wir erzeugen dann eine Tabelle mitarbeiter im Tablespace
users und f
ugen dort zwei Datens
atze ein. Diese Datens
atz stehen demnach im
Log Nummer 9.
startup;
archive log list;
create table mitarbeiter(MiNr int, MiName varchar2(30)) tablespace users;
insert into mitarbeiter values(1,Anna);
insert into mitarbeiter values(2,Berta);
commit;
Jetzt f
uhren wir zwei Log-Switches durch.
alter system switch logfile;
alter system switch logfile;
archive log list;
Durch den Archiver-Prozess wurden folgende Logs gesichert.
ls -1
ARC00007.001
ARC00008.001
ARC00009.001
ARC00010.001
Wir f
ugen zwei Datens
atze ein. Diese Datens
atz stehen demnach im Log Nummer 11.
archive log list;
insert into mitarbeiter values(3,Carla);
insert into mitarbeiter values(4,Doris);
commit;
Jetzt f
uhren wir zwei Log-Switches durch.
alter system switch logfile;
alter system switch logfile;
archive log list;
Durch den Archiver-Prozess wurden folgende Logs gesichert.
ARC00007.001
ARC00008.001
ARC00009.001
ARC00010.001
ARC00011.001
ARC00012.001
Wir f
ugen zwei wietere Datens
atze ein. Diese Datens
atz stehen demnach im Log
Nummer 13.
archive log list;
insert into mitarbeiter values(5,Emil);
insert into mitarbeiter values(6,Frank);
commit;
181
182
KAPITEL 2. FUNDAMENTALS
Jetzt f
uhren wir zwei Log-Switches durch.
alter system switch logfile;
alter system switch logfile;
archive log list;
Zusammengefasst stehen folgende Redo-Eintr
age in folgenden archivierten Logs.
Log Nummer 9
Log Nummer 11
Log Nummer 13
host;
cp /backup01/* /oracle/oradata/testdb29/
exit
recover datafile 7;
...
ORA-00289: Vorschlag: /oracel/ora92/rdbms/ARC00009.001
Log angeben: {<RET=suggested | filename | AUTO | Cancel}
auto
Wiederherstellung nicht mehr erforderlich.
...
ORA-00308: Archive-Log /oracel/ora92/rdbms/ARC00011.001
kann nicht ge
offnet werden.
Oracle hat hier nach den archivierten Log-Dateien gefragt, die anzuwenden sind.
Es wurde hierbei AUTO angegeben, um Oracle zu veranlassen, die archivierten
Logs selbst
andig zu ermitteln und anzuwenden. Leider fehlt das archivierte Log
arc00011.001 (mit unserer Carla und unserer Doris).
Versuchen wir ein Cancel-basiertes Recovery der Datenbank mit der OfflineSicherung der Datei users01.dbf. Wir geben hier nicht AUTO ein, sondern
best
atigen jedes archivierte LOG mit ENTER bis zum achivierten Log arc00011.001.
Dort geben wir CANCEL ein, um die Sicherung anzubrechen.
163
160
KAPITEL 2. FUNDAMENTALS
2.24
Backup / Recovery
2.24.1
DB Files u
ufen
berpr
disk Festplatte
sbt Tape
Per Default wird in $ORACLE HOME/database gespeichert.
Dauerhafte Konfigurationseinstellungen anzeigen
Shell-Tool ist g
unstig f
ur Scripte zur Uberpr
ufung des Backups.
dbv file=SYSTEM01.DBF
Anzeige ben
otigter Redo-Logs.
2.24.2
OFFLINE-Backup NOARCHIVELOG
Beim OFFLINE-Backup werden alle notwendigen Dateien mit Hilfe von Betriebssystembefehlen an einen Sicherungsort kopiert. Dieser Sicherungsmechanismus, auch h
aufig COLD BACKUP genannt, setzt voraus, dass die Datenbank
ordnungsgem
a heruntergefahren wurde. Oracle empfiehlt, m
oglichst jede Woche ein OFFLINE-Backup durchzuf
uhren. Dies ist nat
urlich nur dann m
oglich,
wenn Ihre Datenbank nicht 24 Stunden an 7 Tagen in der Woche ge
offnet sein
muss. F
ur diese Zwecke gibt es eine Reihe weiterer Sicherungsmethoden, die in
den folgenden Kapiteln besprochen werden.
Stellen Sie sich vor, Sie haben eine Datenbank namens testdb29, welche sich
im NOARCHIVELOG-Modus befindet. Die Control-Dateien haben Sie auf drei
Platten verteilt, um im Crash noch eine Control-Datei zur Verf
ugung zu haben.
Sie planen, ein OFFLINE-Backup jede Nacht durchzuf
uhren. Die Sicherung soll
in den Ordner /backup01 gespeichert werden. Von dort aus werden dann die
darin enthaltenen Dateien auf Band gesichert.
Datenbankname: testdb29
Controldatei1
/oracle/oradata/testdb29/control01.ctl
Controldatei2
/control01/testdb29/control02.ctl
Controldatei3
/control02/testdb29/control03.ctl
Datendateien:
/oracle/oradata/testdb29/users01.dbf
/oracle/oradata/testdb29/system01.dbf
/oracle/oradata/testdb29/temp01.dbf
/oracle/oradata/testdb29/rbs01.dbf
/oracle/oradata/testdb29/idx01.dbf
Redo-Log-Dateien /oracle/oradata/testdb29/redo01.log
/oracle/oradata/testdb29/redo02.log
/oracle/oradata/testdb29/redo03.log
Sicherungsort:
/backup01
2.25.2
Neben der M
oglichkeit, RMAN-Daten in einem Recovery-Catalog zu speichern,
k
onnen Sie auch RMAN-Daten in den Control-Dateien speichern. Hierbei ist es
von enormer Bedeutung, dass Sie Ihre Control-Dateien u
ber mehrere Platten
verteilt haben. Es muss immer eine aktuelle Control-Datei vorhanden sein. Falls
alle Control-Dateien verloren gegangen sein sollten, und Sie trotzdem die Datenbank wiederherstellen m
ussen, so k
onnen Sie auch von einer Sicherung der
Control-Datei die Wiederherstellung per RMAN initiieren.
In unserem Beispiel gehen wir davon aus, dass die Datenbank testdb29 mit dem
RMAN gesichert werden muss. Als erstes starten wir hierf
ur den RMAN.
rman target sys/sys@testdb29 nocatalog
RMAN>
Nun wird die eigentliche Sicherung der Datenbank durchgef
uhrt. Hierf
ur wird
als erstes ein Kanal zugewiesen.
185
186
KAPITEL 2. FUNDAMENTALS
Views
select
select
select
select
*
*
*
*
from
from
from
from
V$SESSION;
V$DISPATCHER;
V$QUEUE;
V$SHARED_SERVER;
159
156
KAPITEL 2. FUNDAMENTALS
Uber
die tnsnames.ora kann der Client ermitteln, auf welchem Rechner sich
die Datenbank befindet und u
uhrt
ber welchen Port die Kommunikation durchgef
werden soll.
testdb29.testdb29.de =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = pinguin)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = testdb29)
)
)
Die Datenbank befindet sich auf einem Server namens pinguin. Sie k
onnen hier
auch anstelle des Namens eine IP-Adresse eingeben. Die Verbindung zur Daten
bank wird u
connect data werden die Verber den Port 1521 hergestellt. Uber
bindungsdaten festgelegt. In unserem Beispiel handelt es sich um eine dedizierte
Verbindung und der ServiceName der Datenbank auf dem Server ist testdb29.
Der lokale NetServiceName ist in diesem Beispiel testdb29.testdb29.de. Das bedeutet, dass der Client bei der Verbindung dies als ServiceName eingeben mu.
sqlplus system/[email protected]
Die korrekte Namensaufl
osung k
onnen Sie mit dem Programm tnsping testen.
Hier wird nun u
uft, ob der ServiceName aufgel
ost werden kann und das
berpr
entsprechende Port offen ist.
tnsping testdb29.testdb29.de
...
OK
2.22.5
189
190
KAPITEL 2. FUNDAMENTALS
2.22. NAMENSAUFLOSUNG
UNTER ORACLE
(ORACLE_HOME = /oracle/ora92)
(SID_NAME = testdb29)
)
)
Uberpr
ufen, ob die Sicherungsdateien existieren.
crosscheck backup;
lsnrctl stop
lsnrctl start
2.25.4
2.22.4
Local Naming
Local Naming ist die einfachste und wohl am meisten verbreitete Methode der
Namensaufl
osung eines Clients.
Konfiguration auf der Server-Seite
H
aufig tritt der Fall ein, dass eine Wiederherstellung aufgrund eines Plattenausfalls notwenig wird. Hierbei ist zu beachten, dass bei einer normalen Wiederherstellung die Dateien immer an ihrem Originalort wiederhergestellt werden. Wird
die fehlende Platte jedoch nicht ersetzt, so mu die dort gespeicherte Datei oder
Dateien an einem anderen Ort wiederhergestellt werden.
sqlnet.ora :
definiert.
listener.ora
Schauen wir uns das an einem kleinen Beispiel etwas genauer an. Wir gehen
von einer Datenbank aus, bei der sich die Datendatei users01.dbf auf /daallt nunmehr aus und Sie m
ochten
ta 01/users01.dbf befindet. Diese Platte f
die Datendatei users01.dbf auf der /data 02/ wiederherstellen.
run {
SET NEWNAME FOR DATAFILE /data_01/users01.dbf TO /data_02/users01.dbf ;
RESTORE DATAFILE x;
RECOVER DATAFILE x;
}
Durch set newname wird f
ur die datei /data 01/users01.dbf der neue Speicherort /data 02/users01.dbf festgelegt. Anschlieend wird diese Datei wiederhergestellt (schon an dem neuen Speicherort) und alle notwendigen Transaktionen
angewendet. Danach kann die Datenbank wieder normal ge
offnet werden.
2.25.5
Kan
ale k
onnen aus Geschwindigkeitsgr
unden parallele Operationen durchf
uhren.
Schauen wir uns hierf
ur als erstes folgendes Beispiel an:
155
152
KAPITEL 2. FUNDAMENTALS
tnsping
Mit dem Kommandozeilentool tnsping kann man die Namensaufl
osung und das
Port testen.
tnsping testdb29
2.25.9
2.25.10
Retention Policy
2.25.11
Ubung
Vollsicherung mit RMAN
Ubungen
siehe Seite 278.
193
194
KAPITEL 2. FUNDAMENTALS
statisch
bei Oracle8 und fr
uheren Releases
Ben
otigt Konfiguration in listener.ora
Erforderlich f
ur Oracle Enterprise Manager und andere Dienste
listener.ora
# LISTENER.ORA Network Configuration File:
# /oracle/ora92/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = pinguin)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /oracle/ora92)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = testdb29)
(ORACLE_HOME = /oracle/ora92)
(SID_NAME = testdb29)
)
)
lsnrctl
Mit dem Befehlszeilenprogramm lsnrctl k
onnen Sie beliebiege Listener star
ten und stoppen und eine Reihe weitere Uberpr
ufungsoperationen durchf
uhren.
Wenn Sie einen Listener starten wollen so k
onnen Sie start listenername
eingeben. Geben Sie anstelle des Listenernamen nichts ein, wird der DefaultListener namens listener benutzt.
lsnrctl stop
lsnrctl start
help zeigt alle lsnrctl-Befehle an.
lsnrctl
LSNRCTL> help
...
Mit SET ist es m
oglich, Parameterwerte innerhalb des tnslsnr zu
andern.
151
148
KAPITEL 2. FUNDAMENTALS
Directory Service
3.1.4
Das Parsing
Oracle Internet Directory (OID) ist dem LDAP (Version3) kompatibles Directory Service von Oracle.
Skalierbarkeit
3.1.5
Was passiert w
ahrend des Bindings?
Sicherheit
Advanced Security:
Oracle.
Verschl
usselung (DES, RSA, 3DES)
Berechtigungspr
ufung (SSL, Kerberos, Radius, CyberCafe)
Datenintigrit
at (MD5, SHA)
3.1.6
Firewalls: Oracle unterst
utzt die Produkte f
uhrender Anbieter von Firewalls.
Oracle Net Application Proxy Kit erm
oglicht es Firewall-Anbietern, Verbindungen zu Oracle Umgebungen zu unterst
utzen.
Was passiert w
ahrend des Executing / Fetch?
DML = Execute
Verf
ugbarkeit
SELECT = FETCH
Array-Fetch = mehr als eine Zeile
Result-Set = Ergebnismenge
3.1.7
Ubung
Tools zum Performance-Tuning
Ubungen
siehe Seite 279.
197
198
3.2
KAPITEL 3. HIGH-PERFORMANCE-TUNING
3.2.1
2.19
Netzwerkbetrieb Ubersicht
2.19.1
Bei 1-Tier gibt es nur ein Host auf dem die Anwendung l
auft.
2.19.2
einen reverse key Index in einen B-tree Index und vice versa umzuwandeln.
2.19.3
ALTER INDEX scott.ord_region_id_idx REBUILD TABLESPACE indx02;
3.2.2
N-Tier
Zwischen Clients und Server wird ein Middle-Tier (Applikationsserver) installiert. Das Middle-Tier kann den Server entlasten. Die Clients k
onnen unterschiedliche Protokolle verwenden, da der Applikationsserver dies f
ur den Server
in ein Protokoll umsetzt. Das Middle-Tier kann Agent-Dienste f
ur die Clients
bereitstellen.
2.19.4
Typisches Beispiel ist das Internet. Es werden unterschiedliche Betriebssysteme, mit unterschiedlichen Protokollen, weltweit vernetzt. Jede Complex Network Architecture ist N-Tier aber nicht jedes N-Tier ist eine Complex Network
Architecture.
2.19.5
Oracle9i L
osungen f
ur den Netzwerkbetrieb
Konnektivit
at
Rebuild
Protokollunabh
angigkeit
Umfassende Plattformunterst
utzung
Integrierte GUI-Verwaltungswerkzeuge
Vielf
altige Konfigurationsoptionen
Eine Umwandlung von B-Tree in Bitmap und vice versa ist nicht m
oglich.
Es wird Speicherplatz f
ur ein Duplikat in einem tempor
aren Segment gebraucht.
Eine Sortierung ist nicht erforderlich.
Der Index ist immer verf
ugbar.
Rebuild ist immer m
oglich.
147
144
2.17.4
KAPITEL 2. FUNDAMENTALS
Kennwort gesch
utzte Rollen
2.17.5
Rolle entziehen
2.17.6
3.3. OPTIMIERUNGEN
3.3.6
3.3.7
Experiment 1
Voraussetzung:
Existenz der Tabelle order details und set autotrace on exp;
Quantity = 10 bei 50% der Datens
atze
Quantity = 20 bei 50% der Datens
atze
Rolle l
oschen
Auf Quantity steht ein Index >Wenig selektiv.
2.17.7
grant Zuweisen
3.3.8
2.17.8
Informationen u
ber Rollen
Experiment 2
3.3.9
Experiment 3
201
202
3.3.10
KAPITEL 3. HIGH-PERFORMANCE-TUNING
Ubung
Optimierung
Ubungen
siehe Seite 287.
2.17. ROLLEN
2.17
Rollen
2.17.1
Rolle erstellen
2.17.2
Privelegien zuweisen
2.17.3
143
140
KAPITEL 2. FUNDAMENTALS
3.5.5
Voraussetzungen
Berechtigung:
grant CREATE MATERIALIZED VIEW to user;
Analysieren der Tabelle f
ur den Cost-Based Optimizer.
2. L
oschen der Windows-Gruppe ORA DBA
analyze table tabelle compute statistics;
Die erste Variante ist sicherlich der beste Weg. M
ussen Sie Windows verwenden,
dann bleibt Ihnen nur die L
oschung der Windows-Gruppe Oracle DBA.
Active Directory
Domain
Users
ORA_DBA -- hau weg
Parameter
alter session set query_rewrite_enabled=true;
2.15.6
Quotas
Default = 0
Deshalb sollten, ausser auf Undo- und Temporary-Tablespace, Quotas immer
angeben werden.
Quota
andern
stale tolerated
enforced
Hilfreiche Einstellungen
set timing on;
set autotrace on exp;
3.5.6
Ubung
Materialized Views
Ubungen
siehe Seite 299.
2.15.7
User l
oschen
2.15.8
Informationen u
ber User
DBA USERS
describe dba_users;
select username,default_tablespace from dba_users;
DBA TS QUOTAS
select * from DBA_TS_QUOTAS where username =anna;
205
206
3.6
KAPITEL 3. HIGH-PERFORMANCE-TUNING
Einfu
hrung in den Resourcen-Plan
2.15. USER
3.6.1
Der Parameter password = gibt das Kennwort an, das in der Datei gespeichert
wird. Die Wahl des Kennwortes ist beliebig (also z.B. password=geheim). Dieses
Passswort wird nicht bei der Anmeldung eingegeben. Es wird nur intern verwendet. Der Parameter entries = legt fest, wie viele Passworteintr
age in diese
Datei vorgenommen werden k
onnen. In unserem Beispiel liegt die Obergrenze
bei 20. Mehr SYSDBAs oder SYSOPERs darf es also nicht geben.
Beispiel
Bitte planen Sie Ihre Passwortdatei so, dass alle Benutzer hineinpassen, die als
SYSDBA oder SYSOPER fungieren sollen. Eine Erweiterung der Passwortdatei
um weitere Eintr
age ist n
amlich nicht m
oglich. Sollten die m
oglichen Eintr
age
(entries) nicht ausreichen, m
ussen Sie eine neue Datei erstellen! Bitte beachten
Sie auch, dass dann alle SYSDBA und SYSOPER-Privilegien neu zugewiesen
werden m
ussen. Die bereits bestehenden Privilegien verlieren ihre G
ultigkeit.
LEVEL 1
OLTP erh
alt 80% der CPU
LEVEL 2
ADHOC USERS erhalten von den restlichen 20% insgesamt 80%, also
16%.
2.15.5
LEVEL 2
BATCH USERS erhalten von den restlichen 20% insgesamt 10%, also 2%.
SQLPLUS Unix
LEVEL 3
OTHER USERS erhalten von den restlichen 2% insgesamt 100%, also 2%.
Anmerkung:
Gilt nur, wenn die jeweils vorigen Level Ihre Grenze ausgesch
opft haben. Wenn
OLTP im Augenblick gar nichts machen, geht nat
urlich 80% der gesamten CPU
an die ADHOC USER.
Ressourcen Gruppen
OLTP USERS
BATCH USERS
ADHOC USERS
OTHER GROUPS
3.6.2
Level 1 CPU
80%
0%
0%
0%
Level 2 CPU
0%
10%
80%
0%
Praktische Umsetzung
Level 3 CPU
0%
0%
0%
100%
Durch Anweisungen.
139
136
KAPITEL 2. FUNDAMENTALS
Profile l
oschen
3.7
3.7.1
2.14.2
Resource Management
209
Write-List
LRU-List
3.7.2
Latches
3.7.3
Anzeige User-Stati
(OPEN, EXPIRED LOCKED, ...)
Recycled
Default
Shared Pool
Library Cache
Java Pool
Large Pool
Redo-Log-Buffer
210
KAPITEL 3. HIGH-PERFORMANCE-TUNING
3.7.4
2.14
2.14.1
Profile
Profile erstellen
create profile p_nutzer
limit failed_login_attempts 3
password_lock_time 2/24
password_life_time 30
password_grace_time 5
password_reuse_time 366
password_reuse_max 1
;
Beispiel: Ein User versucht sich f
unf mal mit falschen Passwort einzuloggen. Wie
lange muss er warten, bis er einen neuen Versuch starten kann?
ALTER PROFILE DEFAULT LIMIT
PASSWORD_LIFE_TIME 60
PASSWORD_GRACE_TIME 10
PASSWORD REUSE TIME 1800
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LOCK_TIME 1/1440
PASSWORD_VERIFY_FUNCTION verify_function
;
Er muss eine Minute warten. PASSWORD LOCK TIME wird in Tagen angegeben. Ein Tag hat 1440 Minuten (60*24).
Profile zuweisen
Physical Reads, DB Block Gets und Consistent Gets stehen in V$SYSSTAT seit
Instanzstart.
Cache Miss Ratio = physical reads/(db block gets + consistent gets)
Cache Hit Ratio = 1-physical reads/(db block gets + consistent gets)
Formel:
Profile k
onnen nicht anderen Profilen und Rollen zugewiesen werden. Eine Zuweisung hat keine Auswirkunge auf aktuelle Sessions.
select 1-value/
(
select sum(value)
from v$sysstat
where lower(name) in (consistent gets,db block gets)
)
from v$sysstat
where lower(name) in (physical reads)
;
135
132
KAPITEL 2. FUNDAMENTALS
3.7.9
Infos u
ber die Spalten
Gute Kandidaten f
ur KEEP-Pool:
Kleine, h
aufig frequentierte Objekte auf die mit Full Table Scan FTS zugegriffen
wird.
2.12.11
Ubung
Index
Ubungen
siehe Seite 265.
Guidelines
Gute Kandidaten f
ur RECYCLE-Pool:
Groe, selten frequentierte Objekte.
Gute Kandidaten f
ur DEFAULT-Pool:
Alle anderen Objekte.
3.7.10
Ubung
Datenbank-Tuning
Ubungen
siehe Seite 306.
213
214
3.8
KAPITEL 3. HIGH-PERFORMANCE-TUNING
3.8.1
Zweck
Read Consistency
Transaction Rollback
Transaction Recovery
3.8.2
2.12. INDIZES
2.12.6
Index logisch u
ufen
berpr
ANALYZE erzeugt die View index stats, die dann abgefragt werden kann.
analyze index id_dual validate structure;
select name, blocks, pct_used, distinct_keys lf_rows, del_lf_rows
from index_stats
;
NAME
BLOCKS PCT_USED LF_ROWS DEL_LF_ROWS
--------------------------------------------------ID_DUAL
32
1
1
0
Wenn viele gel
oschte Leafs (DEL LF ROWS >10%) angezeigt werden, sollte
neu organisiert werden.
OLTP
Kleine, aber viele Rollbacksegmente
Ein RBS f
ur je 4 Transaktionen
2.12.7
Statistiken u
ber die Nutzung des Index
Ab Oracle9i k
onnen Statistiken u
ber die Nutzung eines Index erzeugt werden.
onnen
Diese werden in V$OBJECT USAGE angezeigt. Nicht genutzte Indizes k
so erkannt und gel
oscht werden.
Batch
Monitoring starten
3.8.3
Undo Management
Voraussetzung: Undo-Tablespace(s).
2.12.8
Informationen u
ber Indizes
Automatic
alter system set undo_management=auto | manual scope=spfile;
2.12.9
Index l
oschen
Bevor man groe Datenmengen importieren will, sollte man den Index l
oschen
und nach dem Import neu erstellen. Dies geht schneller. Automatisch erstellte Indizes k
onnen erst nach dem Deaktivieren der entsprechenden Constraints
gel
oscht werden.
L
oschen Sie Indizes, die selten gebraucht werden und erstellen Sie diese kurz vor
Gebrauch.
drop index id_dual;
2.12.10
Manual
alter system set undo_management=manual scope=spfile;
Views
USER INDEXES
Infos u
ber Indizes
131
128
KAPITEL 2. FUNDAMENTALS
Reverse Key Index: Beim Erzeugen eines Reverse Key Index wird der Wert
in der Key-Spalte umgedreht.
3.9. STATSPACK
3.9
StatsPack
StatsPack l
ost utlbstat und utlestat ab.
12345 --> 54321
12346 --> 64321
12347 --> 74321
Der Reverse Key Index wird sehr selten verwendet. Meist um bei Sequenzen
mit kontinuierlich folgenden Werten ein Verteilen auf unterschiedliche Bl
ocke
zu erreichen.
Beachte: Wenn Applikationen Wertebereiche festlegen, kann der Reverse Key
Index nicht verwendet werden.
Bitmap
3.9.1
start
...
Geben
...
Geben
...
Geben
Installation
/oracle/ora92/rdbms/admin/spcreate.sql
Sie einen Wert f
ur perfstat_password ein: pinguin
Sie einen Wert f
ur default_tablespace ein: TOOLS
Sie einen Wert f
ur temporary_tablespace ein: TEMP
-- connect perfstat/&&perfstat_password
connect perfstat/pinguin@testdb29
G
unstig f
ur Warehousing.
Sinnvoll bei DSS
NOT NULL kann indiziert werden.
2.12.2
Index erstellen
start /oracle/ora92/rdbms/admin/spdrop.sql
3.9.2
Snapshot erzeugen
connect perfstat/pinguin@testdb29
execute statspack.snap
Empfehlungen
3.9.3
Snapshots abfragen
3.9.4
H
ohrere Geschwindigkeiten wird bei groen Indizes durch NOLOGGING
(kein Redo) erreicht.
start /oracle/ora92/rdbms/admin/spreport.sql
3.9.5
Bericht erzeugen
Ubung
StatsPack
Ubungen
siehe Seite 312.
B-Tree
Normal
create index id_dual on dual (dummy)
tablespace testus;
Der B-Tree ist der Default Index und braucht daher nicht angegeben zu werden.
217
218
KAPITEL 3. HIGH-PERFORMANCE-TUNING
3.10
3.10.1
Table
Cluster
Index-organized Table
2.12. INDIZES
2.12
Indizes
Ein Index ist eine Baumstruktur, die einen direkten Zugriff auf ein Datensatz
einer Tabelle erm
oglicht. Indizes solten immer in einem separaten Tablespace
gespeichert werden, der auf einer separaten Platte liegen sollte.
Grouped
3.10.2
Clusters
Ordered
2.12.1
Arten
Logisch
Uber
eine Spalte oder u
ber mehrere Spalten (Concatenated, max. 32)
Unclustered ORD und ITEM Tabellen
Unique oder Nonunique
ORD_NO PROD QTY ...
----------------101 A4102 20
102 A2091 11
102 G7830 20
102 N9587 26
101 A5675 19
101 W0824 10
Physikalisch
ORD_NO ORD_DT
CUST_CD
----------------101 05-JAN-97
R01
102 07-JAN-97
N45
Bitmap
CUST_CD
R01
QTY
20
19
10
CUST_CD
N45
QTY
11
20
26
B-Tree
G
unstig bei vielen unterschiedliche Werten (hohe Kardinalit
at), besonders
bei UNIQUE.
Sehr uneffizient bei SELECT-Abfragen mit OR.
G
unstig f
ur OLTP.
Cluster Arten
NOT NULL kann nicht indiziert werden.
Index Cluster
Hash Cluster
Normal: Der normale B-Tree wird am meisten verwendet und wird nachfolgend eingehender behandelt.
127
124
KAPITEL 2. FUNDAMENTALS
Ubung
Index-Cluster
Undo-Tablespace l
oschen
3.10.4
Ubungen
siehe Seite 316.
221
222
KAPITEL 3. HIGH-PERFORMANCE-TUNING
2.10
Undo Management
2.10.1
Undo Tablespace
Erstellung
create undo tablespace undotbs2
datafile /var/tablespaces/undotbs2.dbf
size 500M autoextend on
;
Modifizieren
Eine Datei hinzuf
ugen.
Anzeige Status
select segment_name,tablespace_name,status from dba_rollback_segs;
123
120
2.8.14
KAPITEL 2. FUNDAMENTALS
2.8.15
L
oschen von Tablespace
Nur wenn der Inhalt nicht mehr gebraucht wird. Beachte Constraints und andere
Beziehungen auf diesen Tablespace.
drop tablespace testus_l including contents
and datafiles cascade constraints;
4.1. PHP
4.1.2
PHP mySQL
LAMP
PHP wird als Modul in den Apache-Webserver eingebunden. Meist wird als Datenbank dazu mySQL verwendet. Die Kombination Linux + Apache + mySQL
+ PHP wird als LAMP bezeichnet.
mySQL starten (SuSE-Linux):
rcmysql start
Ein einfaches PHP-Beispiel zur Datenbankanbindung zu mySQL.
<html>
<head><title>php</title></head>
<body>
<?php
///////////////////////////////////////////////////////////////////////////
//Verbindung zu mysql
//------------------//Verbindung mit MySQL:
//resource mysql_connect([string Server[,string User[,string Passwort]]])
//
//Auswahl der Datenbank:
//bool mysql_select_db(string Datenbankname[,resource Verbindungs-Kennung])
//
//Eine SQL Abfrage abschicken:
//resource mysql_query(string Anfrage[,resource Verbindungs-Kennung])
//
//Das Ergebnis der Abfrage auswerten:
//array mysql_fetch_assoc(resource Ergebnis)
//Gibt eine Zeile als assoziatives Array aus. Geht dann zur n
achsten Zeile.
//
//array mysql_fetch_row(resource Ergebnis-Kennung)
//Gibt eine Zeile als indiziertes Array aus. Geht dann zur n
achsten Zeile.
//
//Fehler ausgeben:
//string mysql_error([resource Verbindungs-Kennung])
////
/////////////////////////////////////////////////////////////////////////////
////
$dbh = mysql_connect("localhost", "root", "pinguin")
or die ("keine Verbindung m
oglich");
mysql_select_db ( "mysql" , $dbh );
$sql = "select * from user";
$ergebnis = mysql_query ( $sql , $dbh) or die (mysql_error());
while ($zeile = mysql_fetch_assoc ( $ergebnis)) {
print_r($zeile);
echo "<br>";
}
//
///////////////////////////////////////////////////////////////////////////
php?>
</body>
</html>
225
226
4.2
4.2.1
Java
Eine kleine DB in Java
Uber
diese Methode sollen alle Teilnehmer-Objekte ausgegeben werden.
Klasse T Verwaltung
Methode: main(...)
2.8.8
Notwendig f
ur Recovery
alter tablespace testus_l offline normal;
normal Alle Data Blocks werden aus den SGA in den Tabelespace geschrieben (default).
temporary Bewirkt einen Checkpoint. Alle Offline Files erfordern ggf.
Media Recovery.
immediate Stellt nicht sicher, dass alle Tablespace Files verf
ugbar sind.
Es wird kein Checkpoint erzwungen. Media Recovery ist unbedingt notwendig. Daher sollte immediate vermieden werden.
for recover Bringt Tablespace offline f
ur Tablespace Point-In-Time-Recovery.
2.8.9
Aufgabe:
Kreieren Sie alle Klassen.
achst zwei Objekte der Klasse TeilLegen Sie in dieser Klasse T Verwaltung zun
nehmer an z.B. Meier, Kurt Netzwerk-Administrator und Bayer, Astrid DBAdministrator.
Geben Sie alle Daten aus.
Ver
andern Sie den Kurs des Teilnehmers Meier.
Geben Sie alle Daten aus.
2.8.10
2.8.11
2.8.12
Datendatei vergr
oern / Datendatei hinzuf
ugen
2.8.13
119
116
KAPITEL 2. FUNDAMENTALS
4.2. JAVA
Member l
oschen
Beispiel:
import java.sql.*;
2.7.2
2.7.3
stmt.close();
conn.close();
Ubung
Redo Log Dateien
}
catch ( Exception e ) {
System.out.println( "Fehler bei Tabellenabfrage" + e );
return;
}
Ubungen
siehe Seite 264.
}
}
229
230
ODBC-Treiber Oracle
ODBC-Treiber laden
Systemsteuerung Verwaltung Datenquellen (ODBC)
System-DSN Hinzuf
ugen: MS ODBC-Treiber f
ur Oracle
Datenquellenname: testdb29 (kann beliebig gew
ahlt werden)
Beschreibung: bla
Benutzername: scott
Server: testdb29 (wie in tnsnames.ora)
Beispiel:
2.7
2.7.1
Online-Redo-Logs
import java.sql.*;
select group#,status from V$log;
public class Sql
{
public static void main( String args[] )
{
try {
Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
}
catch ( Exception e ) {
System.out.println( "Fehler bei ODBC-JDBC-Bridge" + e );
return;
}
Connection conn;
Statement stmt;
ResultSet rSet;
try {
// //// Anpassen
String url = "jdbc:odbc:testdb29";
conn = DriverManager.getConnection( url, "scott", "tiger" );
stmt = conn.createStatement();
String sqlQuery = "SELECT * FROM salgrade";
rSet = stmt.executeQuery( sqlQuery );
// ////
}
catch ( Exception e ) {
System.out.println( "Fehler bei Datenbankzugriff" + e );
return;
}
try {
while ( rSet.next() )
System.out.println ( rSet.getString(1) + "\t" + rSet.getString(2));
stmt.close();
conn.close();
}
catch ( Exception e ) {
System.out.println( "Fehler bei Tabellenabfrage" + e );
return;
}
}
}
Member hinzuf
ugen
alter database
add logfile member
/oracle/oradata/testdb29/redo01a.LOG
to group 1
;
Neue Gruppe hinzuf
ugen
alter database
add logfile group 4
(/oracle/oradata/testdb29/redo04a.LOG,
/oracle/oradata/testdb29/redo04b.LOG)
size 100M
;
Log-Files umschalten
alter system switch logfile;
Checkpoint forcieren
alter system checkpoint;
Gruppe l
oschen / Gr
oe
andern
Da das Modifizieren (z.B. Gr
oe
andern) von Gruppen nicht m
oglich ist, m
ussen
diese gel
oscht werden. Gruppe darf dabei nicht CURRENT oder ACTIVE sein.
Files werde nicht physisch gel
oscht (Ausnahme: OMF).
alter database drop logfile group 4;
115
112
KAPITEL 2. FUNDAMENTALS
Layout-Assistent
Leinwand: Neue Leinwand (Canvas), Typ: Inhalt
Prompt und Gr
oen k
onnen ge
andert werden.
Form ausw
ahlen.
Rahmentitel: EMPLOYEES
Es erscheint der Layout-Editor.
DBA_TAB_PRIVS
object privileges for all database users
Web-Browser festlegen
DBA_USERS
all database users, default settings, account expired,
default tablespace name, profile name
Men
u Bearbeiten Voreinstellungen Laufzeit
Web-Browser-Speicherort: Es k
onnen nur Mozilla oder MS-IE verwendet werden.
2.5.1
4.3.3
Men
u Programm Form ausf
uhren.
Es wird der Web-Browser getartet.
URL: http://localhost:8889/forms90/f90servlet
Beim erstten Aufruf wird die Software (JInitiator 1.3.1.13) automatisch installiert.
Anmelden
Es erscheint das Formular. Die kompilierte Modudatei (*.fmx) wird dem Applet
als Parameter u
bergeben.
describe v$instance;
Datensatz eingeben
Datensatz
andern
Datensatz abfragen und
andern. Mit dem Disketten-Icon (Links-Oben) erfolgt
ein Commit.
233
234
ORDER BY
2.5
Beispiel:
Sortierung nach LASTNAME
Im Forms Builder im Objektnavigator den Datenblock EMPLOYEES doppelklicken damit die Attributpalette erscheint.
In der Attribut-Palette ORDER BY suchen. Dazu kann die Suchfunktion
(Rechts-Oben) verwendet werden.
Hinter ORDER BY LASTNAME, FIRSTNAME eintragen.
Speichern und Form ausf
uhren.
Data Dictionary
Die Data Dictionary Views werden mit der Datenbank erstellt und enthalten
Beschreibungen der Objekte der Datenbank.
Data Dictionary View Categories
DBA * :
4.3.4
Master-/Detail-Formular
4.3.5
Andern
der Aktivierungsreihenfolge
Gibt viele Informationen alle Objekte aus, die zu den Schema des Users geh
oren.
4.3.6
DICTIONARY
names of all the data dictionary views
Master-/Detail-Formular f
ur Inner-Join
Die Spalte REPORTSTO zeigt auf die EMPLOYEEID des jeweiligen Chefs.
Men
u Werkzeuge Datenblock-Assistent Tabelle oder Ansicht.
Durchsuchen anklicken. Es erscheinen die Tabellen der Datenbank.
Auswahl EMPLOYEES. Es erscheinen die Spalten der Tabelle.
Auswahl der Spalten EMPLOYID, TITLE, LASTNAME, FIRSTNAME
Tabellenblockname: EMPLOYEES
Datenintentigrit
at erzwingen.
Beziehung erstellen: Auswahl EMPLOYEES
Aus JOIN-Bedingung basierend
Detail-Objekt: EMPLOYEEID
Ubersicht
u
ber die vielen Data Dictionary Views.
DBA_OBJECTS
number of objects a user has created
DBA_TABLES >> NEXT_EXTENT, PCT_INCREASE
size of 3rd extent (dictionary managed tablespace)
DBA_CONSTRAINTS
foreign key constraint and the referenced primary key
DBA_INDEXES
111
108
KAPITEL 2. FUNDAMENTALS
2.3.8
Uberwachen
der Alert Log File und Trace Files
Zur Fehler
uberwachung und Diagnostik dienen mehrere Arten von Log/TraceFiles. Diese ASCII-Dateien k
onnen mit den u
blichen Unix-Befehlen (tail, grep)
betrachtet und ausgewertet werden.
Anhang A
Appendix
alertSID.log
Pfad wird in BACKGROUND DUMP DEST festgelegt. Dies ist die eigentliche
Log-Datei f
ur die Instanz. Diese sollte regelm
aig untersucht und dann geleert
werden.
Background Trace Files
Pfad wird in BACKGROUND DUMP DEST festgelegt. Die Benennung ist:
sid prozessname pid.trc. Wobei der Prozessname sich aus dem BackgroundProzess ergibt (LGWR, DBWR, ...). Die PID ist die PID vom Betriebssystem.
Diese Dateien werden nur bei Fehlern angelegt. Diese sollte regelm
aig untersucht und dann gel
oscht werden.
User Trace Files
Pfad wird in USER DUMP DEST festgelegt. Die Bennenung ist: sid ora PID.trc.
Diese Dateien werden nur bei Fehlern angelegt. Diese sollte regelm
aig untersucht und dann gel
oscht werden.
(De-)Aktivieren des User-Tracing
alter session set SQL_TRACE = TRUE;
SQL TRACE ist ein statischer Parameter.
Achtung: Es entstehen sehr viele Daten, da z.B. jedes SQL-Statement geloggt
wird. Die Default-Einstellung ist TRUE und sollte daher auf FALSE gesetzt
werden.
2.3.9
Ubung
PFILE / SPFILE
Ubungen
siehe Seite 261.
2.3.10
Ubung
Hoch- / Herunterfahren
Ubungen
siehe Seite 261.
237
238
A.1
A.1.1
ANHANG A. APPENDIX
SQL/PL Ubungen
und L
osungen
Einfache SELECT-Abfragen
2.3.6
SHUTDOWN-Optionen
-- L
osung:
select * from products where SUPPLIERID=1;
shutdown normal;
Neue User k
onnen sich nicht mehr anmelden. Bestehende Sessions werden nicht
beendet. Erst wenn der letzte User sich abgemeldet hat wird die Instanz herunter
gefahren. Database Buffer und Redo Buffer werden in die Files geschrieben. Nach
dem Neustart ist kein Recovery notwendig.
-- L
osung:
select * from products where SUPPLIERID=2 and CATEGORYID=1;
Schreiben Sie eine Abfrage, die alle Datens
atze der Tabelle products mit Preisen
>= 50 und <= 100 anzeigt.
-- L
osung:
select * from products where UNITPRICE between 50 and 100;
TRANSACTIONAL
shutdown transactional;
Es wird gewartet bis alle offenen Transactionen beendet sind. Ansonsten werden
alle Sessions sofort beendet. Nach dem Neustart ist kein Recovery notwendig.
shutdown immediate;
Laufende Transaktionen werden zur
uckgerollt. Aktuelle SQL Statements werden
nicht beendet. Alle User Sessions werden sofort beendet. Nach dem Neustart ist
kein Recovery notwendig.
ABORT
shutdown abort;
-- L
osung:
select LASTNAME from employees
where CITY in (London,Redmond,Seattle)
order by 1
;
Schreiben Sie eine Abfrage, die die Nachnamen aller Mitarbeiter aus den USA
anzeigt. Die Nachnamen sollen absteigend sortiert werden.
2.3.7
-- L
osung:
select LASTNAME from employees where COUNTRY != USA order by 1 desc;
Schreiben Sie eine Abfrage, die alle Produktnamen mit deren Kategorie-ID auflistet. Dabei soll jeweils folgender Satz ausgegeben werden:
Das Produkt X geh
ort zur Kategorie Y.
Instance Recovery
107
104
KAPITEL 2. FUNDAMENTALS
241
SUPPLIERID MAX(UNITPRICE)
-------------------------10
4,5
-- L
osung:
select supplierid,max(unitprice) from products
group by supplierid having max(unitprice) < 10
;
4. Default PFILE
Starten mit einem PFILE:
ben:
Parameter
andern: Das SPFILE wird nicht manuell editiert. Die Anderungen erfolgen mittels Anweisungen.
ALTER SYSTEM SET parameter_name = parameter_wert
SCOPE = MEMORY | SPFILE | BOTH SID = *
;
MEMORY Anderungen
werden nur im Memory gespeichert. Sie sind also nur
bis zum Shutdown wirksam.
SPFILE Anderungen
werden nur in das SPFILE geschrieben.
BOTH Anderungen
werden im Memory und in das SPFILE geschrieben
(Default).
SID Identifiziert die ORACLE SID. * bedeutet das Default-SPFILE.
2.3.3
STARTUP-Optionen
Zusatzfrage:
Listen Sie den Nachnamen des Mitarbeiters (employees) auf, der am l
angsten
angestellt war!
-- L
osung:
SELECT lastname,hiredate FROM employees
WHERE hiredate in
(
SELECT MIN(hiredate) FROM employees
)
;
Was machen folgende Abfragen?
3. MOUNT
4. OPEN
Keine Option
startup;
A.1.4
JOIN
Wird keine keine Option beim Befehl STARTUP angegeben, starten alle Instanzen entsprechend den Einstellungen in der Datei /etc/oratab bis OPEN.
Schreiben Sie eine Abfrage, die Ihnen die Kontaktnamen der Lieferanten ausgibt,
die Produkte der Kategorie 1 oder 2 oder 3 liefern!
242
ANHANG A. APPENDIX
CONTACTNAME
PRODUCTNAME
------------------------------------------Charlotte Cooper
Chai
Charlotte Cooper
Chang
Charlotte Cooper
Aniseed Syrup
Shelley Burke
Chef Antons Cajun Seasoning
-- L
osung:
select s.CONTACTNAME,p.PRODUCTNAME from products p,suppliers s
where p.CATEGORYID in (1,2,3)
;
Schreiben Sie eine Abfrage, die Ihnen die Kundennamen, die entsprechenden
Bestellungnummern (orderid) und den Namen des Angestellten (employees), der
die Bestellung bearbeitet hat, ausgibt. Es soll nach dem Contactname geordnet
sein!
CONTACTNAME
ORDERID
LASTNAME
-------------------------------------------------Alejandra Camino
10281
Peacock
Alejandra Camino
10282
Peacock
Alejandra Camino
10306
Davolio
Alejandra Camino
10917
Peacock
103
2.3.2
Die Parameterfiles initialisieren die Instanz beim Start. Z.B. werden durch die
Initialisierungsparameter die Gr
oen der Speicherstrukturen im SGA festgelegt. Dies erfolgt bis 8i durch das PFILE. Ab 9i erfolgt die Initialisierung standardm
aig per SPFILE. Wahlweise kann aber auch bei 9i mit einem PFILE
initialisiert werden. Jede Instanz hat normalerweise ihr eigenes (S)PFile.
PFILE initSID.ora
-- L
osung:
select c.CONTACTNAME,o.orderid,e.lastname from customers c, orders o, employees e
where e.employeeID = o.employeeID and o.customerid = c.customerid
;
Schreiben Sie eine Abfrage, die Ihnen alle Kundennamen ausgibt, die eine Bestellung aufgegeben haben, die Produkte beinhaltet, die von einem Lieferanten
aus Berlin geliefert werden. Es soll absteigend nach den Kundennamen sortiert
werden!
PFILE erzeugen: Da ab Oracle 9i kein PFILE mehr per default verwendet wird, muss man es erst erzeugen. Dies ist sinnvoll, da man das PFILE f
ur
Sicherungs- und Dokumentationszwecke verwenden kann.
-- L
osung:
select c.contactname
from
customers c,orders o,order_details od,products p,suppliers s
where
o.customerid = c.customerid and
od.orderid = o.orderid and
od.productid = p.productid and
p.supplierid = s.supplierid and
s.city=Berlin
order by 1
;
Schreiben Sie eine Abfrage, die Ihnen alle Kundennamen ausgibt, die eine Bestellung aufgegeben haben, die von Speedy Express ausgeliefert wurde!
-- L
osung:
select distinct c.COMPANYNAME from customers c,
where
c.customerid = o.customerid and
o.SHIPVIA = sh.shipperid and
sh.COMPANYNAME = Speedy Express
;
orders o,
shippers sh
bezeichnet. Anderungen
k
onnen persistent gegen
uber shutdown und startup gemacht werden. Manuell kann es nicht ver
andert werden. Einsehbar ist es aber
z.B. mit dem Unix-Befehl less spfileSID.ora.
SPFILE aus einem PFILE erzeugen:
ten SPFILE notwendig sein.
100
2.1.3
KAPITEL 2. FUNDAMENTALS
Archive Redo Log Files: Archive Redo Log Files sind archivierte Redo
Log Dateien. Sie werden nicht mehr beschrieben und k
onnen gesichert werden.
Sie dienen dem Offline-Recovery.
2.1.4
A.1.5
-- L
osung:
select lastname,firstname,birthdate
from employees where birthdate in
(select min(birthdate) from employees)
;
-- Peacock
Shared Server: Die Shared Server Konfiguration wird seltener benutzt. Verwendung findet diese bei Internet-Datenbank-Konfigurationen. Siehe Seite 158.
Server Process Program Global Area (PGA) Der Listener-Prozess registriert Verbindungsw
unsche von User-Prozessen. Server Prozesse werden dann
auf Verlangen von User-Prozessen gestartet und f
uhren stellvertretend dessen
SQL-Statements aus und liefert die Ergebnisse an den User-Prozess. Der Server
Process l
auft auf der Maschine, auf der auch die Instanz l
auft. Dabei wird f
ur
jeden User ein Dispatcher erstellt. Priorit
aten kann man dabei nicht zuweisen.
Wenn ein Server-Prozess startet, wird ihm Arbeitsspeicher zugewiesen. Diesen
nennt man Program Global Area (PGA). Nach dem Beenden des User-Prozesses
wird der PGA wieder freigegeben. Der PGA besteht aus diesen Komponenten:
Private SQL Area
Persistent Area
Run-Time Area
Verschachtelte Abfragen
-- L
osung:
select PRODUCTNAME,unitprice from products p,suppliers s
where s.supplierid = p.supplierid and
unitprice =
(
select max(unitprice) from products p2
where s.supplierid = p2.supplierid and supplierid in
(
select supplierid from suppliers where upper(city) = BERLIN
)
)
;
-- Schoggi Schokolade 43,90
Welche Produkte (productname) sind u
berdurchschnittlich teuer?
Session Memory
SQL Work Areas
User Process Der User-Prozess l
auft meist auf der lokalen Maschine des Benutzers bzw. auf einem Applikationsserver.
-- L
osung:
select productname,UNITPRICE from products
where UNITPRICE > (select avg(UNITPRICE) from products);
Wie heit der j
ungste Mitarbeiter?
245
246
ANHANG A. APPENDIX
-- L
osung:
select lastname,firstname,birthdate from employees
where birthdate in (select max(birthdate) from employees);
-- Dadworth ??
Zu welcher Kategorie geh
ort das teuerste Produkt (categoryname)
-- L
osung:
select CATEGORYID,unitprice from products
where unitprice =
(
select max(unitprice) from products
)
;
Schreiben Sie eine Abfrage, die Ihnen die Lieferanten (Companyname) und daneben das teuerste Produkt dieses Lieferanten (Productname) und daneben den
Preis ausgibt.
-- L
osung:
SELECT s.companyname, p.productname, p.unitprice
FROM suppliers s, products p
WHERE p.supplierid = s.supplierid AND p.unitprice =
(
SELECT MAX(p2.unitprice)
FROM products p2, suppliers s2
WHERE p2.supplierid = s2.supplierid
AND s2.supplierid=s.supplierid
)
;
Welcher Kunde hat bisher am meisten bestellt?
-- L
osung:
select companyname, UMSATZ from
(
select c.companyname, sum(od.unitprice*od.quantity)
as Umsatz from orders o,order_details od, customers c
where o.orderid = od.orderid and
c.customerid = o.customerid group by c.companyname
)
where UMSATZ =
(
select max(UMSATZ) from
(
select c.companyname, sum(od.unitprice*od.quantity) as Umsatz
from orders o,order_details od, customers c
where o.orderid = od.orderid and
c.customerid = o.customerid
group by c.companyname
)
)
;
Erstellen Sie eine Abfrage, die Ihnen die Kunden (contactname) und die bisherigen Ums
atze auflistet.
Optionale Background-Prozesse
ARCn: Von den optionalen Background-Prozessen wird hier nur der ARCn
besprochen. Der ARCn dient zum Erstellen der Archive Log-Files. Die Archive
Log dienen dem Offline-Recovery.
Die Online Redo Logs werden nacheinander geschrieben. Wenn es drei Redo
Log Files gibt, wird erst in die erste Datei geschrieben. Ist diese voll, wird in die
zweite Datei geschrieben. Ist das zweite Redo Log File voll, wird in die dritte
Redo Log Datei geschrieben. Ist die dritte Datei voll, beginnen die Schreiboperationen wieder bei der ersten Datei. Die urspr
unglichen Informationen der ersten
Datei gehen dabei verloren. Um dies zu verhindern, gibt es die M
oglichkeit vollgeschriebene Redo Log Files zu archivieren. Man nennt diese dann Offline Redo
Logs bzw. Archive Logs und den Prozess der dies steuert den Archiver (ARCn).
Die Offline Redo Logs sollten auf eine separaten Platte gespeichert werden und
von dort aus gesichert werden.
Die Voreinstellung ist NOARCHIVELOG, dass heisst es werden keine Archive
Logs geschrieben. Dies sollte unbedingt auf den ARCHIVELOG Mode ge
andert
werden.
2.1.2
Datenbank
99
96
2.1.1
KAPITEL 2. FUNDAMENTALS
Instance
Man startet nie eine Datenbank. Man startet eine Instanz. Diese erm
oglicht den
Zugriff auf die Datenbank. Eine Instanz
offnet eine und nur eine Datenbank.
249
-- L
osung:
select upper(substr(firstname,1,1)) || . || initcap(lastname)
from employees;
Eine Instanz muss beim Start initialisiert werden. Dadurch werden die Initialisierungsparameter festgelegt. Dies erfolgt durch ein SPFILE bzw. ein PFILE
(siehe Parameter Files, Seite 103).
show sga;
Die Speicherzuweisung erfolgt schrittweise (Granulate). Die Granulat-Gr
oe ist
abh
angig von der SGA-Gr
oe (4MB bei SGA <128MB, ansonsten 16MB).
LASTNAME
Jubilee
-------------------- ----------------Davolio
01.Mai
2017
Fuller
14.August
2017
Leverling
01.April
2017
Peacock
03.Mai
2018
Buchanan
17.Oktober
2018
Suyama
17.Oktober
2018
-- L
osung:
select LASTNAME,
to_char(add_months(hiredate,25*12),dd.Month
as Jubilee
from employees
;
YYYY)
250
ANHANG A. APPENDIX
-- L
osung:
select lastname, birthdate,hiredate, months_between(hiredate,birthdate)
from employees
where months_between(hiredate,birthdate) =
(select max(months_between(hiredate,birthdate)) from employees)
;
Instance
System Global Area (SGA)
Shared Pool
Library Cache
Data Dictionary Cache
Database Buffer Cache
Redo Log Buffer
Java Pool
Large Pool
Schreiben Sie ein Abfrage, die den Produktpreis mit jeweils zwei Nachkommastellen ausgibt.
-- L
osung:
select productname,to_char(unitprice,99999D00) from products;
PMON
SMON
DBWR
LGWR
CKPT
Optionale Background-Prozesse
ARCn
Datenbank
Database Files (Operating System Files)
A.1.7
Datafiles
Control Files
Redo Logfiles
Erstellen Sie folgende Tabellen (Legen Sie alle Anweisungen als Skript in einer
Datei ab).
-- Tabelle Lehrer
Anrede
Name
Vorname
-----------------Frau Janker Hanni
Herr Hubert Jan
Frau Hinze
Jutta
Herr Hub
Frank
Herr Kreis
Klaus
-- L
osung:
create table lehrer (
anrede varchar(40) not null,
name
varchar(40) not null,
vorname varchar(40) not null
);
insert into lehrer values (Frau,Janker,Hanni);
insert into lehrer values (Herr,Hubert,Jan);
insert into lehrer values (Frau,Hinze,Jutta);
insert into lehrer values (Herr,Hub,Frank);
insert into lehrer values (Herr,Kreis,Klaus);
select * from lehrer;
F
ugen Sie zur Tabelle eine weitere Spalte namens Gehalt (Typ: int) hinzu.
-- L
osung:
alter table lehrer add (gehalt int);
Vergr
oern Sie die L
ange des Datentypes f
ur die Spalte Name um 5.
95
92
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
-- L
osung:
ALTER TABLE customers
ADD CONSTRAINT custmom_CK1
CHECK (lower(city) NOT IN (iraq,north korea,north corea,cuba))
;
Das Shippeddate darf nicht vor dem Orderdate liegen (Tabelle orders).
-- L
osung:
ALTER TABLE orders
ADD CONSTRAINT orders2ship_CK1
CHECK (shippeddate >= orderdate)
;
Das Requireddate darf nicht vor dem Orderdate liegen (Tabelle orders).
-- L
osung:
ALTER TABLE orders
ADD CONSTRAINT req2order_CK1
CHECK (requireddate >= orderdate)
;
Kontrolle:
select
TABLE_NAME,
CONSTRAINT_NAME,
SEARCH_CONDITION,
R_CONSTRAINT_NAME,
INDEX_NAME
from user_constraints
where user = SYS
and last_change > sysdate-1
;
Abfrage: Liefert mehrfach vorkommende Werte in employees:
-- L
osung:
select EMPLOYEEID from employees minus select distinct EMPLOYEEID from employees;
select customerid from orders minus select distinct customerid from orders;
A.1.9
PL/SQL
Erstellen Sie eine Prozedur New Empl, mit der Sie in die Tabelle employees neue
Mitarbeiter hinzuf
ugen k
onnen. Die Mitarbeiternummer des neuen Mitarbeiters
muss um 1 gr
oer sein als die gr
ote Mitarbeiternummer. Aufgerufen werden
soll die Prozedur mit exec new empl(Schroeder,Gerd).
-- L
osung:
/*
set serveroutput on;
create or replace procedure New_Empl(nachname varchar2,vorname varchar2) is
current_table
varchar2(30) := sys.employees;
253
254
ANHANG A. APPENDIX
max_employeeid
int
:= 0;
current_employeeid int
:= 0;
begin
select max(employeeid) into max_employeeid from employees;
current_employeeid := max_employeeid+1;
insert into employees (employeeid,lastname,firstname)
values (current_employeeid,nachname,vorname);
commit;
Exception
when others then
dbms_output.put_line(Error);
end;
/
show errors;
exec new_empl(Schroeder,Gerd)
Erstellen Sie eine Prozedur Prim Int, welche die Primzahlen zwischen in einem
bestimmten Intervall ausgibt. Aufgerufen werden soll die Prozedur mit
exec Prim Int(10,20)
Hilfe: select mod(11,4) from dual;
-- L
osung Variante 1:
create or replace procedure Prim_INT(unten int, oben int) is
temp int:=1;
begin
If (oben < unten) OR (oben < 1) OR (unten < 1) then
dbms_output.put_line(witzig);
else
for x in unten .. oben loop
temp:=1;
for y in 2 .. (x-1) loop
If mod(x,y) = 0 then
temp:=0;
End If;
end loop;
If temp=1 then
dbms_output.put_line(x);
End If;
end loop;
end if;
Exception
when others then
dbms_output.put_line(unbekannte Ausnahmeverletzung);
end;
/
show errors;
exec Prim_Int(5,10);
-- L
osung Variante 2:
set serveroutput on;
create or replace procedure Prim_Int(first_num int,sec_num int) is
zahl number(5):=0;
n number(5):=0;
prim number(5):=1;
begin
dbms_output.put_line(.);
dbms_output.put_line(Zwischen ||first_num|| und ||sec_num|| gibt es folgende Primzahlen:);
1.10.7
Ubungen
10
Ubungen
siehe Seite 255.
91
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
88
1.10
Neuerungen in Oracle 9i
1.10.1
NULLIF()
case categoryid
when 1 then 0
when 2 then 0.07
when 3 then 0.07
else 0.16
end
), 999g999d99) as MWST
from products natural join categories
1.10.2
A.1.11
CASE
SELECT
CASE WHEN deptno = 20
THEN NULL
ELSE
deptno
END
FROM SCOTT.emp
;
1.10.3
COALESCE()
1.10.4
JOIN
NATURAL JOIN
Alle gleichnamige Spalten mehrerer Tabellen werden automatisch verkn
upft.
Ein ON kommt in der Syntax nicht vor.
SELECT deptno, ename, dname
FROM emp
NATURAL JOIN dept;
Abschluss
ubung
1. Uberlegen
Sie sich eine Struktur f
ur diese Datenbank (2 Stunden) mit
anschlieender Pr
asentation und Diskussion.
2. Setzen Sie diese Struktur in die Praxis um.
3. Falls Sie noch Zeit haben, schreiben Sie ein kleines Front-End mit einen
Programm Ihrer Wahl.
-- L
osung:
create user schule identified by schule;
grant dba to schule;
connect schule/schule;
-- TABLEs
Create table Klasse (
Klassen_id number(5) constraint kl_pk primary Key,
Klassenname varchar2(10) not null);
Create table Fach (
Fach_id number(5) constraint fa_pk primary Key,
Fachname varchar2(10) not null,
Fach_kurz varchar2(5));
Create table Schueler (
Schueler_id number(5) constraint sch_pk primary Key,
Nachname varchar2(20) not null,
Vorname varchar2(20) not null,
Geb_Datum date,
Geschlecht varchar2(10) not null,
Bemerkung varchar2(80),
Klassen_id number(5) not null
constraint kl_fk references klasse(klassen_id));
Create table Lehrer (
Lehrer_id number(5)
constraint le_pk primary Key,
Nachname varchar2(20) not null,
Vorname varchar2(20) not null,
Geb_Datum date);
Create table Lehrer_Fach (
Fach_Lehrer_id number(5) constraint le_fa_pk primary Key,
Fach_id number(5) not null
257
258
ANHANG A. APPENDIX
1.9. EINFUHRUNG
IN DIE PL/SQL-PROGRAMMIERUNG
1.9.10
Ubungen
09
Ubungen
siehe Seite 253.
87
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
84
IF Bedingung THEN
Anweisungen;
ELSIF Bedingung THEN
Anweisungen;
ELSIF Bedingung THEN
Anweisungen;
...
ELSE
Anweisungen;
END IF;
If anzahl < 100 then
dbms_output.put_line(Wenig);
Elsif anzahl between 100 and 200 then
dbms_output.put_line(Mittel);
Else
dbms_output.put_line(Viel);
End If;
1.9.4
Eine LOOP ... END LOOP-Schleife ohne EXIT-Kriterium ist eine Endlosschleife. Die Anweisungen werden unendlich wiederholt. Da Endlosschleifen in der
Praxis eher selten ben
otigt werden, wird ein EXIT-Kriterium eingesetzt.
Loop
exit when Bedingung;
End Loop;
Im folgenden Beispiel wird als EXIT-Kriterium keine IF-Bedingung benutzt,
sondern eine EXIT WHEN-Anweisung. Wenn die Variable Zaehler gr
oer als 10
ist, so wird die LOOP ... END LOOP-Schleife verlassen. Es wird zur Anweisung
hinter dem END LOOP gesprungen und dort wird ganz normal fortgefahren.
-- Vorher muss nat
urlich a deklariert worden sein.
Loop
exit when a=10;
a:=a+1;
dbms_output.put_line(a);
End Loop;
A.2
A.2.1
Fundamentals I Ubungen
und L
osungen
PFILE / SPFILE
In dieser Ubung
werden Sie die Abarbeitungsreihenfolge und -hierarchie der
Initialisierungsparameterdateien kennen lernen. Bitte notieren Sie sich Ihre SID:
select name, value from v$parameter where name =instance_name;
SID = testdb29
Legen Sie in Ihrem Home-Verzeichnis folgende Verzeichnisse an:
mkdir ~/spfile
mkdir ~/pfile
Im folgenden werden Sie ein PFILE aus dem standardm
aigen SPFILE erstellen.
1. Starten Sie den OEM. Melden Sie sich Standalone an.
2. Erweitern Sie Datenbanken. Geben Sie in der Anmeldung an die Datenbank als Benutzer sys an. Das Kennwort ist auch sys. Bei Anmelden als
geben Sie das Privileg SYSDBA an.
3. Erweitern Sie Instanz und w
ahlen Sie Konfiguration aus.
4. W
ahlen Sie im Men
u Objekt PFILE erstellen.
Unter SPFILE geben Sie den Pfad zum Standard-SPFILE an. Der Dateiname soll SPFILEtestdb29.ora sein. Unter PFILE geben Sie den gleichen Pfad wie beim SPFILE an. Der Dateiname soll inittestdb29.ora
sein.
5. Fahren Sie die Instanz herunter.
Verschieben Sie die Datei SPFILEtestdb29.ora in das Verzeichnis /spfile.
Achtung: L
oschen Sie dieses SPFILE nicht!
6. Versuchen Sie nun Ihre Instanz u
ber das SQL-Worksheet hochzufahren.
1.9.5
Anders als bei der normalen LOOP ... END LOOP-Anweisung ist das EXITKriterium bei der WHILE LOOP ... END LOOP-Anweisung bereits u
ber das
WHILE integriert. Die Schleife wird so lange durchlaufen, wie die Variable Zaehler kleiner oder gleich 10 ist. So bald die Variable Zaehler gr
oer als 10 ist, wird
die Schleife beendet und es wird mit der Anweisung hinter END LOOP fortgefahren.
WHILE Bedingung LOOP
Anweisungen;
END LOOP;
261
262
A.2.2
ANHANG A. APPENDIX
Hoch- / Herunterfahren
1. Legen Sie einen neuen Benutzer test mit dem Kennwort test an.
2. Geben Sie ihm die Rechte connect und select any table.
3. Melden Sie sich u
ber das SQL-Worksheet als Benutzer test an.
4. Melden Sie sich weiterhin u
ber das SQL-Worksheet als Benutzer sys an.
5. Fahren Sie sys als Ihre Instanz normal herunter (shutdown normal;).
Was passiert und warum?
Es ist kein shutdown normal moglich, das der User test noch angemeldet
ist.
6. Wechseln Sie in das Worksheet des Benutzers test.
7. Melden Sie den Benutzer test ab (disconnect).
8. Wechseln Sie in das Worksheet des Benutzers sys.
Was passiert und warum?
Die Instanz fahrt herunter.
Spielen Sie das Szenario mit den Optionen shutdown immediate und shutdown
abort durch. Was passiert und warum?
Bei immediate und abort fahrt die Instanz trotz connection vom User test
herunter.
Starten Sie eine heruntergefahrene Instanz mittels der verschiedenen StartOptionen. Wechseln Sie von der niedrigsten Stufe in die jeweils h
ohere (NOMOUNT,
MOUNT, OPEN). Bei welchen Optionen kann sich der Benutzer test wieder einloggen?
Das Einloggen klappt erst bei OPEN.
Nun werden Sie die Datenbank im eingeschr
ankten Modus hochfahren.
3. Andern
Sie Ihre Instanz vom eingeschr
ankten in den nicht eingeschr
ankten Modus.
alter system disable restricted session;
4. Versuchen Sie sich erneut als User test anzumelden. Was passiert und
warum?
Der User test kann sich anmelden.
5. Mit welchem Befehl
andern Sie eine aktuelle Sitzung von normalen Modus
in den eingeschr
ankten Modus?
alter system enable restricted session;
1.9. EINFUHRUNG
IN DIE PL/SQL-PROGRAMMIERUNG
1.9.2
Variablendeklaration
Neben den u
blichen Variablen gibt es bei PL/SQL noch weitere Datentypen,
die beim Erstellen eines Blockes benutzt werden k
onnen.
Boolsche Variable mit den Zust
anden TRUE oder FALSE.
Boolean
Zahlen von -2147483647 bis +2147483647.
Binary integer
Zahlen von 0 bis +2147483647.
natural
positive
Zahlen von 1 bis +2147483647.
Zuweisung von Datentypen
aquivalent zum Datentyp
%Type
einer Spalte.
Zusammengesetzter Datentyp,
aquivalent zu einer
%rowtype
Tabellenzeile.
1.9.3
83
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
80
1.8
1.8.1
3. Pr
ufen Sie Ihr Ergebnis mit Hilfe der Views V$LOGFILE und V$LOG.
select group#,member,status from v$logfile;
select group#,status from v$log;
CREATE USER
2. Pr
ufen Sie den Status Ihrer Redo-Log-Gruppe, die Sie l
oschen m
ochten.
Beachten Sie, dass aktive Redo-Log-Dateien nicht gel
oscht werden k
onnen.
Switchen Sie, wenn n
otig zur n
achsten Redo-Log-Gruppe.
select group#,status from v$log;
3. L
oschen Sie Ihre erste Redo-Log-Gruppe.
alter database drop logfile group 1;
1.8.2
ALTER USER
1.8.3
DROP USER
1.8.4
CREATE ROLE
1.8.5
GRANT ... TO
GRANT ist ein DCL-Befehl. Wie bei allen DCL-Befehlen erfolgt bei Ausf
uhrung
ein automatisches COMMIT.
Rechtevergabe an einen user:
GRANT privileges TO user;
265
266
A.2.5
ANHANG A. APPENDIX
Index
SAVEPOINT k
onnen nach einem ROLLBACK TO SAVEPOINT mit COMMIT
festgeschrieben bzw. mit ROLLBACK r
uckg
angig gemacht werden.
Im Folgenden werden Sie die Funktionsweise von Indizes und deren Verwendbarkeit kennen lernen. Arbeiten Sie mit dem SQL*Plus Woksheet.
Melden Sie sich an Ihrer Datenbank als sys an.
Erstellten Sie eine Tabelle index test im lokal verwalteten Tablespace ts index test
mit einer Datendatei von 500 MB. Die Tabelle soll eine Spalte name besitzen
mit dem Datentyp char(2000).
create tablespace ts_index_test
datafile /var/tablespaces/ts_index_test.dbf
size 500M extent management local;
create table index_test (name char(2000)) tablespace ts_index_test;
Geben Sie folgendes Kommando ein:
set timing on;
1.7.4
Lesekonsistenz
Nehmen wir einmal an, dass Scott die Tabelle Mitarbeiter (emp)
andert. Er f
ugt
zwei neue Datens
atze hinzu.
Geben sie folgende Namen ein: Klaus, Silke, Manu, Stefan, Alex.
insert
insert
insert
insert
insert
into
into
into
into
into
index_test
index_test
index_test
index_test
index_test
79
values
values
values
values
values
(Klaus);
(Silke);
(Manu);
(Stefan);
(Alex);
F
ugen Sie weitere Datens
atze der Tabelle hinzu, indem Sie folgenden Befehl 12
mal verwenden:
-- 12x
insert into index_test select * from index_test;
-select count(*) from index_test;
Danach haben Sie 20480 Datens
atze in Ihrer Tabelle. F
ugen Sie nun einen Datensatz mit Anna als Namen ein.
insert into index_test values (Anna);
commit;
Sie werden nun eine Abfrage starten, bei der ein Full Table Scan durchgef
uhrt
werden muss. Dabei wird die gesamte Tabelle nach den entsprechenden Datensatz durchsucht. Wie lange ben
otigt die Abfrage zur Ausf
uhrung?
bezeichnet. Daten
anderungen sind nur in der Sitzung zu sehen, in der die Anderungen durchgef
uhrt wurden.
1.7.5
Ubungen
07
Ubungen
siehe Seite 250.
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
76
7499
7521
7654
7844
10
11
ALLEN
WARD
MARTIN
TURNER
Huber
Hager
;
Speichern Sie dieses Skript ab (z.B. als ~/test/skript1.sql) und f
uhren Sie
es innerhalb von SQL PLUS aus (start ~/test/skript1.sql). Sie werden
nacheinander zur Eingabe der entsprechenden Werte aufgefordert und am Ende
wird der Datensatz eingef
ugt.
1.6.2
UPDATE
A.2.7
Benutzerverwaltung
Sie werden drei Benutzer namens anna, berta und carla erstellen.
1. Erstellen Sie den User anna. Das Passwort ist auch anna.
create user anna identified by anna;
grant connect, create session to anna;
2. Melden Sie sich unter SQLPLUS als anna@testdb29 an. Was passiert?
sqlplus anna@testdb29
Kennwort eingeben: anna
SQL>
3. Versuchen Sie eine Tabelle zu erstellen.
SQL> create table annatest(s1 int);
FEHLER in Zeile 1:
ORA-01031: Unzureichende Berechtigungen
4. Melden Sie sich als User anna wieder ab.
SQL> exit
5. Geben Sie dem User anna unbegrenzten Speicherplatz auf dem Tablespace
users.
alter user anna quota unlimited on users;
alter user anna default tablespace users
quota unlimited on users;
6. Versuchen Sie wieder eine Tabelle zu erstellen. Was passiert und warum?
sqlplus anna@testdb29
Kennwort eingeben: anna
SQL> create table annatest(s1 int);
7. F
ugen Sie zwei Datens
atze in die Tabelle ein.
SQL> insert into annatest values(1);
SQL> insert into annatest values(2);
SQL> select * from annatest;
S1
---------1
2
8. Schlieen Sie die Transaktion ab.
SQL> commit;
9. Erstellen Sie einen User berta und als berta eine Tabelle bertatest. Versuchen Sie als User berta die Tabelle annatest abzufragen.
create user berta identified by berta;
grant connect, create session to berta;
alter user berta quota unlimited on users;
alter user berta default tablespace users quota unlimited on users;
269
270
ANHANG A. APPENDIX
sqlplus anna@testdb29
SQL> grant select on annatest to berta;
Benutzerzugriff (Grant) wurde erteilt.
sqlplus berta@testdb29
SQL> select * from anna.annatest;
S1
---------1
2
11. Uberpr
ufen Sie, ob es m
oglich ist im Schema eines anderesn Users eine
Tabelle zu erstellen.
sqlplus berta@testdb29
SQL> create table anna.bertatest(s1 int);
FEHLER in Zeile 1:
ORA-01031: Unzureichende Berechtigungen
Kann nur durch SYS dem User anna zugewiesen werden (grant ... with
admin option). sys darf nat
urlich Rechte f
ur Objekte vergeben. anna kann
nur f
ur ihre Objekte die Berechtigungen weitergeben.
sqlplus anna@testdb29
SQL> grant select, insert, update, delete on anna.annatest to berta;
Benutzerzugriff (Grant) wurde erteilt.
1.6
1.6.1
75
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
72
L
oschen eines CHECK KEY
ALTER
ALTER
1.5.4
UNIQUE
Erstellen
Durch einen Unique-Constraint k
onnen Sie sicherstellen, dass Werte in bestimmten Spalten bzw. Spaltenkombinationen eindeutig sind und bleiben. NULLWerte sind hierbei in den beteiligten Spalten erlaubt.
Bei UNIQUE wird automatisch ein INDEX erstellt.
ALTER TABLE tabellenname
ADD CONSTRAINT Constraintname
UNIQUE (spalte1,spalte2...)
;
alter table dept add constraint u1 unique (dname);
Es wird ein Unique-Constraint u
ber die Spalte dname erstellt. Es ist nun nicht
mehr m
oglich, in der Tabelle dept zwei mal den gleichen Abteilungsnamen anzugeben. Wird dies versucht, erscheint ein entsprechender Fehler:
insert into dept (deptno, dname) values(50,RESEARCH);
ORA-00001:
Versto gegen Eindeutigkeit, Regel (SCOTT.U1)
A.2.9
In dieser Ubung
wollen wir folgendes Szenario durchspielen. Jeden Tag gegen 18:00 Uhr wir die Datenbank testdb29 mit Hilde eines Cold-Backups gesichert. Am Dienstag gegen 16:00 Uhr bemerken Sie, dass die Datei users01.dbf
besch
adigt ist. Sie m
ussen die Funktionsf
ahigkeit der Datenbank schnellstm
oglich
wieder herstellen.
Montag 18:00 Uhr Cold Backup
F
uhren Sie ein Cold-Backup durch. Die Datenbank testdb29 soll im Modus
NOARCHIVE-Log sein.
shutdown immediate;
startup mount;
alter database noarchivelog;
archive log stop;
Fahren Sie nun die Instanz herunter un kopieren Sie alle notwendigen Dateien
in das Verzeichnis /backup. Fahren Sie anschlieend die Instanz wieder hoch.
shutdown immediate;
host;
cp /oracle/oradata/testdb29/* /backup
exit
startup;
Dienstag 08:00 bis 15:59 Arbeitslast
Simulieren Sie die Arbeitslast. Sie werden hierf
ur eine Tabelle anlegen, dort f
unf
Datens
atze einf
ugen und drei Log-Switches ausf
uhren.
create table unterricht (fachnummer number, fachname varchar2(20));
insert into unterricht values(1,Deutsch);
insert into unterricht values(2,Deutsch);
insert into unterricht values(3,Englisch);
insert into unterricht values(4,Mathe);
insert into unterricht values(5,Zeichnen);
commit;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
Dienstag 16:00 Verlust der Datei users01.dbf
Simulieren Sie den Verlust der Datendatei users01.dbf.
shutdown immediate;
host;
rm /oracle/oradata/testdb29/users01.dbf
exit
startup;
...
Datenbank mit Mount angeschlossen.
ORA-01157: Datendatei 3 kann nicht identifiziert/gesperrt werden
Siehe DBWR-Trace-Datei.
ORA-01110: Datendatei 3: /oracle/oradata/testdb29/users01.dbf
273
274
ANHANG A. APPENDIX
1.5. CONSTRAINTS
Zum Abschluss der Foreign Key Constraint wollen wir uns die M
oglichkeit des
kaskadierenden L
oschens anschauen. Hierf
ur l
oschen wir den Constraint FK1
und erstellen diesen mit der Option ON DELETE CASCADE neu.
alter table emp drop constraint fk1;
alter table emp add
constraint fk1
foreign key (deptno)
references dept(deptno) ON delete cascade
;
Zuerst wird der Foreign Key Constraint FK1 gel
oscht und anschlieend mit der
Option ON DELETE CASCADE neu erstellt. Sehen wir uns jetzt an, was im
Falle des L
oschens einer Abteilung passiert:
delete from dept where deptno = 30;
Eine Zeile wurde gel
oscht. Trotz referentieller Integrit
at wurde eine Zeile (deptno
= 30) aus der Tabelle Abteilung gel
oscht. Des weiteren wurden alle Mitarbeier,
die zur Abteilung 30 geh
orten, ebenfalls gel
oscht. Hiervon k
onnen Sie sich gern
durch folgende Abfrage u
berzeugen.
select * from emp where deptno = 30;
1.5.3
CHECK
Mit einem Check-Constraint wird festgelegt, welche Bedingung bzw. Bedingungen jeder Datensatz der Tabelle erf
ullen muss. Es kann je Tabelle mehrere
Check-Constraints geben, die dann nat
urlich alle eingehalten werden m
ussen.
Check-Constraints dienen zur Wahrung der Integrit
at der Daten und erweitern
die durch Datentypen zur Verf
ugung gestellten Integrit
atsm
oglichkeiten.
ALTER TABLE tabellenname
ADD CONSTRAINT Constraintname CHECK (bedingung)
;
Die Anwendung eines Check-Constraint wollen wir am Beispiel der Tabelle Mitarbeiter (emp) verdeutlichen. Wir nehmen an, dass die Spalte sal nicht gr
oer
als 100000 sein darf.
alter table emp add constraint ck1 check (sal < 100000);
Zur Tabelle emp wird ein Check-Constraint namens ck1 hinzugef
ugt. Dieser
Check-Constraint u
uft, ob das Gehalt (sal) kleiner als 100000 ist. Ist dies
berpr
nicht der Fall, erscheint folgende
insert into emp (empno,ename,sal) values(9999,Mueller,110000);
FEHLER in Zeile 1:
ORA-01438:
Wert gr
oer als angegebene Stellenzahl f
ur diese Spalte zul
asst
Unterabfragen sind in Check-Constraints nicht m
oglich:
71
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
68
Richtlinien f
ur das Erstellen eines Index
A.2.11
Indizes machen nur Sinn, wenn diese richtig und mavoll eingesetzt werden.
Ein Index dient prim
ar dazu, die Suchoperationen zu beschleunigen. Allerdings
muss ein Indexeintrag auch immer mitgepflegt werden. So viel Indizes wie n
otig
nicht mehr!
In dieser Ubung
werden wir untersuchen, wie sich die Datenbank verh
alt, wenn
alle Control-Files fehlen. Voraussetzung hierbei ist, dass alle Data Files noch
vorhanden sind. Gl
ucklicherweise haben wir vorher ein Skript erstellt, welches
die Control Files neu erstellen kann. Ansonsten w
are alles etwas aufwendiger.
3. Offnen
Sie diese Datei in einem Editor. Sie sehen die CREATE CONTROLFILEAnweisung, die Oracle automatisch erstellt hat.
4. Fahren Sie die Instanz herunter und l
oschen Sie alle Control Files.
277
278
A.2.12
ANHANG A. APPENDIX
Sie werden mit RMAN eine inkonsistente Vollsicherung der Datenbank testdb29
durchf
uhren. Stellen Sie sicher, dass das Verzeichnis /backup existiert. Starten
Sie RMAN.
CREATE INDEX
create index indexname on tabelle(spalte1, spalte2, ... spalte n);
create index id1 on emp(ename);
Erstellen Sie die Tabelle abteilung und tragen dort zwei Abteilungen ein. F
uhren
Automatische INDEX-Erstellung
Bei den Constraints PRIMARY KEY und UNIQUE wird automatisch ein Index
erstellt.
DROP INDEX
Informationen u
ber bestehende Indizes
Mit Hilfe bestimmter Data Dictionary Tables und Views erhalten Sie eine Ubersicht u
ber die bestehenden Indizes und die beteiligten Tabellen. In der Data Dictionary Sicht user indexes sind alle Indizes und die Eindeutigkeit gespeichert.
In der Data Dictionary Sicht user ind columns stehen die Tabellennamen und
die entsprechenden beteiligten Spalten.
Es werden alle Indizes ermittelt, die sich auf die Tabelle emp beziehen. Ausgegeben wird der Indexname und die beteiligte Spalte bzw. die beteiligten Spalten
67
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
64
Es wird ein View erstellt, der alle Spalten der Tabelle Mitarbeiter (emp) selektiert, die aus der Abteilung RESEARCH kommen.
1.4.6
Andern
einer View
Das Andern
einer View erfolgt mit der Option OR REPLACE:
1. Erstellen Sie die Tabelle customers aus dem Skript customers.txt. Wie viel
Datens
atze hat die Tabelle customers?
start ~/1ZO-033/Northwind-Skript/customers.txt
select count(*) from customers;
COUNT(*)
---------91
Abgelaufen: 00:00:00.00
1.4.7
DROP VIEW
1.4.8
Ausf
uhrungsplan
---------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE
1 0
SORT (AGGREGATE)
2 1
TABLE ACCESS (FULL) OF CUSTOMERS
2. Nun muss das Tracing eingeschaltet werden, um eine Trace-Datei als Grundlage f
ur tkprof zu haben. F
uhren Sie hierf
ur folgenden Befehl aus:
alter session set sql_trace = true;
3. Mit welchen Befehl h
atten Sie diese Einstellung permanent machen k
onnen?
Ein PUBLIC-SYNONYM (
offentliches Synonym) kann von jedem benutzt werden.
1.4.9
DROP SYNONYM
drop synonym d;
5. Wie k
onnten Sie diesen Ort ver
andern, auf eine andere Platte zum Beispiel?
USER_DUMP_DEST
281
282
ANHANG A. APPENDIX
Andere Platte entsprechend Inhalt von USER DUMP DEST mounten. ;-)
6. Ermitteln Sie die Kunden, die aus Berlin kommen
select * from customers where city = Berlin;
1 Zeilen ausgew
ahlt.
Abgelaufen: 00:00:00.00
Ausf
uhrungsplan
----------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE
1 0
TABLE ACCESS (FULL) OF CUSTOMERS
Ermitteln Sie die Kunden, die aus London kommen
select * from customers where city = London;
6 Zeilen ausgew
ahlt.
Abgelaufen: 00:00:00.03
Ausf
uhrungsplan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE
1
0
TABLE ACCESS (FULL) OF CUSTOMERS
Eine Spalte, die noch keine Werte hat, kann verkleinert werden und der
Datentyp kann ebenfalls ver
andert werden.
Eine NOT NULL Spalte kann hinzugef
ugt werden, wenn die gesamte Tabelle leer ist.
Besitzt eine Spalte in jedem Datensatz einen Wert, kann diese Spalte in
eine NOT NULL Spalte umgewandelt werden.
1.4.5
2 Zeilen ausgew
ahlt.
Eine Sicht ist genau genommen nichts weiter als eine gespeicherte Abfrage. Diese
gespeicherte Abfrage wird wie eine Tabelle behandelt. Sie kann genau wie eine
Abgelaufen: 00:00:00.01
Ausf
uhrungsplan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE
1
0
TABLE ACCESS (FULL) OF CUSTOMERS
8. Nun sollten Sie das Tracing ausschalten.
alter session set sql_trace = false;
9. Schauen Sie nun nach, ob die Trace-Datei erstellt wurde.
ja
10. F
uhren Sie tkprof an der Unix-Shell aus, um sich eine lesbare Datei erstellen
zu lassen.
tkprof.exe /oracle/admin/pingudb/udump/pingudb_ora_2404.trc /tmp/1.txt
11. Offnen
Sie nun die eben erstellte Textdatei und schauen Sie sich die Ergebnisse an
Zusatzaufgaben 1
CREATE VIEW
63
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
60
1.4
1.4.1
Sie k
onnen eine Tabelle auf unterschiedliche Art und Weise erstellen. Als erstes
schauen wir uns die konservative Methode mit der CREATE TABLE Anweisung
an.
Ausf
uhrungsplan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE
1
0
SORT (AGGREGATE)
2
1
INDEX (FULL SCAN (MIN/MAX)) OF ID1 (NON-UNIQUE)
5. Wie oft wurde bisher Chai bestellt (bitte keine Funktion wie lower etc.
benutzen)? Wie schnell wurde die Abfrage ausgef
uhrt?
Folgende Regeln f
ur die Namensvergabe sind zu beachten:
COUNT(*)
---------155648
Abgelaufen: 00:01:07.05
Ausf
uhrungsplan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE
1
0
SORT (AGGREGATE)
2
1
TABLE ACCESS (FULL) OF ORDER_DET_PROD
Es wird eine Tabelle namens Produkt erzeugt, welche aus zwei Spalten besteht.
Wichtige Datentypen:
Number
Varchar2
Date
(Gesamtstellen,Nachkommastellen)
(Zeichenzahl)
Eine Ubersicht
aller Datentypen befindet sich in [13].
7. Erstellen Sie eine Tabelle namens emp cop basierend auf der employeesTabelle. Die Tabelle sollte identisch zur employees sein (gleiche Spalten, gleiche
Zeilen)
Oftmals ist es notwendig, eine neue Tabelle zu erstellen, die auf Daten einer
oder mehrerer bereits bestehender Tabellen aufbaut. Hierf
ur k
onnen Sie die
neue Tabelle auf Basis einer Unterabfrage erstellen:
8. Erstellen Sie einen Index namens id3 auf Basis von lastname
create index id3 on emp_cop(lastname);
285
286
ANHANG A. APPENDIX
0% gel
oschte Rows.
10. L
oschen Sie den
altesten Mitarbeiter. Wie viel Datens
atze wurden gel
oscht?
delete from emp_cop where birthdate =
(
select min(birthdate) from emp_cop
)
;
1 Zeile wurde gel
oscht.
11. Nun werden Sie den Index analysieren, dass heit, den Prozentsatz von
ungenutztem (durch L
oschen) zu dem gesamten Platz ermitteln. Legen Sie Ihre
Schlussfolgerungen dar.
ANALYZE INDEX id3 VALIDATE STRUCTURE;
select (del_lf_rows_len/lf_rows_len)*100 from index_stats;
(DEL_LF_ROWS_LEN/LF_ROWS_LEN)*100
--------------------------------11,0465116
ACCOUNTING
RESEARCH
SALES
In der Unterabfrage werden die Abteilungsnummern ermittelt, in denen Mitarbeiter der Positionen SALESMAN oder MANAGER arbeiten. In der
aueren
Abfrage werden hierzu die Abteilungsnamen ausgegeben. W
urden Sie hier anstelle des IN ein = benutzen, so w
urde ein Fehler ausgegeben werden:
FEHLER in Zeile 1:
ORA-01427: Unterabfrage f
ur eine Zeile liefert mehr als eine Zeile
ANY
Einer der Datens
atze muss der Bedingung gen
ugen.
select * from employees where employeeid > any
(select employeeid from orders)
;
ALL
11% gel
oschte ROWs
12. Nun werden Sie ein rebuild des Index durchf
uhren. F
uhren Sie diesen Befehl
bitte auch durch.
ALTER INDEX id3 REBUILD;
13. Nun werden Sie den Index analysieren, dass heit, den Prozentsatz von
ungenutztem (durch L
oschen) zu dem gesamten Platz ermitteln. Legen Sie Ihre
Schlussfolgerungen dar:
Alle Datens
atze m
ussen der Bedingung gen
ugen (AND).
select * from employees where employeeid > all
(select employeeid from orders)
;
1.3.7
Top-N Analyse
(DEL_LF_ROWS_LEN/LF_ROWS_LEN)*100
--------------------------------0
1. Erweitern Sie die Tabelle order det prod um eine Spalte namens done (varchar2(1)).
alter table order_det_prod add(done varchar2(1));
2. F
ur alle Orderids unter 11000 soll Done N sein und f
ur alle dar
uber soll
Done Y sein.
update order_det_prod set done = N where orderid < 11000;
update order_det_prod set done = Y where orderid > 11000;
commit;
select * from
(
select * from scott.emp order by SAL desc
)
where ROWNUM < 4
;
1.3.8
Ubungen
05
Ubungen
siehe Seite 245.
59
56
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
AVG()
Ausf
uhrungsplan
-------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE
1
0
TABLE ACCESS (BY INDEX ROWID) OF ORDER_DETAILS
2
1
INDEX (RANGE SCAN) OF ID1 (NON-UNIQUE)
289
290
ANHANG A. APPENDIX
1.3.3
Ubungen
04
Ubungen
siehe Seite 241.
1.3.4
Gruppierungen
55
52
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
ENAME
DNAME
-----------------------CLARK
ACCOUNTING
KING
ACCOUNTING
MILLER
ACCOUNTING
SMITH
RESEARCH
ADAMS
RESEARCH
FORD
RESEARCH
SCOTT
RESEARCH
JONES
RESEARCH
ALLEN
SALES
BLAKE
SALES
MARTIN
SALES
JAMES
SALES
TURNER
SALES
WARD
SALES
NULL
OPERATIONS
F
ur die Abteilungen, die keine Verbindung zu einem Mitarbeiter haben, sind alle
dazugeh
origen Spalten der Tabelle Mitarbeiter (emp) NULL. Somit m
ussen wir
lediglich noch nach IS NULL bei den geeigneten Spalten der Tabelle Mitarbeiter
(emp) einschr
anken. Als geeignete Spalten gelten alle Spalten, die nicht NULL
sein k
onnen (als NOT NULL definiert wurden, siehe sp
atere Kapitel).
Kreuzprodukt
Unter einem Kreuzprodukt, auch Cartesian Product genannt, versteht man das
Verbinden mehrerer Tabellen ohne Verbindungskriterium. Obgleich dies in den
meisten F
allen sinnlos erscheint, wollen wir hier ein kleines Beispiel vorstellen.
Angenommen, sie veranstalten eine Schachrunde, in der jeder Mitarbeiter gegen
jeden antreten muss. Folgende Abfrage, mit Hilfe eines Kreuzproduktes oder im
englischen CROSS JOIN, w
urde die Partien ermitteln:
select e1.ename,e2.ename from emp e1, emp e2;
Diese Abfrage w
urde jeden Namen aus der Tabelle e1 (entspricht emp) mit
jedem Namen aus der Tabelle e2(entspricht ebenfalls emp) verbinden und in der
Ergebnismenge aufnehmen. Da die Tabelle emp 14 Datens
atze hat, werden in
der Ergebnismenge 14 * 14 Datens
atze erscheinen, also 196. Da die Mitarbeiter
schlecht gegen sich selbst spielen k
onnen, muss dieser Fakt noch ausgeschlossen
werden.
select e1.ename,e2.ename from emp e1, emp e2
where e1.ename <> e2.ename
;
Folglich sollten 196 weniger 14 Datens
atze in der Ergebnismenge erscheinen.
Jeder gegen jeden mit Hin- und R
uckrunde!
ACHTUNG:
Oftmals benutzt man auch versehentlich ein Kreuzprodukt wenn Sie zum
Beispiel vergessen haben, ein WHERE-Kriterium zu definieren und es mehr als
eine Tabelle hinter FROM gibt. Sollten Sie zwei Tabellen mit beispielsweise
10000 Datens
atzen verbinden (Kreuzprodukt), so hat die Ergebnismenge 10000
* 10000 Datens
atze, also 100 Millionen. Ubrigens
auch ein gutes Mittel zum
Erzeugen von groen Datenbest
anden!
293
294
A.3.5
ANHANG A. APPENDIX
Optimierungen
select e.ename,d.dname
from emp e,dept d
where e.deptno(+) = d.deptno
;
ENAME
DNAME
---------- ---------CLARK
ACCOUNTING
KING
ACCOUNTING
MILLER
ACCOUNTING
SMITH
RESEARCH
ADAMS
RESEARCH
FORD
RESEARCH
SCOTT
RESEARCH
JONES
RESEARCH
ALLEN
SALES
BLAKE
SALES
MARTIN
SALES
JAMES
SALES
TURNER
SALES
WARD
SALES
OPERATIONS
Durch das PLUS-Zeichen wird erreicht, dass alle Datens
atze der dem PLUS
gegen
uberliegenden Tabelle in die Ergebnismenge aufgenommen werden, egal,
ob es eine direkte Verbindung gibt oder nicht. Im Ergebnis k
onnen Sie hier
erkennen, dass die Abteilung OPERATIONS keine Mitarbeiter hat. W
urde sich
das PLUS-Zeichen an der gegen
uberliegenden Seite befinden, so w
urden auch
die Mitarbeiter angezeigt werden, die zu keiner Abteilung geh
oren.
Ausf
uhrungsplan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE
1 0
SORT (AGGREGATE)
2 1
INDEX (FULL SCAN (MIN/MAX)) OF INX_OID (NON-UNIQUE)
select e.ename,d.dname
from emp e,dept d
where e.deptno = d.deptno(+)
;
-- Ausf
uhrungsplan speichern
create outline oid_min for category cat1 on
select distinct min(orderid) from scott.orders
;
51
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
48
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
RESEARCH
SALES
SALES
RESEARCH
SALES
SALES
ACCOUNTING
RESEARCH
ACCOUNTING
SALES
RESEARCH
SALES
RESEARCH
ACCOUNTING
deptno
20
297
Nun wird in der Tabelle dept nach der deptno 20 gesucht. Wird in der Tabelle
der Datensatz mit der deptno 20 gefunden, so werden diese beiden Datens
atze
in der Ergebnismenge verbunden.
Tabelle emp
Tabelle dept
Empno ename ... deptno deptno dname loc
PRODUCTNAME
UNITPRICE COUNTRY
----------------------------------------------------------Aniseed Syrup
10 UK
298
Chai
Chang
Scottish Longbreads
Sir Rodneys Marmalade
Sir Rodneys Scones
Teatime Chocolate Biscuits
ANHANG A. APPENDIX
18
19
12,5
81
10
9,2
UK
UK
UK
UK
UK
UK
7 Zeilen ausgew
ahlt.
Abgelaufen: 00:00:01.07
Ausf
uhrungsplan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE (Cost=2393 Card=3376 Bytes=148544)
1 0 SORT (UNIQUE) (Cost=2393 Card=3376 Bytes=148544)
2 1
HASH JOIN (Cost=60 Card=142688 Bytes=6278272)
3 2
INDEX (RANGE SCAN) OF S_1 (NON-UNIQUE) (Cost=2 Card=2 Bytes=44)
4 2
BITMAP CONVERSION (TO ROWIDS)
5 4
BITMAP INDEX (FAST FULL SCAN) OF S_2
6. Optimierung: Bei welchen Lieferanten ist der maximale Produktpreis gr
oer
als 200?
1.3
Komplexere SQL-Abfragen
1.3.1
Unter einem Join versteht man das mathematische Mittel der Projektion. Dies
bedeutet, dass die Ergebnismenge sich aus Spalten verschiedener Tabellen zusammensetzt. Nehmen wir einmal an, es gebe die Tabellen Kunden, Bestellungen
und Produkte. Nun wollen Sie wissen, welcher Kunde (Kundenname) welches
Produkt (Produktname) bestellt hat. Da diese Informationen sich in diesem
Fall u
ber drei Tabellen verteilen, ist eine Abfrage u
ber alle beteiligten Tabellen
notwendig.
Arten
Es gibt zwei Hauptarten:
EQUIJOIN
NON-EQUIJOIN
Weiterhin gibt es noch JOIN-Methoden:
outer join
self join
set operators
Beachte den Unterschied zwischen full outer join und cross join (Kreuzprodukt,
kartesisches Produkt). Ein cross join entsteht durch Angabe einer zu geringen
Anzahl von Join-Bedingungen (mind. Tabellenanzahl-1). Ein full outer join liefert zus
atzlich nichtverkn
upfte Zeilen aus beiden Tabellen.
EQUIJOIN u
ber zwei Tabellen
Bei einem EQUIJOIN wird auf Gleichheit getestet. Anhand des Beispiels Mitarbeiter (emp) und Abteilung (dept) soll dieser Sachverhalt dargestellt werden.
Als Ergebnis wird eine Menge gew
unscht, in der in der ersten Spalte der Mitarbeitername (ename aus emp) und in der zweiten Spalte der Abteilungsname
(dname aus dept) angezeigt wird. Nat
urlich soll immer der zu diesem Mitarbeiter geh
orende korrekte Abteilungsname angezeigt werden. Schauen wir uns die
beiden beteiligten Tabellen etwas genauer an
In der Tabelle emp gibt es eine Spalte deptno, die der Abteilungsnummer entspricht. Diese Spalte entspricht der Spalte deptno in der Tabelle dept. Diese Entsprechung muss innerhalb der Abfrage durch einen entsprechenden Ausdruck in
einer Where-Klausel kenntlich gemacht werden (emp.deptno=dept.deptno). Die
gew
unschte Abfrage hierf
ur k
onnte folgendermaen lauten:
select e.ename, d.dname
from emp e, dept d
where e.deptno = d.deptno
;
ENAME
DNAME
------------------------
47
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
44
DECODE()
Durch Decode werden verschiedene Ausdr
ucke in Abh
angigkeit eines Kriteriums
ausgewertet. Sie k
onnen sich die Funktion DECODE wie eine Art IF ... THEN
... ELSE vorstellen.
commit;
19. F
uhren Sie folgende Abfrage aus.
select owner, count(*) from bigtab group by owner;
Abgelaufen: 00:00:00.00
20. Was sind Ihre Schlussfolgerungen? Ist der neue Datensatz mit enthalten und
wurde der materialisierte View benutzt?
Mit commit wird die Materialized View aktualisiert.
21. Testen Sie selbst
andig, ob das auch f
ur das L
oschen gilt.
delete bigtab where OWNER=Hans;
commit;
select owner, count(*) from bigtab group by owner;
1.2.4
Mathematical Functions
SQL bietet eine Reihe arithmetischer Funktionen. Anhand der folgenden Beispiele soll das Runden ROUND und Abschneiden TRUNC genauer analysiert
werden.
ROUND()
select 12345.6789 as Zahl, round(12345.6789,2) as Gerundet
from dual
;
ZAHL
GERUNDET
--------------------12345,6789
12345,68
OWNER
COUNT(*)
------------------------------ ---------CTXSYS
2048
MDSYS
5376
...
Abgelaufen: 00:00:00.00
Auch beim L
oschen wird die Materialized View aktualisiert.
22. Schreiben Sie die Abfrage so um, dass nur die Datens
atze angezeigt werden,
bei denen zum Owner mehr als 1000 Datens
atze geh
oren. F
uhren Sie die Abfrage
aus und beobachten Sie, ob der materialisierte View benutzt wird.
start /oracle/ora92/rdbms/admin/utlxplan.sql
set autotrace on explain;
select owner, count(*) from bigtab group by owner having count(*) > 1000;
OWNER
COUNT(*)
------------------------------ ---------CTXSYS
2048
MDSYS
5376
ODM
7904
OLAPSYS
4256
ORDSYS
28896
PUBLIC
369280
SYS
322528
WKSYS
3776
WMSYS
1824
301
302
ANHANG A. APPENDIX
XDB
5152
10 Zeilen ausgew
ahlt.
Abgelaufen: 00:00:00.00
Ausf
uhrungsplan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=4 Bytes=120)
1 0
TABLE ACCESS (FULL) OF MV_BIGTAB (Cost=2 Card=4 Bytes=120)
TO NUMBER()
select to_number(
ZAHL
----1,5
Es wird die Materialized View verwendet, obwohl das Matching nicht exakt ist.
Bei HAVING bringen Materialized Views Vorteile.
TO DATE()
23. L
oschen Sie die Materialized View wieder.
1.2.3
Advanced Functions
NVL()
(Meier);
(M
uller);
(Schmidt);
(Schulz);
(Meyer);
2. Erstellen Sie einen materialized view namens mv1, der die Anzahl der Datens
atze der Tabelle lehrer ausgibt.
create materialized view mv1
build immediate
refresh on commit
enable query rewrite
as
select count(*) from lehrer
;
NVL2()
Mit Hilfe der Funktion NVL2 ist es m
oglich, abh
angig vom Inhalt einer Spalte
unterschiedliche Werte zur
uckzugeben. Hat die Spalte s1 einen Inhalt, so wird
s2 zur
uckgegeben. Ist s1 NULL, so wird s3 zur
uckgegeben.
nvl2(s1,s2,s2)
select comm,nvl2(comm,Komm,Keine Komm) from scott.emp;
43
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
40
305
TRIM()
select trim( from
Tech
) from dual;
exec dbms_resource_manager.set_initial_consumer_group
(user => OLTP_1,consumer_group => OLTP_Group)
;
exec dbms_resource_manager.set_initial_consumer_group
(user => Batch_1,consumer_group => BATCH_Group)
;
exec dbms_resource_manager.set_initial_consumer_group
(user => Adhoc_1,consumer_group => ADHOC_Group)
;
Plan aktivieren
alter system set resource_manager_plan = NIGHT_PLAN;
Teil 2
Ver
andern Sie den Plan so, dass f
ur alle anderen (also other groups) alle Ab
fragen, die l
anger als 5 Sekunden dauern, geblockt werden. Uberpr
ufen Sie Ihr
Ergebnis anhand eines geeigneten Szenarios
LTRIM()
select ltrim(
exec dbms_resource_manager.clear_pending_area();
exec dbms_resource_manager.create_pending_area();
Update
RTRIM()
exec dbms_resource_manager.update_plan_directive
(plan => NIGHT_PLAN, group_or_subplan => OTHER_GROUPS, new_max_est_exec_time => 5)
;
select rtrim(Tech
) from dual;
Submit
Teil 3
anger als 20
Ver
andern Sie den Plan so, dass f
ur adhoc user alle Abfragen, die l
Sekunden dauern, geblockt werden. Auerdem sollten diese User nicht mehr als
6 paralelle Sessions ge
offnet haben k
onnen. Uberpr
ufen Sie Ihr Ergebnis anhand
eines geeigneten Szenarios.
306
ANHANG A. APPENDIX
exec dbms_resource_manager.clear_pending_area();
exec dbms_resource_manager.create_pending_area();
Diese Abfrage gibt eine Zeichenkette von 3 Zeichen, beginnend beim ersten
Zeichen, zur
uck.
Update
exec dbms_resource_manager.update_plan_directive
(plan => NIGHT_PLAN, group_or_subplan => ADHOC_Group,
new_max_est_exec_time => 20, new_parallel_degree_limit_p1 => 6)
;
Submit
Diese Abfrage gibt eine Zeichenkette von 2 Zeichen, beginnend beim dritten
Zeichen, zur
uck.
exec dbms_resource_manager.SUBMIT_pending_area();
A.3.8
Buffer-Cache
INSTR()
select ename as Nachname, instr(ename,S) from emp;
NACHNAME INSTR(ENAME,S)
--------------------------SMITH
1
ALLEN
0
WARD
0
...
Es wird in der Spalte Nachname (ename) nach dem Vorkommen von S gesucht und die Position zur
uckgegeben. Wird ,S nicht gefunden, so wird eine 0
zur
uckgegeben.
Es wird die L
ange der Spalte Nachname (ename) zur
uckgegeben.
39
36
1.1.7
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
10. Erzeugen Sie eine Tabelle angestellte auf Basis der Tabelle scott.emp
select 1-value/
(
select sum(value)
from v$sysstat
where lower(name) in (consistent gets,db block gets)
)
from v$sysstat
where lower(name) in (physical reads)
;
,938784339
,93226288
,92621924
,919666046
309
310
ANHANG A. APPENDIX
select * from emp where sal > 1000 and deptno = 30;
select * from emp where sal < 1000 or sal > 3000;
16. Schauen Sie sich das Hit Ratio an. Was passiert und warum?
select * from emp where not sal > 1000;
select 1-value/
(
select sum(value)
from v$sysstat
where lower(name) in (consistent gets,db block gets)
)
from v$sysstat
where lower(name) in (physical reads)
;
,697806485
17. Fragen Sie die Tabelle Angestellte ab. Da Sie die Abfrage gleich wiederholen
m
ochten, sollten die Bl
ocke nicht gleich wieder aus dem cache rausfliegen. Was
m
ussen Sie tun?
,691264487
,682978723
18. Stellen Sie sicher, dass Full-Table-Scans der Tabelle Angestellte immer am
MRU-Ende angef
ugt werden. Was m
ussen Sie hierf
ur tun?
Priorit
atsregeln
Wie schon aus der Schulmathematik bekannt, geht Punktrechnung vor Strichrechnung. Bei SQL kommen nun neben dieser Regel auch noch die Logikoperatoren ins Spiel. Die Reihenfolge der Auswertung ist:
1. Vergleichsoperatoren (=, <>, >=, <=).
2. NOT
3. AND
4. OR
Die Reihenfolge der Anordnung spielt hierbei keine Rolle. Das heit, sal >1000
and sal <3000 and sal <>500 entspricht sal <>500 and sal >1000 and sal
<3000.
,727582741
select * from emp where sal >= 1000 and sal <= 3000 or sal > 5000;
A.3.9
Kleine Optimierungs
ubung
Diese Anweisung ermittelt die Mitarbeiter, deren Gehalt zwischen 1000 und
3000 liegt oder deren Gehalt gr
oer als 5000 ist. Durch Klammersetzung kann
die Reihenfolge der Abarbeitung ver
andert werden.
select * from emp where sal >= 1000 and (sal <= 3000 or sal > 5000);
Diese Anweisung ermittelt die Mitarbeiter, deren Gehalt entweder kleiner gleich
3000 oder gr
oer 5000 ist. Es werden nur die Datens
atze angezeigt, deren Gehalt
zus
atzlich gr
oer gleich 1000 ist.
35
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
32
Es werden die Spalten Mitarbeiternummer (empno), Mitarbeiternamen (ename), Gehalt (sal) und Gehalt*1.3 angezeigt. Mehrfache Zeilen werden durch
DISTINCT direkt nach dem SELECT ausgeblendet.
select distinct job from emp;
4. Andern
Sie den Preis aller Produkte der Tabelle products um 10% nach oben.
Die Undo-Informationen sollten im Rollback-Segment rbs01 erstellt werden.
set transaction use rollback segment rbs01;
start ~/1ZO-033/Northwind-Skript/products.txt
Es werden alle Jobs (job) der Tabelle emp angezeigt. Da einige Mitarbeiter
den gleichen Job haben, tauchen diese Jobs dementsprechend mehrfach auf.
Die Duplikate werden durch DISTINCT nicht angezeigt. Eine Verkettung von
Spalten ist mit || m
oglich.
Szenario 1
Es wird die Spalte ename, verkettet mit dem Literal ist ein und mit job,
angezeigt.
-- Session 1:
connect "sys/sys@testdb29 as sysdba";
-- Session 2:
connect scott/tiger@testdb29;
-- Session 1:
update products set unitprice = unitprice*1.1;
77 Zeilen wurden aktualisiert.
-- Session 2:
select productname, unitprice
from sys.products
where productid = 75
;
PRODUCTNAME
UNITPRICE
---------------------------------------- ---------Rhonbr
au Klosterbier
9,38
1.1.3
H
aufig ist es wichtig, einen Uberblick
u
ber den Aufbau einer Tabelle zu verschaffen. DESCRIBE beschreibt die Struktur der entsprechenden Tabelle und
gibt Auskunft u
ber Spaltennamen, Datentypen und NULL-Werten.
describe tabellenname;
describe employees;
Name
Null?
Typ
------------------------------EMPNO
NOT NULL
NUMBER(4)
ENAME
VARCHAR2(10)
JOB
VARCHAR2(9)
MGR
NUMBER(4)
HIRE
DATEDATE
SAL
NUMBER(7,2)
COMM
NUMBER(7,2)
DEPTNO
NUMBER(2)
1.1.4
-- Session 1:
commit;
-- Session 2:
select productname, unitprice
from sys.products
where productid = 75
;
PRODUCTNAME
UNITPRICE
---------------------------------------- ---------Rhonbr
au Klosterbier
10,32
Szenario 2 und 3
-- Session 1:
delete from products where productid=77;
select productname, unitprice from sys.products where productid = 77;
Es wurden keine Zeilen ausgew
ahlt.
-- Session 2:
select productname, unitprice from sys.products where productid = 77;
PRODUCTNAME
UNITPRICE
---------------------------------------- ---------Original Frankfurter gr
une Soe
17,3
-- Session 1:
commit;
-- Session 2:
select productname, unitprice from sys.products where productid = 77;
Es wurden keine Zeilen ausgew
ahlt.
313
314
ANHANG A. APPENDIX
Szenario 4
1.1
-- Session 2:
set transaction read only;
select productname, unitprice from sys.products where
PRODUCTNAME
UNITPRICE
---------------------------------------- ---------Rh
onbr
au Klosterbier
10,32
-- Session 1:
update products set unitprice = unitprice*1.1;
commit;
-- Session 2:
set transaction read only;
select productname, unitprice from sys.products where
PRODUCTNAME
UNITPRICE
---------------------------------------- ---------Rh
onbr
au Klosterbier
10,32
-- Session 1:
update products set unitprice = unitprice*1.1;
commit;
select productname, unitprice from sys.products where
PRODUCTNAME
UNITPRICE
---------------------------------------- ---------Rh
onbr
au Klosterbier
12,49
-- Session 2:
select productname, unitprice from sys.products where
PRODUCTNAME
UNITPRICE
---------------------------------------- ---------Rh
onbr
au Klosterbier
10,32
--- Ein commit beendet set transaction read only:
commit;
-- Session 1:
update products set unitprice = unitprice*1.1;
commit;
select productname, unitprice from sys.products where
PRODUCTNAME
UNITPRICE
---------------------------------------- ---------Rh
onbr
au Klosterbier
13,74
-- Session 2:
select productname, unitprice from sys.products where
PRODUCTNAME
UNITPRICE
---------------------------------------- ---------Rh
onbr
au Klosterbier
13,74
Einfache SQL-Abfragen.
Szenario 5:
-- Session 2:
set transaction read only;
-- Session 1:
-- 12 mal
insert into sys.products select * from sys.products;
commit;
delete from sys.products where productid=75;
4096 Zeilen wurden gel
oscht.
insert into sys.products select * from sys.products;
...
Data Retrieval
productid = 75;
1.1.1
Kommentare
-/*
*/
1.1.2
productid = 75;
Eine der Hauptaufgaben in einer Datenbank ist das Abfragen der gew
unschten
Datens
atze. Hierf
ur stellt SQL die SELECT ... FROM Anweisung zur Verf
ugung.
Eine SELECT-Anweisung gibt als Ergebnismenge eine, mehrere oder alle Spalten einer Tabelle zur
uck (Auswahl).
productid = 75;
productid = 75;
Sollen alle Spalten selektiert werden, so setzen Sie anstelle der Spaltenname
einfach den Stern *.
select * from dept;
Es werden alle Spalten der Tabelle dept angezeigt.
select deptno, dname from dept;
productid = 75;
productid = 75;
Es werden die Abteilungsnummern (deptno) und Abteilungsnamen (dname) aller Abteilungen angezeigt. Sollten sich in Aliasnamen Sonderzeichen oder Leerzeichen befinden, so ist der Aliasname in Anf
uhrungzeichen zu setzen.
Die Uberschriften
der Spalten k
onnen durch einen Alias angegeben werden (spaltenname AS aliasname). Das Wort AS kann bei Aliasnamen weggelassen werden.
select deptno as "Abteilungsnummer", dname as "Abteilungsname" from dept;
Es werden die Abteilungsnummern (deptno) und Abteilungsnamen (dname) aller Abteilungen angezeigt. Die Spalten
uberschrift von depto ist Abteilungsnummer und die Spalten
uberschrift von dname ist Abteilungsname.
Zwischen SELECT und FROM kann auch eine Zeichenkette stehen. Diese mu
in einfache Anf
uhrungszeichen gesetzt werden. Zwischen SELECT und FROM
kann auch ein arithmetischer Ausdruck stehen.
select empno as "Mitarbeiternummer",
ename as "Mitarbeitername",
sal as "Gehalt",
sal*1.3 as "Bruttogehalt"
from emp
;
31
28
ShipCity
ShipRegion
ShipPostalCode
ShipCountry
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
varchar2(15)
varchar2(15)
varchar2(10)
varchar2(15)
NULL
NULL
NULL
NULL
A.3.12
Index-Cluster
Im folgenden werden Sie einen Index-Cluster kennen lernen und praktisch erstellen.
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
1. F
uhren Sie folgende Anweisung aus, um den Cluster zu erstellen.
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
3. Erstellen Sie eine Tabelle emp und ordnen diese dem Cluster zu.
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
-------------------------------------------------
317
318
ANHANG A. APPENDIX
27
1.0.4
Ubersicht
u
ber die Beispieltabellen
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
SUPPLIERID
COMPANYNAME
CONTACTNAME
CONTACTTITLE
ADDRESS
CITY
REGION
POSTALCODE
COUNTRY
PHONE
FAX
HOMEPAGE
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
24
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
Literaturverzeichnis
[1] Stefan Hietel. dama.go GmbH.
http://www.damago.de.
[2] Robert Warnke. My Website.
http://rowa.giso.de.
[3] Robert Warnke. My Website, Oracle.
http://rowa.giso.de/oracle.
[4] Website. mySQL-ODBC-Treiber.
http://www.mysql.com/get/Downloads/MyODBC3/MyODBC-3.51.06.exe/from/pick.
[5] Website. Oracle.
http://www.oracle.com.
[6] Website. Oracle Certification.
http://www.oracle.com/education/certification.
[7] Website. Oracle Download.
http://otn.oracle.com/software/index.html.
[8] Website. Oracle Isql plus.
http://www.oracleadvice.com/Tips/isqlplus.htm.
[9] Website. Oracle-JDBC-Type-4-Treiber.
http://technet.oracle.com/software/tech/java/sqlj jdbc/software index.htm.
[10] Website. Oracle Thin-Treiber.
http://otn.oracle.com/software/tech/java/sqlj jdbc/htdocs/jdbc9201.html.
[11] Website. orarun.rpm.
ftp://ftp.suse.com/pub/suse/i386/supplementary/commercial/Oracle/orarun.rpm.
[12] Website. Prometric Authorized Testing Centers.
http://www.prometric.com.
[13] Website. Tech on the Net, Data Types.
http://www.techonthenet.com/oracle/datatypes.htm.
[14] Website. Tech on the Net, Oracle Built-In Functions.
http://techonthenet.com/oracle/functions/index.htm.
321
23
Index
variable, 76
*, 34
SELECT, 31
*.fmb, 232
*.fmx, 233
.ctl, 110
.dbf, 110
.log, 110
.ora, 103, 110
.profile, 18
/*+ CACHE() */, 212
/*+ALL ROWS*/, 200
/*+RULE*/, 200
/etc/hosts, 154
/etc/oratab, 24, 104
/lib/libc.so.6, 19
/opt/oracle, 18
?, 34
%, 34
%rowtype, 83
%type, 83
, 34
1-Tier, 147
2-Tier, 147
3DES, 148
3GL-Sprache, 148
7 DICTIONARY ACCESSIBILITY, 141
108
Uberwachen,
alertSID.log, 105
Pfad, 108
Alias, 31
Leerzeichen, 31
SID, 154
Sonderzeichen, 31
ALL
Unterabfragen, 59
ALL *, 111
ALL OBJECTS, 111
ALL ROWS
Optimierung, 200
ALLOCATE
CHANNEL, 187
ALTER
DATABASE, 106
MOUNT, 106
OPEN READ ONLY, 106
OPEN READ WRITE, 106
UNMOUNT, 106
Index, 129
SYSTEM, 106
DISABLE RESTRICTED SESSION, 106
ENABLE RESTRICTED SESSION, 106
KILL SESSION, 106
RESET, 104
RESUME, 106
SET, 104
SUSPEND, 106
TABLE, 62
ADD, 62
ADD CONSTRAINT, 72
CONSTRAINT CHECK, 71
DROP, 62
DROP CONSTRAINT, 73
MODIFY, 62
NOT NULL, 73
Table
Tablespace, 125
Undo Tablespace, 123
USER, 80
User, 140
ACCEPT, 76
Access
Methoden, 200
ACCOUNT
LOCK, 137
UNLOCK, 137
ADD
CONSTRAINT
UNIQUE, 72
ADD LOGFILE GROUP
REUSE, 265
ADD MONTHS(), 46
ADHOC USERS, 206
ADO, 149
Advanced Replication, 94
Advanced Security, 148
Advances Queuing, 94
Advice
Cache, 212
After-Images, 167
AKTIVE
322
Kontrolldateien
Tablespace
Datendateien
Rollback-Segmente
Redo-Log-Gruppen
Dies ist der letzte Schritt vor der Erstellung der Datenbank. Standardm
aig ist
die obere Checkbox mit einem Haken versehen und bei einem Klick auf die untere Checkbox gibt es die M
oglichkeit eine eigene Datenbankvorlage zu speichern.
Das heit, es wird so etwas wie ein Template angelegt, dass sp
ater 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
ussen noch die Passw
orter angegeben werden. Diese Passw
orter gelten
f
ur den Benutzer SYS und f
ur den Benutzer SYSTEM. Zur Sicherheit m
ussen
die Passw
orter wiederholt werden.
SYS Passwort: change on install
SYSTEM Passwort: manager
Nach dem Klick auf Beenden ist die Erstellung der Datenbank abgeschlossen
und die Passw
orter sind gespeichert.
20
KAPITEL 1. EINFUHRUNG
IN PL / SQL ORACLE 8I/9I
runInstaller
Einloggen als User oracle mit X-Window. Um Probleme mit der Variable
LANG zu vermeiden, ist diese zu l
oschen. Um die eigentliche Installation zu star
ten, ist ein Wechsel in das Verzeichnis Disk1 notwendig. Uber
./runInstaller
wird die grafische Installation gestartet und das erste Fenster zur Benutzerf
uhrung
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 u
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
ort.
In diesem Fall ist, da der User bereits angelegt ist und zur Gruppe oinstall und
dba geh
ort, 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
ur eine Installation des Oracle Servers und aller Management-Tools
die oberste Option gew
ahlt werden.
Auswahl der Installationsart.
Auch hier sollte die oberste Option (Enterprise Edition) ausgew
ahlt werden.
INDEX
CHANNEL
ALLOCATE, 187
RELEASE, 193
RMAN, 185
Channel
Parallelisieren, 190
CHECK
Constraint, 71
DROP CONSTRAINT, 72
Checkpoint, 98
forcieren, 115
CHOOSE
Optimierung, 200
CHR(, 41
CKPT, 94, 98
Client
Application, 149
Application RDBMS, 149
M$-Access, 259
Cluster
Arten, 218
Organized, 218
Clustered Table, 125
COALESCE
Index-Zusammenf
uhrung, 130
COALESCE(), 88
COLD BACKUP, 160
Cold Backup, 273
COMMIT, 78
automatisch, 78
GRANT, 80
Before-Image, 123
Constraint
deferred, 134
DELETE, 77
INSERT, 75
Log Writer, 98
ON
DELETE, 126
UPDATE, 76
COMPLETE
REFRESH, 204
Complex Network Architecture, 147
CONCAT(), 38
Concatenated
Index, 127
CONFIGURE
RETENTION POLICY, 193
RMAN, 184
CONNECT, 188
CONNECT DATA, 156
CONNECT TIME, 136
Connection Manager, 148
Connection Pooling, 158
Consistent Gets, 211
Console, 25
CONSTRAINT
Aktivierung, 74
325
Deaktivierung, 74
Constraint
bei Tabellenerstellung, 73
CHECK, 71
deferred, 134
DISABLE, 133
ENABLE, 133
NOVALIDATE, 133
Primary Key, 69
Regelverst
oe, 133
Stati, 133
UNIQUE, 72
VALIDATE, 133
verz
ogerte, 134
Constraints
Index l
oschen, 131
Contraints
251
Ubung,
Control
Files, 98
RMAN, 184
Sicherung, 187
RMAN, 185
Control Files, 94, 99, 113
263, 277
Ubung,
Informationen zu, 113
Lage, Namen, 113
sichern, 176
skripten, 177, 277
spiegeln, 113, 263
TO TRACE, 177, 277
wiederherstellen, 177, 277
CONTROLFILE
AUTOBACKUP, 187
Conversion
Funktionen, 41
COUNT(), 56
cpio, 20
CPU
Nutzung
Zuweisen, 206
CPU PER CALL, 136
CPU PER SESSION, 136
Crash, 97, 160
Recovery
Zeit, 192
CREATE
250
Ubung,
CLUSTER, 219
DATABASE, 109
DEFAULT, 90
INDEX, 67, 219
Index, 128
MATERIALIZED VIEW, 204
DEFERRED, 204
IMMEDIATE, 204
REFRESH, 204
PFILE, 103
326
PROCEDURE, 85
ROLE, 80, 143
ROLLBACK SEGMENT, 215
SEQUENCE, 65
Informationen, 66
wichtige Optionen, 66
SPFILE, 103
SYNONYM
PUBLIC, 64
TABLE, 60, 219
Constraint, 73
EXCEPTIONS, 133
SELECT, 60
UNTERABFRAGE, 60
Table
Tablespace, 125
tempor
ar, 126
TABLE CACHE, 212
TABLESPACE, 117
UNDO TABLESPACE, 214
Undo Tablespace, 123
USER, 80
User, 137
VIEW, 63
CREATE MATERIALIZED VIEW
Berechtigung, 205
GRANT, 205
CREATE ROLE
BY password, 143
DENTIFIED, 143
EXTERNALLY, 143
GLOBALLY, 143
CROSS JOIN, 52, 88
CROSSCHECK
BACKUP, 190
CURRENT
Redo Log Group, 115
Cursor, 196
Erstellen, 86
CyberCafe, 148
Darstellungsschicht, 149
Data Block Management, 121
Data Control Language, 30
Data Definition Language, 30, 60
Data Dictionary, 111
SEQUENCE, 66
Tablespace, 117
View Categories, 111
Data Dictionary Cache, 94, 96
Data Dictionary Table
Index, 67
Data Files
erstellen, 177
Data Manipulation Language, 30, 75
Data Retrieval, 30
Data Warehousing, 109
Data-Dictionary
INDEX
Eigent
umer, 101
DATABASE
ALTER, 106
BACKUP
RMAN, 186
CREATE, 109
Database
CREATE, 109
Files, 94
Name, 21
Database Buffer Cache, 94, 96, 97
Tuning, 209
Database Writer, 98
DATAFILE
NEWNAME, 190
Datafile
hinzuf
ugen, 119
vergr
oern, 119
verschieben auf anderen Tablespace, 120
Datafiles, 94, 99, 117
umbenennen, 105
verschieben, 105
Datawarehouses, 204
DATE
Datentyp, 60
Dateinamen
feste Regeln, 110
Daten
Undo, 123
Datenbank, 99
Erstellen, 109
Integrit
at, 99
Intentigrit
at, 113
Logische Struktur, 99
physikalische Struktur, 99
Datenbankanbindung
PHP
mySQL, 225
Oracle, 224
Datenbankarten, 109
Datenbankassistent, 22
Datenintengrit
at, 133
Datenintigrit
at, 148
Datenspeicherung
logisch, 117
physisch, 117
Datentr
ager
Recovery, 165
Datentyp
in TABLE, 60
Index, 127
Datentypen
PL/SQL, 83
Datum
Berechnungen, 45
Funktionen, 45
Sortierung, 36
sysdate, 45, 46
19
16
INHALTSVERZEICHNIS
0.1
0.1.1
Intro
M
oglichkeiten der Zertifizierung
INDEX
PL/SQP
LOOP, 85
FORCE
STARTUP, 106
VIEW, 63
Foreign Key
CASCADE, 71
Erstellen, 69
kaskadierend l
oschen, 71
Formate
Datum, 42
Zahlen, 41
Forms
Developer Suite 10, 232
Foundation Layer, 149
FREELIST
automatisch verwaltet, 121
manual konfigurierbar, 122
FREELIST GROUPS
automatisch verwaltet, 121
Fremdschl
ussel, 69
CASCADE, 71
FROM
REVOKE, 81
SELECT, 31
FROM PUBLIC
GRANT, 141
FULL OUTER JOIN, 89
Full Table Scan, 200
Funktionen
248
Ubung,
Advanced, 43
Conversion, 41
Datum, 45
Mathematical, 44
Zeichenketten, 37
Funktionsindex
erstellen, 129
Gateway
Prozess, 148
gcc, 19
Global Database Name, 21
GLOBALLY
CREATE ROLE, 143
GLOBALLY AS
User
Authentifizierung, 137
GRANT
ANALYZE TABLE, 205
ANY, 141
CREATE MATERIALIZED VIEW, 205
ON, 81
ROLE TO USER, 143
TO, 80
WITH ADMIN OPTION, 141
WITH GRANT OPTION, 142
Granulate, 96
329
grep, 108
Group
Unix, 18
GROUP BY, 56
Ubung,
239
HAVING, 57
AVG, 57
NULL, 57
Gruppenfunktionen, 55
gunzip, 20
Handoff, 150
Hash
Cluster, 218
Hash Join, 200
Hash Key Access, 200
HAVING, 57
AVG, 57
NULL, 57
help
lsnrctl, 151
Heterogene Dienste, 148
Hint
Cache, 212
Hints
Optimierung
Modus erzwingen, 200
Hinzuf
ugen
Rechte, 80, 81
Hit Ratio
Cache
Messen, 210
Host Naming, 154
Ubung, 272
HOSTNAME, 153, 154, 271
Hot Backup, 170
HTTP
Datenbank-Konnektivit
at mit, 147
Listener
OC4J, 232
I/O
Large Pool, 97
IDENTIFIED
CREATE ROLE, 143
CREATE USER, 80
IDENTIFIED BY
Role, 144
Idle
Session, 158
IDLE TIME, 136
IF
DECODE, 44
PL/SQL, 83
IIOP
Datenbank-Konnektivit
at mit, 147
IMMEDIATE
BUILD, 204
330
IN, 33
LOOP, 85
Unterabfragen, 58
INCLUDING
TABLES, 220
Incomplete
Recovery, 179
INDEX, 66
ANALYZE, 201
automatische Erstellung, 67, 69, 72
CREATE, 67
DROP, 67
Information, 67
Nutzen, 66
Richtlinien, 68
UNIQUE, 67
Index, 127, 198
Uberpr
ufen, 199
283
Ubung,
ALTER, 129
ANALYZE, 199
Applikationsspezifisch, 127
Arten
logisch, 127
physikalisch, 127
B-Tree, 127
Normal, 127
Reverse Key, 128
Bitmap, 128
Cluster, 218
Ubung,
317
COALESCE, 130
CREATE, 128
Domain, 127
erstellen, 128
Funktions-, 129
Informationen, 131
l
oschen, 131
logisch u
ufen, 131
berpr
Monitoring, 131
Nonpartitioniert, 127
Nonuique, 127
Organized, 218
Partitioniert, 127
REBUILD, 130
Rebuilding, 198
Recreation, 198
reorganisieren, 130
Scan
Stored Outline, 203
staleness Korrektur, 130
Statistik, 131
Storage Parameter, 129
Storage Parameter
andern, 129
Table, 125
Tablespace, 127
Unique, 127
verschieben, 130
INDEX
Views, 131
Index-Lookup, 200
Index-Organized Table, 125
Index-Organized Tables, 220
INDEX STATS, 131, 199
Informationen
u
ber User, 140
Table, 126
init.ora
OPTMIZER GOAL, 200
INITCAP(), 38
INITIAL
STORAGE, 121
Initialisierung
Parameter, 102
Anzeige, 102
Parameterfiles, 103
Initialisierungsparameter
OMF, 110
Inline View, 58
INNER JOIN, 89
INSERT, 75
250
Ubung,
Berechtigung, 81
DEFAULT, 90
GRANT, 81
MERGE, 89
VALUES, 75
Installation
Oracle, 18
Systemvoraussetzungen, 18
Instance, 96
Recovery
SMON, 105, 107
Instance-Manager, 25
INSTANCE NAME, 157
Instanz, 94, 96, 102
Herunterfahren, 107
herunterfahren
Privileg, 101
Recovery, 97
Zeitaufwand, 98
Start
mit PFILE, 104
starten, 24
Privileg, 101
stoppenn, 24
INSTR(), 39
Integrit
at
Datenbank, 99
Fehlermeldung, 69
referentiell, 69
Intentigrit
at
der Datenbank, 113
Internet Directory
Oracle , 148
Internet Files System
Datenbank-Konnektivit
at mit, 147
INHALTSVERZEICHNIS
15
12
INHALTSVERZEICHNIS
3.6
3.7
3.5.3
BUILD . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
3.5.4
REFRESH . . . . . . . . . . . . . . . . . . . . . . . . . . 204
3.5.5
Voraussetzungen . . . . . . . . . . . . . . . . . . . . . . . 205
3.5.6
Ubung
Materialized Views . . . . . . . . . . . . . . . . . . 205
Einf
uhrung in den Resourcen-Plan . . . . . . . . . . . . . . . . . 206
3.6.1
Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
3.6.2
3.6.3
3.6.4
3.6.5
3.6.6
Ubung
Resourcen-Plan . . . . . . . . . . . . . . . . . . . . 208
3.7.2
Latches . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
3.7.3
3.7.4
3.7.5
L
osungsans
atze . . . . . . . . . . . . . . . . . . . . . . . . 211
3.7.6
3.7.7
Cache-Advice . . . . . . . . . . . . . . . . . . . . . . . . . 212
3.7.8
3.7.9
Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
. . . . . . . . . . . . 210
3.7.10 Ubung
Datenbank-Tuning . . . . . . . . . . . . . . . . . . 213
3.8
Zweck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
3.8.2
3.8.3
3.8.4
3.8.5
Online-Setzen . . . . . . . . . . . . . . . . . . . . . . . . . 215
3.8.6
3.8.7
3.8.8
Offline-Setzen . . . . . . . . . . . . . . . . . . . . . . . . . 215
3.8.9
L
oschen von Rollback Segmenten . . . . . . . . . . . . . . 215
3.8.11 Ubung
Undo / Rollback Segments . . . . . . . . . . . . . 216
INDEX
Minextents, 215
MINUS, 54
Miss Ratio
Cache
Messen, 210
MODIFY
250
Ubung,
Monitoring
Index, 131
MONTHS BETWEEN(), 46
MOUNT
ALTER DATABASE, 106
Control Files, 113
STARTUP, 104, 105
Mount
Privileg, 101
MRU, 212
Multithreaded Server, 158
mySQL, 224
Datenbankanbindung
PHP, 225
n-Seite
Foreign Key, 70
N-Tier, 147
Name Server
Oracle, 156
Named Pipes, 150
Namensaufl
osung, 153
271
Ubung,
testen, 152
Namensdienste, 149
NAMES.DEFAULT DOMAIN, 153
NAMES.DIRECTORY PATH, 153
names.directory path, 271
Naming
Host, 154
Local, 155
NATURAL JOIN, 88
255
Ubung,
Nested Loops, 200
Net 8 Assistant, 23
Net Application Proxy Kit, 148
Net Architektur, 149
Net Configuration Assistant, 153
Net Foundation Layer, 149
Net Services, 147
Net-8, 147
netass, 25
netca, 25, 153
netmgr, 23
Network
Protocol, 149
Network Architecture
Complex, 147
Simple, 147
Single, 147
Netzwerkbetrieb, 147
333
NEWNAME
SET, 190
NEXT
STORAGE, 121
NLS CURRENCY, 42
NOARCHIVELOG, 99, 116
Backup
OFFLINE, 160
Recovery
OFFLINE, 162
NOFORCE
VIEW, 63
NOMOUNT
STARTUP, 104, 105
Non-Equijoins, 50
Non-System Tablespace, 117
Nonpartitioniert
Index, 127
Nonuique
Index, 127
Nordwind, 27
Normal
Index B-Tree, 127
Normalform, 26
Normalisierungsprozess, 26
NOT, 34
NOT IDENTIFIED
CREATE ROLE, 143
NOT NULL
COALESCE, 88
Constraint, 73
Foreign Key, 70
Index, 127, 128
JOIN, 52
Primary Key, 69
NOVALIDATE
Constraint, 133
NTS, 153
NULL
COALESCE, 88
Constraint
NOT NULL , 73
JOIN, 50, 52
Primary Key, 69
Sortierung, 36
Tabellenstruktur, 32
UNIQUE, 72
NULLIF(), 88
Number
Datentyp, 60
NVL
generalisiertere Form von, 88
NVL(), 43
NVL2(), 43
Objekt
Berechtigungen, 81
Beschreibung, 111
334
Privilegien, 141
Rechte, 81
Objekt-Datentyp
Index, 127
OBSOLETE
DELETE, 193
REPORT, 189
Obsolete
Sicherungen, 193
OC4J, 232
OCI, 149
ODBC, 149, 228
Treiber, 230
OEM
Meta-Daten, 101
Sicherheitproblem
unter Windows, 140
Standalone, 101
oemapp, 25
oerr, 25
OFA, 109
OFFLINE
Backup, 160
ARCHIVELOG, 166
Recovery, 162, 169
Offline
Recovery, 99, 100
Tablespace, 119
Offline-Redo-Logs, 116
OID, 148
oinstall, 18
OLTP, 109, 214
Index, 127
OLTP USERS, 206
OMF, 110
Initialisierungsparameter, 110
ON
COMMIT
DELETE, 126
CREATE USER, 80
FULL OUTER JOIN, 89
GRANT, 81
INNER JOIN, 89
LEFT OUTER JOIN, 89
MERGE, 89
Objekt Privileg, 141
REVOKE, 81
RIGHT OUTER JOIN, 89
ONAMES, 153, 156, 271
ONLINE
Backup, 170
Recovery, 174
Online
Backup, 99
Recovery, 99
Sicherung, 99
Tablespace, 119
Online-Redo-Logs, 115
INDEX
OPEN
READ ONLY
ALTER DATABASE, 106
READ WRITE
ALTER DATABASE, 106
STARTUP, 104, 105
User-Stati, 136
operating system files, 99
Operation
INTERSECT, 54
Mengen, 54
MINUS, 54
UNION, 54
UNION ALL, 55
Operator
logischer, 34
Priorit
atsregeln, 35
OPI, 149
OPS, 150
Optimal Flexible Architecture, 109
Optimierer
288
Ubung,
Kostenbasiert, 200
Regelbasiert, 200
Optimierung, 200
Modus, 200
Modus erzwingen, 200
Optionale Background-Prozesse, 99
OPTMIZER GOAL, 200
OR, 34
ORA-00214, 274
ORA-00289, 182
ORA-00308, 182
ORA-00604, 110
ORA-00942, 269
ORA-01031, 269
ORA-01035, 106
ORA-01110, 164, 169, 177
ORA-01113, 164, 169
ORA-01157, 169, 177
ORA-02290, 268
ORA-06553, 110
ORA-08108, 130
ORA-12154, 271
ORA-12541, 271
ORA-12913, 118
ORA-25128, 268
ORA-25150, 129
ORA DBA
Windows-Gruppe
Sicherheitloch, 140
Oracle
Block, 171
Enterprise Manager, 25
Examen, 16
Installation, 18
Konfigurieren, 23
Launch Pad, 25
INHALTSVERZEICHNIS
3 High-Performance-Tuning
3.1
3.2
3.3
11
195
3.1.2
TKPROF . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
3.1.3
3.1.4
3.1.5
3.1.6
3.1.7
Ubung
Tools zum Performance-Tuning . . . . . . . . . . 197
3.2.2
3.2.3
Uberpr
ufen der Index-G
ultigkeit . . . . . . . . . . . . . . 199
3.2.4
Ubung
Index-Verwaltung . . . . . . . . . . . . . . . . . . 199
Optimierungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
3.3.1
Access-Methoden . . . . . . . . . . . . . . . . . . . . . . . 200
3.3.2
Join-Methoden . . . . . . . . . . . . . . . . . . . . . . . . 200
3.3.3
3.3.4
3.3.5
3.3.6
3.3.7
Experiment 1 . . . . . . . . . . . . . . . . . . . . . . . . . 201
3.3.8
Experiment 2 . . . . . . . . . . . . . . . . . . . . . . . . . 201
3.3.9
Experiment 3 . . . . . . . . . . . . . . . . . . . . . . . . . 201
3.3.10 Ubung
Optimierung . . . . . . . . . . . . . . . . . . . . . 202
3.4
3.5
Gespeicherte Ausf
uhrungspl
ane . . . . . . . . . . . . . . . 203
3.4.2
3.4.3
3.4.4
Ubung
Stored Outlines . . . . . . . . . . . . . . . . . . . . 203
3.4.5
Ubung
Otimierungen . . . . . . . . . . . . . . . . . . . . . 203
Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
3.5.2
. . . . . . . . . . . . 204
INHALTSVERZEICHNIS
2.12.3 Andern
der Storage Parameter eines Index
2.12.4 Index verschieben
. . . . . . . . 129
. . . . . . . . . . . . . . . . . . . . . . 130
2.12.11 Ubung
Index . . . . . . . . . . . . . . . . . . . . . . . . . 132
2.13 Datenintengrit
at . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
2.13.1 Constraint Stati . . . . . . . . . . . . . . . . . . . . . . . 133
2.13.2 Exceptions-Tabelle . . . . . . . . . . . . . . . . . . . . . . 133
2.13.3 Verz
ogerte (deferred) CONSTRAINTs . . . . . . . . . . . 134
2.13.4 Ubung
Constraints . . . . . . . . . . . . . . . . . . . . . . 134
2.14 Password Security and Resources . . . . . . . . . . . . . . . . . . 135
2.14.1 Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
2.14.2 Resource Management . . . . . . . . . . . . . . . . . . . . 136
2.15 User . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
2.15.1 Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
2.15.2 User und Schema erstellen . . . . . . . . . . . . . . . . . . 137
2.15.3 Externe Authentifikation
. . . . . . . . . . . . . . . . . . 138
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
2.15.7 User l
oschen
. . . . . . . . . . . . . . . . . . . . . . . . . 140
2.15.8 Informationen u
ber User . . . . . . . . . . . . . . . . . . . 140
2.16 Privilegien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
2.16.1 System-Privilegien . . . . . . . . . . . . . . . . . . . . . . 141
2.16.2 Objekt-Privilegien . . . . . . . . . . . . . . . . . . . . . . 141
2.16.3 Informationen u
ber Privilegien . . . . . . . . . . . . . . . 142
2.16.4 Ubung
Benutzerverwaltung . . . . . . . . . . . . . . . . . 142
INDEX
Objekt, 81
RECOVER, 165
DATAFILE
RMAN, 187
STARTUP, 106
RECOVERY
RENAME, 190
Recovery, 115, 160
Block Media, 193
Catalog
Uberpr
ufung, 189
RMAN, 184, 188
Datentr
ager, 165
Incomplete, 179
Instancce
SMON, 105, 107
Instanz, 97
Media, 106
OFFLINE
ARCHIVELOG, 169
NOARCHIVELOG, 162
Offline, 99, 100
ONLINE, 174
Online, 99
Privileg, 101
RMAN, 186
Sicherstellung, 99
Trial, 192
unvollst
andig, 179
Volles Datenbank, 105
Zeitaufwand, 98
Recovery Manager, 184
Recovery-Catalog
RMAN, 188
RECOVERY CATALOG OWNER, 188
Recycle Cache, 96
Redo Log
264
Ubung,
Buffer, 97
Redo Log Archivierung
Optionen a
nern, 105
Redo Log Buffer, 94
Redo Log Files, 115
Gruppe hinzuf
ugen, 115
Gruppe l
oschen, 115
Gruppen, 115
Informationen, 115
Member hinzuf
ugen, 115
Online, 115
SWITCH, 115
umschalten, 115
Redo Log Group
AKTIVE, 115
CURRENT, 115
Redo Logfiles, 94, 99
Redo-Log-Buffer, 209
Redo-Logs
Archive, 116
337
Offline, 116
REFRESH
COMMIT, 204
COMPLETE, 204
CREATE MATERIALIZED VIEW
COMMIT, 204
COMPLETE, 204
FAST, 204
FAST, 204
Regelbasiert
Optimierer, 200
Regelverst
oe
Constraint, 133
Registrierung
Dienste, 150
Regular Table, 125
Reihenfolge
Sortierung, 36
RELEASE
CHANNEL, 193
RENAME
RECOVERY, 190
REPLACE
SCRIPT, 189
VIEW, 63
REPLACE(), 41
REPORT
OBSOLETE, 189
RMAN, 184
UNRECOVERABLE, 189
Repository, 101
Request Queue, 158
RESOURCE, 188
Resource
Plan, 206
resource manager plan, 207, 208
Response Queue, 158
Ressourcen
Zuweisung zu Gruppen, 206
Ressourcen-Manager
303
Ubung,
RESTORE
DATAFILE
RMAN, 187
Restore
Large Pool, 97
RESTRICT
STARTUP, 106
RESTRICTED SESSION
ALTERSYSTEM, 106
Privileg, 106
RESUME
ALTERSYSTEM, 106
RESYNC
CATALOG, 190
Retention
Policy, 193
REUSE
338
278
Ubung,
CONFIGURE, 184
Control-Datei, 185
Kanal, 185
Large Pool, 97
LIST, 184
Parameterfile sichern, 103
Recovery-Catalog, 188
REPORT, 184
SHOW, 184
ROLE, 143
CREATE, 80, 143
ROLLBACK, 78, 123
DELETE, 77
kein bei TRUNCATE, 61
Rollback
Segmente, 123
Segments, 214
Ubung,
312
ROLLBACK SEGMENT
CREATE, 215
Rollback Segments
Anzahl, 214
Rolle, 143
aktivieren, 144
Default, 143
entziehen, 144
erstellen, 143
IDENTIFIED BY, 144
Informationen, 144
l
oschen, 144
maximale Anzahl, 143
Priveleg zuweisen, 143
SET, 143
Rollen, 101
DBA, 101
root.sh, 21
ROUND(), 44
Row Overflow, 220
ROWID, 125
Rowid-Access, 200
ROWNUM, 59
RPAD(), 40
rpm, 19
RSA, 148
RTRIM(), 40
RULE
INDEX
Optimierung, 200
RUN
RMAN, 186
Run-Time Area, 100
Runden, 44
runInstaller, 20
SAVEPOINT, 78
Scalar-Datentyp
Index, 127
Scan
Full Table, 200
Schema, 137
erstellen, 137
Objekte, 111
Schl
ussel
Foreign, 69
Prim
ar, 69
SCN, 179
SCOPE
BOTH, 104
MEMORY, 104
SPFILE, 104
Scott, 27
Script
anzeigen, 189
aufrufen, 189
erstellen, 189
REPLACE, 189
RUN, 189
Secure Sockets Layer
Datenbank-Konnektivit
at mit, 147
Security, 135
Advanced, 148
Segment
Rollback, 214
Undo, 214
Segment Management
Automatic, 123
Segmente, 99
Rollback, 123
Undo, 123
SELECT, 31
Ubung,
238
Berechtigung, 81
DISTINCT, 32
GRANT, 81
GROUP BY, 56
HAVING, 57
Index
g
unstig bei, 128
ung
unstig bei, 127
JOIN, 47
ORDER BY, 36
Unterabfragen, 58
ALL, 59
ANY, 59
IN, 58
INHALTSVERZEICHNIS
2.8
2.7.1
Online-Redo-Logs . . . . . . . . . . . . . . . . . . . . . . 115
2.7.2
2.7.3
Ubung
Redo Log Dateien . . . . . . . . . . . . . . . . . . 116
2.8.2
2.8.3
2.8.4
2.8.5
2.8.6
2.8.7
2.8.8
2.8.9
. . . . . . . . . . . . . . 118
2.9.2
. . . . . . . . . . . . . . . . . . 121
INHALTSVERZEICHNIS
1.4
1.5
1.6
1.7
1.3.5
Ubungen
03 . . . . . . . . . . . . . . . . . . . . . . . . . .
57
1.3.6
Unterabfragen . . . . . . . . . . . . . . . . . . . . . . . .
58
1.3.7
Top-N Analyse . . . . . . . . . . . . . . . . . . . . . . . .
59
1.3.8
Ubungen
05 . . . . . . . . . . . . . . . . . . . . . . . . . .
59
60
1.4.1
CREATE TABLE . . . . . . . . . . . . . . . . . . . . . .
60
1.4.2
DROP TABLE . . . . . . . . . . . . . . . . . . . . . . . .
61
1.4.3
TRUNCATE . . . . . . . . . . . . . . . . . . . . . . . . .
61
1.4.4
ALTER TABLE . . . . . . . . . . . . . . . . . . . . . . .
62
1.4.5
CREATE VIEW . . . . . . . . . . . . . . . . . . . . . . .
63
1.4.6
Andern
einer View . . . . . . . . . . . . . . . . . . . . . .
64
1.4.7
DROP VIEW . . . . . . . . . . . . . . . . . . . . . . . . .
64
1.4.8
64
1.4.9
DROP SYNONYM . . . . . . . . . . . . . . . . . . . . . .
64
65
1.4.11 INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66
Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
1.5.1
Primary Key . . . . . . . . . . . . . . . . . . . . . . . . .
69
1.5.2
Foreign Key . . . . . . . . . . . . . . . . . . . . . . . . . .
69
1.5.3
CHECK . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
1.5.4
UNIQUE . . . . . . . . . . . . . . . . . . . . . . . . . . .
72
1.5.5
NOT NULL . . . . . . . . . . . . . . . . . . . . . . . . . .
73
1.5.6
73
1.5.7
CONSTRAINT Aktivierung . . . . . . . . . . . . . . . . .
74
1.5.8
CONSTRAINT Deaktivierung . . . . . . . . . . . . . . .
74
1.5.9
Ubungen
08 . . . . . . . . . . . . . . . . . . . . . . . . . .
74
75
1.6.1
INSERT . . . . . . . . . . . . . . . . . . . . . . . . . . . .
75
1.6.2
UPDATE . . . . . . . . . . . . . . . . . . . . . . . . . . .
76
1.6.3
DELETE . . . . . . . . . . . . . . . . . . . . . . . . . . .
77
Transaction Control . . . . . . . . . . . . . . . . . . . . . . . . .
78
1.7.1
78
1.7.2
Automatisches COMMIT . . . . . . . . . . . . . . . . . .
78
1.7.3
SAVEPOINT . . . . . . . . . . . . . . . . . . . . . . . . .
78
INDEX
TABLE
ALTER, 62
ADD CONSTRAINT, 72
CONSTRAINT CHECK, 71
DROP CONSTRAINT, 73
NOT NULL, 73
ANALYZE, 201
CONSTRAINT CHECK, 71
CREATE
Constraint, 73
DROP, 61, 98
Erstellen, 60
TRUNCATE, 98
Table, 125
ALTER
Tablespace, 125
Anzeige Tablespace, 125
Cluster-Organized, 218
Clustered, 125
CREATE
Tablespace, 125
Exceptions, 133
Full Scan, 200
Index, 125
Index-Organized, 125, 218
Informationen, 126
Partitioned, 125
Regular, 125
Scan, 200
tempor
ar
CREATE, 126
erstellen, 126
TABLE CACHE
CREATE, 212
TABLES
INCLUDING, 220
Tables
Base , 112
Tablespac
Undo, 118
TABLESPACE
CREATE USER, 80
DEFAULT, 80
Tablespace, 99
ALTER
Table, 125
Anzeige, 117, 125
autoextensible, 119
Arten, 117
autoextensible, 119
CREATE, 117
Table, 125
Dictionary Managed, 118
erzeugen, 117
f
ur Index, 127
IOT, 220
L
oschen, 120
Local Managed, 129
341
Ubung,
282
TNSNAMES, 153, 155, 271
tnsnames.ora, 156
tnsping, 152
TO
GRANT, 80
TO PUBLIC
GRANT, 141
TO CHAR(), 42
TO DATE(), 43
TO NUMBER(), 43
too many rows, 82
Tool
Management, 20
Tools
Leistungs
uberwachung
279
Ubung,
Top-N, 59
TRACE
TO, 177, 277
Trace File
Background, 108
Trace Files, 105, 108
User, 108
Trace-File
in ASCII umwandeln, 196
342
Transaction
Recovery, 214
Rollback, 214
Transaction Control, 30, 78
Transaktion
Rollback, 97
Transaktionen
offene
Anteige, 124
TRANSLATE(), 41
Trial
Recovery, 192
TRIM(), 40
Troubleshooting, 110
TRUNC(), 45
TRUNCATE, 61
kein ROLLBACK, 61
SYS.AUD$ leeren, 145
TABLE, 98
TTC, 149
Tuning
Database Buffer Cache, 209
Two-Task Common, 149
umask, 20
uname, 19
Undo
Daten, 123
Management, 123
Segmente, 123
Segments, 214
Ubung,
312
Tablespace, 123
Andern,
123
ALTER, 123
Anzeige Status, 123
CREATE, 123
DROP, 124
Erstellung, 123
L
oschen, 124
Undo Management, 214
Undo Segment
Tablespace, 117
UNDO TABLESPACE
CREATE, 214
Undo Tablespace, 118
UNDO MANAGEMENT, 214
UNION, 54
UNION ALL, 55
UNIQUE
Constraint, 72
Erstellen, 72
Foreign Key, 70
INDEX, 67
Index, 127
L
oschen, 73
Unique
Index, 127
INDEX
Unix
Authentifikation, 138
Umgebungsvariablen, 109
UNLOCK
ACCOUNT, 137
UNMOUNT
ALTER DATABASE, 106
Unmount
Privileg, 101
UNPARSED, 196
UNRECOVERABLE
Database, 189
unset, 20
Unterabfragen, 58
ALL, 59
ANY, 59
IN, 58
mehrere R
uckgabewerte, 58, 59
UNUSED
Anzeige, 126
Spalte, 126
UPDATE, 76
Berechtigung, 81
GRANT, 81
MERGE, 89
UPPER(), 37
USER
ALTER, 80
CREATE, 80
DROP, 80
User, 101, 137
Authentifizierung, 100, 137
erstellen, 137, 269
in SQPLUS erstellt
unzureichende Berechtigungen, 269
l
oschen, 140
Objekte, 111
Prozess, 100
Rolle zuweisen, 143
SYS, 101
SYSTEM, 101
Tablespace, 137
Unix, 18
User Data
Storing, 125
User Process, 94
User Trace
Aktivieren, 108
Deaktivieren, 108
User Trace Files, 108
User-Status
EXPIRED, 136
LOCKED, 136
OPEN, 136
USER *, 111
USER DUMP DEST, 108
SQL TRACE, 196
USER IND COLUMNS, 132
Inhaltsverzeichnis
0.1
Intro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
0.1.1
16
M
oglichkeiten der Zertifizierung . . . . . . . . . . . . . . .
1 Einf
uhrung in PL / SQL Oracle 8i/9i
1.1
1.2
1.3
17
1.0.1
18
1.0.2
Oracle-Tools . . . . . . . . . . . . . . . . . . . . . . . . .
25
1.0.3
Datenbank-Design . . . . . . . . . . . . . . . . . . . . . .
26
1.0.4
Ubersicht
u
ber die Beispieltabellen . . . . . . . . . . . . .
27
1.0.5
SQL Statements . . . . . . . . . . . . . . . . . . . . . . .
30
Data Retrieval . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
1.1.1
Kommentare . . . . . . . . . . . . . . . . . . . . . . . . .
31
1.1.2
31
1.1.3
32
1.1.4
32
1.1.5
34
1.1.6
34
1.1.7
36
. . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
37
1.2.1
37
1.2.2
Conversion Functions . . . . . . . . . . . . . . . . . . . .
41
1.2.3
Advanced Functions . . . . . . . . . . . . . . . . . . . . .
43
1.2.4
Mathematical Functions . . . . . . . . . . . . . . . . . . .
44
1.2.5
Date Functions . . . . . . . . . . . . . . . . . . . . . . . .
45
Komplexere SQL-Abfragen . . . . . . . . . . . . . . . . . . . . .
47
1.3.1
47
1.3.2
Mengenoperationen
. . . . . . . . . . . . . . . . . . . . .
54
1.3.3
Ubungen
04 . . . . . . . . . . . . . . . . . . . . . . . . . .
55
1.3.4
Gruppierungen . . . . . . . . . . . . . . . . . . . . . . . .
55