Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
se:datenbankentwicklung [2008-09-13 21:19] stefan |
se:datenbankentwicklung [2014-04-05 11:42] |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Datenbankentwicklung ====== | ||
- | ===== Administration ===== | ||
- | * Benutzergruppe ''ORA_DBA'' wird bei der Installation angelegt. | ||
- | * Benutzer dürfen alles (inkl. ''STARTUP/SHUTDOWN''). | ||
- | * Operating System Authentication: ''SQLPLUS / AS SYSDBA'' | ||
- | * ''STARTUP'' | ||
- | * ''OPEN <> MOUNT'' (nur Verwaltungsaktionen möglich) | ||
- | * ''SHUTDOWN'' | ||
- | * ''TRANSACTIONAL, IMMEDIATE, ABORT'' | ||
- | * Client und Server kommunizieren über Oracle Net (Ports 1521 und 8080) | ||
- | * Listener steuern: ''lsnrctl'' START/STOP/STATUS | ||
- | * Listener-Konfiguration: listener.ora | ||
- | * Ändern der DB-Portnummer: listener.ora ändern, ''ALTER SYSTEM SET LOCAL_LISTENER="(ADDRESS=(PROTOCOL=TCP)(HOST= rzn055.hv.fh-nuernberg.de)(PORT=1522))"; ALTER SYSTEM REGISTER;'' | ||
- | * Ändern der Web-Portnummer: als ''SYSTEM: EXEC DBMS_XDB.SETHTTPPORT(8080);'' | ||
- | * Remote-Zugriff auf Weboberfläche: als ''SYSTEM: EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);'' oder über Oberfläche unter Administration -> Manage HTTP access | ||
- | * {{:se:oraclearchitektur.jpg|}} | ||
- | * {{:se:oraclecache.jpg|}} | ||
- | * System Global Area | ||
- | * Buffer Cache: Abgefragte oder modifizierte Daten, vermeidet physikalischen Zugriff auf Dateien | ||
- | * Redo Buffer: Redo-Informationen werden zwischengespeichert bis sie physikalisch geschrieben werden | ||
- | * Shared Pool: Benutzerübergreifende Informationen (SQL-Statements, Infos aus Data Dictionary, Tabellenbeschreibungen, Stored Procedures) | ||
- | * Large Pool: Optionaler Bereich zum Puffern von größeren I/O-Operationen | ||
- | |||
- | | ||
- | ===== PL/SQL (Schwerpunkt der Klausur) ===== | ||
- | * PL/SQL: Procedural Language extension to SQL | ||
- | * Bietet eine Blockstruktur für Code an | ||
- | * Bietet prozedurale Konstrukte an (Variablen, Kontrollstrukturen etc.) | ||
- | * {{:se:plsqlarchitektur.jpg|}} | ||
- | * Vorteile | ||
- | * Integration in Oracle Tools | ||
- | * Modularisierte Anwendungsentwicklung | ||
- | * Portabilität des PL/SQL-Codes | ||
- | * Exception Handling | ||
- | * PL/SQL-Blöcke | ||
- | * Aufbau | ||
- | * DECLARE: Variablen, Cursor, eigene Exceptions | ||
- | * **BEGIN**: SQL und PL/SQL | ||
- | * EXCEPTION: Fehlerbehandlung | ||
- | * **END** | ||
- | * Typen | ||
- | * Anonymous | ||
- | * Procedure | ||
- | * Function | ||
- | * Speicherort: Server oder Anwendung | ||
- | * Variablen | ||
- | * ''[a-zA-Z][a-zA-Z0-9$_#]{0,29}'' | ||
- | * Deklarierung/Initialisierung in ''DECLARE'', Zuweisung in ''BEGIN'' | ||
- | * ''identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr];'' | ||
- | * String-Begrenzung: ''q'!Das ist ein Text!''' | ||
- | * Typen | ||
- | * Scalar: ''CHAR, VARCHAR, LONG, INTEGER, BOOLEAN, DATE'' etc. | ||
- | * Composite: Zusammengesetzte Variablen aus mehrere Datentypen | ||
- | * Reference | ||
- | * LOB: Fotos, Filme etc. | ||
- | * Nicht-PL/SQL: Bind variables | ||
- | * Host-Variablen, die mit ''VARIABLE'' deklariert werden und mit einem führenden '':'' referenziert werden | ||
- | * ''SET AUTOPRINT ON'' | ||
- | * Substitution Variables | ||
- | * referenziert mit führendem ''&'': Eingabe zur Laufzeit | ||
- | * ''ACCEPT varname PROMPT 'Text''' | ||
- | * User Variable: deklariert mit ''DEFINE'', referenziert mit ''&'' | ||
- | * ''%TYPE''-Attribut: Datentyp einer Spalte/Variable übernehmen (''identifier table.column_name%TYPE;'') | ||
- | * Mögliche Boolean-Werte: ''TRUE, FALSE, NULL'' (!) | ||
- | * Lexikalische Einheiten | ||
- | * Folgen von Zeichen, Zahlen, Whitespace und Symbolen | ||
- | * Typen: Identifier, Delimiter, Literals, Comments | ||
- | * SQL-Funktionen | ||
- | * Nicht in PL/SQL verfügbar: ''DECODE'', ''GROUP''-Funktionen | ||
- | * SELECT in PL/SQL | ||
- | * ''INTO'' wird benötigt | ||
- | * Abfragen müssen genaue eine Zeile zurückliefern | ||
- | * Variablenpriorität: Spaltennamen -> lokale Variablen/Parameter -> Tabellennamen | ||
- | * Cursor | ||
- | * Zeiger auf den privaten Speicherplatz des Oracle-Servers | ||
- | * Implizit: werden intern vom Oracle-Server erzeugt und verwendet (z.B. bei SQL-Statements) | ||
- | * Attributes: ''SQL%FOUND'', ''SQL%NOTFOUND'', ''SQL%ROWCOUNT'' | ||
- | * Explizit: werden vom Programmierer definiert und verwendet | ||
- | * Kontrollstrukturen | ||
- | * ''IF THEN - ELSIF - ELSE''' | ||
- | * ''CASE'' Expression <> ''CASE'' Statement | ||
- | * Behandlung von NULL bei booleschen Operationen | ||
- | * Schleifen | ||
- | * ''LOOP - EXIT WHEN - END LOOP'' | ||
- | * ''WHILE LOOP - END LOOP'' | ||
- | * ''FOR IN LOOP - END LOOP'' | ||
- | * Nested Loops: Labels ''<<label_name>>'' | ||
- | * Komplexe Datentypen | ||
- | * Records | ||
- | * ein oder mehrere Felder (Scalar, Record, ''INDEX BY'') | ||
- | * werden üblicherweise eingesetzt, um Tabellenzeilen zu lesen | ||
- | * Deklaration mit ''TYPE'' | ||
- | * einfache Definition mit ''%ROWTYPE''' | ||
- | * Collections | ||
- | * ''INDEX BY'' tables / assoziative Arrays | ||
- | * 2 Spalten: Key (int/string) / Value | ||
- | * dynamische Länge | ||
- | * Zugriff über Index ''table(1)'' | ||
- | * verfügbare Methoden: ''EXISTS, COUNT, FIRST, LAST, PRIOR, NEXT, DELETE'' | ||
- | * VARRAYs und Nested Tables | ||
- | * Cursors | ||
- | * manuelle Aktionen: ''OPEN, [LOOP], FETCH, [EXIT], CLOSE'' | ||
- | * ''CURSOR FOR'' macht alles automatisch | ||
- | * Attribute: ''%ISOPEN, %NOTFOUND, %FOUND, %ROWCOUNT'' | ||
- | * entsprechen Pointern aus C (Referenz auf Speicherbereich) | ||
- | * Datentyp der Curosr-Variablen ist ''REF CURSOR'' | ||
- | * Cursor sind statisch, Cursor-Variablen sind dynamisch | ||
- | * Exceptions | ||
- | * Exceptions sind Fehler, die während der Programmausführung auftreten | ||
- | * Können implizit oder explizit ausgelöst werden | ||
- | * Behandlung: Handler oder weiterwerfen | ||
- | * Es sind mehrere Handler pro Block erlaubt, aber lediglich einer wird abgearbeitet. | ||
- | * Vorhandene Exceptions: z.B. ''NO_DATA_FOUND, TOO_MANY_ROWS, ZERO_DIVIDE'' | ||
- | * nicht vordefinierte Exceptions behandeln: ''PRAGMA EXCEPTION_INIT'' | ||
- | * Funktionen: ''SQLCODE, SQLERRM'' | ||
- | * Eigene Exceptions werfen: ''RAISE'' | ||
- | * Eigene Fehlermeldungen analog zum Oracle-Server ausgeben: ''RAISE_APPLICATION_ERROR'' (nur mit Nummer -20000 bis -20999) | ||
- | * Prozeduren und Funktionen | ||
- | * {{:se:proceduresvsfunctions.jpg|}} | ||
- | * Subprograms, benannte PL/SQL-Blöcke | ||
- | * {{:se:anonymousblockssubprograms.jpg|}} | ||
- | * Parameter | ||
- | * Formal <> actual Parameters | ||
- | * Parameter Modes: ''IN, OUT, IN OUT'' | ||
- | * {{:se:subprogramparameters.jpg|}} | ||
- | * Passing: positional, named, combination | ||
- | * Kein Zugriff auf Host-Variablem | ||
- | * Gespeichert in ''USER_SOURCE'' oder ''ALL_SOURCE'', Namen stehen in ''USER_OBJECTS'' | ||
- | * Vorteile: einfach zu verwalten, Datensicherheit und -integrität, bessere Performance, bessere Codeverständlichkeit | ||
- | * Funktionen können in SQL-Statements verwendet werden: ''SELECT, WHERE, HAVING, ORDER BY, GROUP BY, VALUES, SET'' | ||
- | * Aber nur, wenn: in der DB gespeichert, nur IN Parameter, nur SQL-Datentypen verwenden, Parameter positional | ||
- | * Packages | ||
- | * Gruppierung von logisch zusammengehörenden Komponenten (Typen, Cursor, Subprograms etc.) | ||
- | * Bestehen aus Specification (quasi das Interface, Prozeduren sind public) und Body (die Implementierung) | ||
- | * Änderungen an der Specification erfordert Neukompilierung aller referenzierenden Subprogramme | ||
- | * Vorteile: Modularisierung, einfachere Verwaltung, einfacheres Anwendungsdesign, Information Hiding, bessere Performance (Package wird komplett und nur einmal in den Speicher geladen), Overloading | ||
- | * Overloading: Beispiele im ''STANDARD''-Package (z.B. ''TO_CHAR'') | ||
- | * Forward Declaration: Spezifikation eines Subprograms mit Semikolon abgeschlossen. Wird zu Beginn eines Blocks gemacht, damit Prozeduren auf die möglicherweise weiter unten im Quelltext implementierten Prozeduren zugreifen können. | ||
- | * Package Initialization Block: ''BEGIN''-Teil am Ende des package body zur Initialisierung von Variablen. | ||
- | * Package State | ||
- | * Package wird beim ersten Aufruf initialisiert und bleibt die gesamte Session über bestehen. | ||
- | * Eindeutig für jede Session. | ||
- | * Hilfspakete: ''DBMS_OUTPUT, UTL_FILE, HTP, UTL_MAIL, DBMS_SCHEDULER'' | ||
- | * Dynamic SQL | ||
- | * Execution Flow: parse (compile time), bind (compile time), execute, fetch | ||
- | * Dynamic SQL ist ein String | ||
- | * ''EXECUTE IMMEDIATE .. INTO .. USING'' | ||
- | * Triggers | ||
- | * PL/SQL-Block, der einer Tabelle, einem View, einem Schema oder einer Datenbank zugeordnet ist | ||
- | * Typen: Application/Database, Statement/Row Trigger | ||
- | * Timing: ''BEFORE, AFTER, INSTEAD OF'' | ||
- | * Trigger Events: ''INSERT, UPDATE [OF], DELETE'' | ||
- | * Row Trigger: ''FOR EACH ROW, :NEW, :OLD'' | ||
- | * {{:se:triggersvsprocedures.jpg|}} | ||
- | |||
- | ===== Web ===== | ||
- | |||
- | ===== Modellierung ===== | ||
- | |||
- | ===== ToDo ===== | ||
- | * Unterschiede Host- (auch Bind-/Global-), User-, Substitution-Variablen |