Benutzer-Werkzeuge

Webseiten-Werkzeuge


se:datenbankentwicklung

**Dies ist eine alte Version des Dokuments!**

Datenbankentwicklung

Administration

  • Benutzergruppe ORADBA 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 LOCALLISTENER="(ADDRESS=(PROTOCOL=TCP)(HOST= rzn055.hv.fh-nuernberg.de)(PORT=1522))"; ALTER SYSTEM REGISTER;
    • Ändern der Web-Portnummer: als SYSTEM: EXEC DBMSXDB.SETHTTPPORT(8080); * Remote-Zugriff auf Weboberfläche: als SYSTEM: EXEC DBMSXDB.SETLISTENERLOCALACCESS(FALSE); oder über Oberfläche unter Administration → Manage HTTP access
  • 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.)
    • 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. NODATAFOUND, TOOMANYROWS, ZERODIVIDE
      * nicht vordefinierte Exceptions behandeln:
      PRAGMA EXCEPTION
      INIT
    • Funktionen: SQLCODE, SQLERRM
    • Eigene Exceptions werfen: RAISE
    • Eigene Fehlermeldungen analog zum Oracle-Server ausgeben: RAISEAPPLICATIONERROR (nur mit Nummer -20000 bis -20999)
      * Prozeduren und Funktionen
    • Subprograms, benannte PL/SQL-Blöcke

    • * 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. TOCHAR) * 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, UTLFILE, HTP, UTLMAIL, 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

Web

Modellierung

ToDo

  • Unterschiede Host- (auch Bind-/Global-), User-, Substitution-Variablen
se/datenbankentwicklung.1221333548.txt.gz · Zuletzt geändert: 2014-04-05 11:42 (Externe Bearbeitung)