Benutzer-Werkzeuge

Webseiten-Werkzeuge


se:datenbankentwicklung

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste Überarbeitung Beide Seiten der Revision
se:datenbankentwicklung [2008-09-13 21:19]
stefan
se:datenbankentwicklung [2008-09-14 18:24]
stefan
Zeile 17: Zeile 17:
   * {{:​se:​oraclearchitektur.jpg|}}   * {{:​se:​oraclearchitektur.jpg|}}
   * {{:​se:​oraclecache.jpg|}}   * {{:​se:​oraclecache.jpg|}}
-  * System Global Area +  * System Global Area: Benutzerübergreifender Cache 
-    * Buffer Cache: Abgefragte oder modifizierte Daten, vermeidet physikalischen Zugriff auf Dateien +    * Data Buffer Cache: Abgefragte oder modifizierte Daten, vermeidet physikalischen Zugriff auf Dateien, zuletzt bearbeitete Blöcke ​ 
-    * Redo Buffer: Redo-Informationen werden zwischengespeichert bis sie physikalisch geschrieben werden  +    * Redo Log Buffer: Redo-Informationen werden zwischengespeichert bis sie physikalisch geschrieben werden 
-    * Shared Pool: Benutzerübergreifende Informationen (SQL-Statements, Infos aus Data Dictionary, Tabellenbeschreibungen,​ Stored Procedures) ​+    * Dictionary Cache: Data Dictionary Informationen ​ 
 +    * Shared ​SQL Pool: Benutzerübergreifende Informationen (übersetzte ​SQL-Statements,​ Tabellenbeschreibungen,​ Stored Procedures) ​
     * Large Pool: Optionaler Bereich zum Puffern von größeren I/​O-Operationen     * Large Pool: Optionaler Bereich zum Puffern von größeren I/​O-Operationen
 +    * Größe wird bei der Installation gesetzt: SGA Target, Größe der SGA-Komponenten wird automatisch angepasst
 +    * Mögliche Fehler: ''​unable to allocate shared memory, no free buffers in buffer pool'' ​   ​
 +    * Prozesskommunikation über Speicherbereiche
 +    * speichert permanente Verwaltungsinformationen ​     ​
 +  * Program Global Area: Speicher für jede Session (Prozess) individuell
 +    * Größe wird bei Installation gesetzt: PGA-Aggregat-Größe kann angepasst werden, individuelle PGA-Größen werden automatisch angepasst
 +    * Mögliche Fehler: ''​out of process memory''​
 +  * Datenbankspeicher
 +    * {{:​se:​oraclestoragestructure.jpg|}}  ​
 +    * Zusammenfassung von logischen und physischen Strukturen
 +    * Enthalten Nutzdaten und Metadaten sowie Kontrolldaten (z.B. zum Datenbankstart)
 +    * **Logische Strukturen** sind nur der DB bekannt
 +    * **Physikalische Strukturen** sind die Dateien auf der Festplatte
 +    * **Recovery-bezogene Strukturen** (z.B. Redo-Logs und Backups) dienen der Wiederherstellung des Systems (z.B. nach Betriebssystemausfällen),​ werden in der Flash Recovery Area abgelegt ​    
 +  * Tablespaces
 +    * System- und Nutzdaten liegen im permanenten Tablespace
 +    * SYS hat SYSTEM als permanenten Tablespace, alle übrigen Benutzer USERS  ​
 +    * SYSTEM
 +      * Data Dictionary, Tabellen mit administrativen Informationen über die DB (in Schema SYS)     
 +    * SYSAUX
 +      * Hilfstablespace für einige Komponenten/​Produkte (z.B. HR)    ​
 +    * UNDO
 +      * Rollback, Read Consistency,​ Flashback Queries ​   ​
 +    * USERS
 +      * Permanente Benutzerdaten ​   ​
 +    * TEMP
 +      * temporäre (Zwischen-)Ergebnisse,​ Parallelisierung und Performanceverbesserung von Operationen (z.B. Sortierung),​ eine oder mehrere Dateien
 +  * Physikalische Strukturen
 +    * Dateien und temporäre Speicherung (datafiles, tempfiles)
 +      * Datafiles: Betriebssystem-Dateien,​ nur von Oracle-Instanz bearbeitbar
 +      * Tempfiles: nur für temporary Tablespace
 +    * Kontroll-Dateien (control files)
 +      * Enthält spezifische Informationen,​ die für das Funktionieren der Datenbank essentiell sind
 +    * Server-Parameter Dateien (server parameter file)
 +      * SPFILE enthält Initialisierungsparameter (binär)
 +      * Parameterwerte werden mit ALTER SYSTEM verändert
 +    * Passwort-Datei (password file)
 +      * Authentifizierung für Remote-Zugriff des SYS-Users
 +      * Enthält verschlüsseltes SYS-Passwort  ​
 +  * Flash Recovery Area
 +    * Verzeichnis,​ getrennt von der Datenbank
 +    * Enthalten:
 +      * Backup der Datenbank-Dateien (Datenbank-Dateien,​ Control-Dateien,​ Server Parameter Files SPFILES)
 +        * Gespeichert in Backup Sets
 +        * Bestehend aus Backup pieces
 +      * Online redo log Dateien
 +        * Aufnahme aller Datenbankänderungen
 +      * Archivierte redo log Dateien
 +        * Dauerhafte Archivierung der Datenbankänderungen (ARCHIVELOG Mode)
 +    * Speicherort ​
 +      * Initialisierungsparameter DB_RECOVERY_FILE_DEST ​
 +      * Einloggen als SYS-DBA: / SYSDBA
 +        * ''​ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '​new_path';''​
 +        * Starten einer PL/​SQL-Prozedur zum verschieben der Information:​ ''​@?/​sqlplus/​admin/​movelogs''​
 +    * Größe
 +      * Initialisierungsparameter DB_RECOVERY_FILE_DEST_SIZE
 +      * Einloggen als SYS-DBA: / SYSDBA
 +        * ''​ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = new_size;''​ (new_size= nK (kilobytes),​ nM (megabytes) or nG (gigabytes))
 +  * Schemas
 +    * Logische Container für DB-Objekte
 +    * Sind einem User zugeordnet
 +    * Datenbankobjekt = Schemaobjekt
 +  * Privilegien:​ System-/​Objekt-Privilegien  ​
 +    * Rollen: CONNECT (verbinden und abfragen), RESOURCE (Objekte erzeugen), DBA (alles außer STARTUP und SHUTDOWN)
 +  * Benutzer: interne (z.B. SYS, SYSTEM) und Datenbankbenutzer
 +    * Einloggen, auch wenn DB heruntergefahren ist: AS SYSDBA
 +    * Passwort ändern: ALTER USER user IDENTIFIED BY pass    ​
 +  * Datenaustausch
 +    * Export/​Import:​ proprietäres Format
 +      * ''​expdp,​ impdp''​ (kein XML), ''​exp,​ imp''​ (kein FLOAT und DOUBLE) ​   ​
 +    * Unload/​Load:​ CSV etc.
 +      * Weboberfläche (nur eine Tabelle auf einmal, keine Filterung, CSV oder XML), ''​sqlldr''​ (verschiedenste Formate möglich)
 +    * SQL*Loader
 +      * Methoden: conventional,​ direct, external tables
 +      * ''​sqlldr hr/hr DATA=dependents.dat CONTROL=dependents.ctl LOG=dependents.log'' ​     ​
 +    * Dump
 +      * ''​sqlplus SYSTEM/​password'' ​   ​
 +        * ''​CREATE OR REPLACE DIRECTORY dmpdir AS '​c:​\oraclexe\app\tmp';''​
 +        * ''​GRANT READ,WRITE ON DIRECTORY dmpdir TO hr;''​
 +        * ''​ALTER USER hrdev IDENTIFIED BY hrdev;'' ​     ​
 +      * ''​expdp SYSTEM/​password SCHEMAS=hr DIRECTORY=dmpdir DUMPFILE=schema.dmp LOGFILE=expschema.log''​
 +      * ''​impdp SYSTEM/​password SCHEMAS=hr DIRECTORY=dmpdir DUMPFILE=schema.dmp REMAP_SCHEMA=hr:​hrdev EXCLUDE=constraint,​ ref_constraint,​ index TABLE_EXISTS_ACTION=replace LOGFILE=impschema.log'' ​         ​
 +  * Backup und Recovery
 +    * Schützen aller DB-Dateien (Daten, Control, SPFILE, REDO LOG)
 +    * Sicherung der gesamten Datenbank in der Flash Recovery Area    ​
 +    * Recovery Manager (RMAN) bedienbar über Kommandozeile/​Script  ​
 +    * Backup Retention Policy: Zwei vollständige Backups müssen vorgehalten werden, ARCHIVELOG: zusätzlich alle Logs für media recovery
 +    * ARCHIVELOG schützt gegen Fehler des BS, der Oracle Instanz und der Media Disk
 +    * Online-(ARCHIVELOG)/​Offline-(NOARCHIVELOG)Backup
 +    * Ein-/​Ausschalten
 +      * SQLPLUS SYS/​password AS SYSDBA
 +      * SHUTDOWN IMMEDIATE
 +      * STARTUP MOUNT
 +      * ALTER DATABASE [NO]ARCHIVELOG;​
 +      * ALTER DATABASE OPEN;      ​
 +    * Flashback Queries (Anzeige historischer Daten)
 +      * ''​SELECT * FROM employees AS OF TIMESTAMP TO_TIMESTAMP('​2005-04-04 09:​30:​00',​ '​YYYY-MM-DD HH:​MI:​SS'​) WHERE last_name = '​Chung';''​
 +      * ''​INSERT INTO employees (SELECT * FROM employees AS OF TIMESTAMP TO_TIMESTAMP('​2005-04-04 09:​30:​00',​ '​YYYY-MM-DD HH:​MI:​SS'​) WHERE last_name = '​Chung'​);''​
 +    * Tabellen löschen bedeutet Verschieben in den Papierkorb (Recycle Bin), Leeren bei Speicherbedarf oder manuell ​     ​
 +  * Datenbankstruktur
 +    * {{:​se:​dbstruktur.jpg|}}  ​
 +    * 3 Ebenen: externe (VIEW), logische (TABLE), interne (INDEX)  ​
 +    * Eine DB ist ein Programmpaket zur Manipulation von gespeicherten Daten (Benutzer-/​Verwaltungsdaten)
 +    * Physische Sicht (Dateien) != logische Sicht (Tablespaces)
 +    * Dateigruppen
 +      * Datenbankdateien (Tabellen, Data Dictionary, PL/SQL, Index, Nutzdaten)
 +      * REDO-Logs (Protokollierung aller Änderungen,​ jede DB hat mind. 2, ARCHIVELOG: vor Überschreiben Sicherung)
 +      * Kontrolldateien (Zeitpunkt der DB-Erstellung,​ Namen der DB-Dateien und der Logs)
 +  * Tablespaces
 +    * Datenbankdateien sind nur benannter Speicherplatz -> logische Struktur darüber (Tablespaces)
 +    * eine Datei -> ein Tablespace, ein Tablespace -> mehrere Dateien
 +    * Standard-Tablespaces:​ SYSTEM, TEMP, USERS, Rollback Data, Tools
 +    * ''​SELECT * FROM user_tablespaces;''​
 +    * ''​CREATE TABLESPACE Users DATAFILE '​data3.ora'​ SIZE 100MB;''​
 +    * ''​ALTER TABLESPACE system ADD DATAFILE '​data2.ora'​ SIZE 200MB;''​
 +    * ''​DROP TABLESPACE TA [INCLUDING CONTENTS];''​
 +    * Modi: Online/​Offline:​ ''​ALTER TABLESPACE TA [ONLINE | OFFLINE] [NORMAL | TEMPORARY | IMMEDIATE];''​
 +      * {{:​se:​tablespacemodi.jpg|}}  ​
 +  * Datenbankobjekte/​Segmente:​ Tabellen, Indizes, Recovery-Informationen
 +    * Tablespaces sind in Segmente (Daten, Index, Rollback, temporär) unterteilt
 +    * Jedes DB-Objekt belegt genau ein Segment
 +    * Problem: Fragmentierung
 +    * Segmente bestehen aus Extents (unteschiedlicher Größe)
 +      * Anfangs-/​Folge-Extent ​   ​
 +      * Die Festlegung der Anfangs-Extent-Größe erfolgt über den Parameter initial
 +      * Die Anzahl der bei der Erstellung eines Segments mit angelegten Folge-Extents wird mit dem Parameter minextents definiert.
 +      * Die Anzahl der insgesamt maximal möglichen Folge-Extents wird mit dem Parameter maxextents definiert.
 +      * Die Größe der Folge-Extents kann festgelegt bzw. dynamisch verändert werden. Die Festlegung der Folge-Extent-Größe erfolgt über den Parameter next
 +      * Der Parameter pctincrease gibt den Wachstumsfaktor der Extents in % an.
 +      * ''​TRUNC TABLE''​ bewirkt Zurücksetzen des belegten Speichers (<> ''​DELETE FROM TABLE''​)
 +      * Festlegung der Parameter bei Erstellung des Tablespaces oder der DB-Objekte
 +        * {{:​se:​storageclause.jpg|}} ​    
 +    * Extents bestehen aus Oracle-Datenblöcken (2KB)
 +      * Block-Kopf
 +        * Verwaltungsinformationen 57 Byte
 +        * Datensatz-Directory,​ für jeden im Block abgelegten Datensatz 2 Byte
 +        * Transaktionsdirectory (23 Byte pro Eintrag)
 +          * initrans (1 (default) - 255)
 +          * maxtrans ​       ​
 +      * Block-Datenbereich
 +        * Freibereich (Speicher für sich vergrößernde Datensätze)
 +        * Einfüge-Bereich (neue Datensätze)
 +        * Der pctfree-Parameter gibt an, wie viel % des DB-Block-Datenbereiches als Freibereich genutzt werden sollen.
 +        * Der pctused-Parameter gibt den Mindestfüllgrad eines DB-Blockes an.
 +        * Insert-Operationen werden an Blöcken vorgenommen,​ deren Mindestfüllgrad noch nicht erreicht ist. Damit wird eine gleichmäßige Belegung der DB-Blöcke erreicht. ​
 +        * Der freelists-Parameter gibt die Anzahl der FREE-Listen an.
 +      * Block-Verwaltung
 +        * {{:​se:​blockmanagement.jpg|}} ​     ​
 +        * Überlauf: zu lange Blöcke werden in einen neuen Block eingetragen und im ursprünglichen eine Referenz erzeugt
 +        * Freispeicherverwaltung:​ Blöcke mit Füllstand unter pctused werde in FREE BLOCK-Listen eingetragen
 +          * Transactions-FREE-Liste:​ Innerhalb einer Transaktion freiwerdende Blöcke
 +          * Segment-FREE-Liste:​ Blöcke, deren Füllstand unter pctused liegt und die nicht in einer Transaktion bearbeitet werden
 +          * {{:​se:​freispeicherverwaltung.jpg|}}
 +          * {{:​se:​insertoperation.jpg|}} ​         ​
 +    * Datensätze
 +      * Kopf (Verwaltungsinformationen,​ 2-5 Byte)
 +        * ID (2 Byte)
 +        * Anzahl Spalten (1 Byte, obligatorische Spalte row-id -> 255 Spalten für Benutzer)
 +        * Verkettungsadressen (1 Byte)
 +        * Cluster-Schlüsselinformationen (1 Byte)
 +      * Rumpf (Daten)
 +        * Spaltenlänge:​ 1 Byte (NUMBER, CHAR, DATE), 3 Byte (VARCHAR, VARCHAR2, LONG, RAW, LONG RAW)
 +        * Spaltendaten ​         ​
 +  * Dictionary Views: DBA_FREE_SPACE,​ USER_TABLESPACES,​ USER_SEGMENTS,​ USER_EXTENTS,​ USER_TABLES,​ USER_TS_QUOTAS ​
 +  * Architektur
 +    * Oracle Instanz
 +      * SGA, PGA, Hintergrundprozesse
 +      * Definiert durch SGA, Files und DB-Prozesse
 +      * Hat eindeutige SID
 +    * Orace Server-Prozesse
 +      * Parsen und Ausführen von SQL, Lesen von DB-Blöcken aus Files     
 +    * Konfiguration
 +      * Dedicated Server: Jeder Anwenderprozess hat einen Serverprozess
 +      * Multi-Threaded Server: Anwenderprozess übergibt Request an Dispatcher -> Request-Queue in SGA -> Abarbeitung durch beliebigen Serverprozess -> Ergebnis wird in Response-Queue in SGA gelegt
 +      * Beide Möglichkeiten können gleichzeitig genutzt werden, Entscheidung über Parameter beim Start des Anwenderprozesses
 +        * viele Benutzer, wenig Last -> MTS
 +        * viele Prozesse, hohe Last -> DS
 +     * Client-/​Server-Architektur
 +       * Schützt Server-Programme,​ unterschiedliche Rechner für Client und Server
 +     * Hintergrundprozesse
 +       * Recoverer (RECO): Recovery bei verteilten DBs
 +       * Process Monitor (PMON): Recovery für fehlerhafte Anwenderprozesse
 +       * System Monitor (SMON): Recovery beim Systemstart
 +       * Database Writer (DBWR): liest/​schreibt Blöcke aus Cache in DB und umgekehrt
 +       * Redo Log Writer (LGWR): liest/​schreibt REDO-Log
 +       * Checkpoint (CKPT): übernimmt die Checkpoint-Aktivitäten vom LGWR (optional) ​      
 +       * Archiver (ARCH): archiviert REDO-Logs
 +       * Lock (LCKn): Aufgaben bei Parallel-Server-Konfiguration (optional)
 +  * Systemparameter editieren
 +    * ''​CREATE PFILE [='​pfile_name'​] FROM SPFILE [='​spfile_name'​];''​
 +    * ''​CREATE SPFILE [='​pfile_name'​] FROM PFILE [='​spfile_name'​];''​
  
-  ​ 
 ===== PL/SQL (Schwerpunkt der Klausur) ===== ===== PL/SQL (Schwerpunkt der Klausur) =====
   * PL/SQL: Procedural Language extension to SQL   * PL/SQL: Procedural Language extension to SQL
Zeile 33: Zeile 224:
       * Modularisierte Anwendungsentwicklung       * Modularisierte Anwendungsentwicklung
       * Portabilität des PL/​SQL-Codes       * Portabilität des PL/​SQL-Codes
-      * Exception Handling        ​  ​   ​+      * Exception Handling ​          ​
   * PL/​SQL-Blöcke   * PL/​SQL-Blöcke
     * Aufbau     * Aufbau
Zeile 43: Zeile 234:
       * Anonymous       * Anonymous
       * Procedure       * Procedure
-      * Function      ​  ​+      * Function ​     
     * Speicherort:​ Server oder Anwendung     * Speicherort:​ Server oder Anwendung
   * Variablen   * Variablen
Zeile 61: Zeile 252:
         * referenziert mit führendem ''&'':​ Eingabe zur Laufzeit         * referenziert mit führendem ''&'':​ Eingabe zur Laufzeit
         * ''​ACCEPT varname PROMPT '​Text'''​         * ''​ACCEPT varname PROMPT '​Text'''​
-      * User Variable: deklariert mit ''​DEFINE'',​ referenziert mit ''&''​         ​+      * User Variable: deklariert mit ''​DEFINE'',​ referenziert mit ''&'' ​        ​
     * ''​%TYPE''​-Attribut:​ Datentyp einer Spalte/​Variable übernehmen (''​identifier table.column_name%TYPE;''​)     * ''​%TYPE''​-Attribut:​ Datentyp einer Spalte/​Variable übernehmen (''​identifier table.column_name%TYPE;''​)
-    * Mögliche Boolean-Werte:​ ''​TRUE,​ FALSE, NULL''​ (!)         ​+    * Mögliche Boolean-Werte:​ ''​TRUE,​ FALSE, NULL''​ (!)         ​
   * Lexikalische Einheiten   * Lexikalische Einheiten
     * Folgen von Zeichen, Zahlen, Whitespace und Symbolen     * Folgen von Zeichen, Zahlen, Whitespace und Symbolen
-    * Typen: Identifier, Delimiter, Literals, Comments ​     ​+    * Typen: Identifier, Delimiter, Literals, Comments ​    ​
   * SQL-Funktionen   * SQL-Funktionen
     * Nicht in PL/SQL verfügbar: ''​DECODE'',​ ''​GROUP''​-Funktionen ​   ​     * Nicht in PL/SQL verfügbar: ''​DECODE'',​ ''​GROUP''​-Funktionen ​   ​
Zeile 72: Zeile 263:
     * ''​INTO''​ wird benötigt     * ''​INTO''​ wird benötigt
     * Abfragen müssen genaue eine Zeile zurückliefern     * Abfragen müssen genaue eine Zeile zurückliefern
-    * Variablenpriorität:​ Spaltennamen -> lokale Variablen/​Parameter -> Tabellennamen     ​+    * Variablenpriorität:​ Spaltennamen -> lokale Variablen/​Parameter -> Tabellennamen ​   
   * Cursor   * Cursor
     * Zeiger auf den privaten Speicherplatz des Oracle-Servers     * Zeiger auf den privaten Speicherplatz des Oracle-Servers
     * Implizit: werden intern vom Oracle-Server erzeugt und verwendet (z.B. bei SQL-Statements)     * Implizit: werden intern vom Oracle-Server erzeugt und verwendet (z.B. bei SQL-Statements)
       * Attributes: ''​SQL%FOUND'',​ ''​SQL%NOTFOUND'',​ ''​SQL%ROWCOUNT'' ​   ​       * Attributes: ''​SQL%FOUND'',​ ''​SQL%NOTFOUND'',​ ''​SQL%ROWCOUNT'' ​   ​
-    * Explizit: werden vom Programmierer definiert und verwendet    +    * Explizit: werden vom Programmierer definiert und verwendet ​  ​
   * Kontrollstrukturen   * Kontrollstrukturen
     * ''​IF THEN - ELSIF - ELSE'''  ​     * ''​IF THEN - ELSIF - ELSE'''  ​
Zeile 98: Zeile 289:
         * dynamische Länge         * dynamische Länge
         * Zugriff über Index ''​table(1)''​         * Zugriff über Index ''​table(1)''​
-        * verfügbare Methoden: ''​EXISTS,​ COUNT, FIRST, LAST, PRIOR, NEXT, DELETE''​         ​+        * verfügbare Methoden: ''​EXISTS,​ COUNT, FIRST, LAST, PRIOR, NEXT, DELETE'' ​       
       * VARRAYs und Nested Tables       * VARRAYs und Nested Tables
   * Cursors   * Cursors
Zeile 106: Zeile 297:
     * entsprechen Pointern aus C (Referenz auf Speicherbereich)     * entsprechen Pointern aus C (Referenz auf Speicherbereich)
     * Datentyp der Curosr-Variablen ist ''​REF CURSOR''​     * Datentyp der Curosr-Variablen ist ''​REF CURSOR''​
-    * Cursor sind statisch, Cursor-Variablen sind dynamisch  +    * Cursor sind statisch, Cursor-Variablen sind dynamisch ​
   * Exceptions   * Exceptions
     * Exceptions sind Fehler, die während der Programmausführung auftreten     * Exceptions sind Fehler, die während der Programmausführung auftreten
Zeile 112: Zeile 303:
     * Behandlung: Handler oder weiterwerfen     * Behandlung: Handler oder weiterwerfen
     * Es sind mehrere Handler pro Block erlaubt, aber lediglich einer wird abgearbeitet.     * Es sind mehrere Handler pro Block erlaubt, aber lediglich einer wird abgearbeitet.
-    * Vorhandene Exceptions: z.B. ''​NO_DATA_FOUND,​ TOO_MANY_ROWS,​ ZERO_DIVIDE''​    +    * Vorhandene Exceptions: z.B. ''​NO_DATA_FOUND,​ TOO_MANY_ROWS,​ ZERO_DIVIDE'' ​  ​
     * nicht vordefinierte Exceptions behandeln: ''​PRAGMA EXCEPTION_INIT''​     * nicht vordefinierte Exceptions behandeln: ''​PRAGMA EXCEPTION_INIT''​
     * Funktionen: ''​SQLCODE,​ SQLERRM''​     * Funktionen: ''​SQLCODE,​ SQLERRM''​
     * Eigene Exceptions werfen: ''​RAISE''​     * Eigene Exceptions werfen: ''​RAISE''​
-    * Eigene Fehlermeldungen analog zum Oracle-Server ausgeben: ''​RAISE_APPLICATION_ERROR''​ (nur mit Nummer -20000 bis -20999)     ​+    * Eigene Fehlermeldungen analog zum Oracle-Server ausgeben: ''​RAISE_APPLICATION_ERROR''​ (nur mit Nummer -20000 bis -20999) ​   
   * Prozeduren und Funktionen   * Prozeduren und Funktionen
     * {{:​se:​proceduresvsfunctions.jpg|}}     * {{:​se:​proceduresvsfunctions.jpg|}}
Zeile 122: Zeile 313:
     * {{:​se:​anonymousblockssubprograms.jpg|}} ​   ​     * {{:​se:​anonymousblockssubprograms.jpg|}} ​   ​
     * Parameter     * Parameter
-   ​* Formal <> actual Parameters+      ​* Formal <> actual Parameters
       * Parameter Modes: ''​IN,​ OUT, IN OUT''​       * Parameter Modes: ''​IN,​ OUT, IN OUT''​
-      * {{:​se:​subprogramparameters.jpg|}}         ​+      * {{:​se:​subprogramparameters.jpg|}} ​       
       * Passing: positional, named, combination       * Passing: positional, named, combination
     * Kein Zugriff auf Host-Variablem ​   ​     * Kein Zugriff auf Host-Variablem ​   ​
Zeile 137: Zeile 328:
     * Vorteile: Modularisierung,​ einfachere Verwaltung, einfacheres Anwendungsdesign,​ Information Hiding, bessere Performance (Package wird komplett und nur einmal in den Speicher geladen), Overloading     * 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''​)     * 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.     ​+    * 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 Initialization Block: ''​BEGIN''​-Teil am Ende des package body zur Initialisierung von Variablen.
     * Package State     * Package State
Zeile 146: Zeile 337:
     * Execution Flow: parse (compile time), bind (compile time), execute, fetch     * Execution Flow: parse (compile time), bind (compile time), execute, fetch
     * Dynamic SQL ist ein String     * Dynamic SQL ist ein String
-    * ''​EXECUTE IMMEDIATE .. INTO .. USING''​     ​+    * ''​EXECUTE IMMEDIATE .. INTO .. USING'' ​   
   * Triggers   * Triggers
     * PL/​SQL-Block,​ der einer Tabelle, einem View, einem Schema oder einer Datenbank zugeordnet ist     * PL/​SQL-Block,​ der einer Tabelle, einem View, einem Schema oder einer Datenbank zugeordnet ist
Zeile 153: Zeile 344:
     * Trigger Events: ''​INSERT,​ UPDATE [OF], DELETE''​     * Trigger Events: ''​INSERT,​ UPDATE [OF], DELETE''​
     * Row Trigger: ''​FOR EACH ROW, :NEW, :​OLD''​     * Row Trigger: ''​FOR EACH ROW, :NEW, :​OLD''​
-    * {{:​se:​triggersvsprocedures.jpg|}}     ​+    * {{:​se:​triggersvsprocedures.jpg|}} ​   
  
 ===== Web ===== ===== Web =====
 +  * Voraussetzung:​ Database Access Descriptor (DAD) vorhanden
 +    * erzeugen mit DBA-Rechten
 +    * ''​DBMS_EPG.create_dad (dad_name => '​systemdad',​ path => '/​systemdad/​*'​);''​   ​
 +  * HTML-Ausgabe über HTP-/​HTF-Package ​
 +    * Vorteile: Aufbau auf PL/SQL, integriert SQL und HTML, kein zusätzliches Konfigurationsmanagement
 +  * Webapplikationen werden als Packages erstellt
 +    * HTML-Erzeugung mit PL/SQL Web Toolkit -> HTP/​HTF ​  
 +  * GET vs. POST
 +    * gut für Debugging, Programmstruktur wird offenbart, Bookmarks möglich, begrenzte Länge der URL   
 +  * mehrere Parameter (Array): ''​OWA_UTIL.ident_arr''​ (beginnt bei Index 2)
 +  * Arbeitsweise:​ Requests kommen anonym auf dem Server an -> Server liefert Seite aus
 +  * Kein Session-Konzept,​ kein Benutzerlogging
 +  * Designschritte
 +    * {{:​se:​designschritte.jpg|}}
 +    * Application Design
 +      * High Level Storyboard: Screens und Navigation (Site Map)
 +      * Detailed Storyboard
 +        * Alle Elemente, auf die der Benutzer klicken kann
 +        * Nicht alle Datenfelder,​ nur soviel um die ausgeführte Aktion erkennen zu können
 +        * Jeder Ausgang aus einer Seite wird mit einem Pfeil mit dem resultierenden Screen verbunden
 +      * Application Flow Diagram: Welche Daten werden zwischen den Seiten ausgetauscht (abwechselnd Procedure/​Screen)
 +        * Updates stellen aufgrund des fehlenden Sessionmanagements ein Problem dar (alte Daten müssen mit übergeben werden, um herauszufinden,​ ob jemand anderes die Daten in der Zwischenzeit bearbeitet hat)
 +      * Skeletons für Procedures/​Functions mit den ermittelten Parametern erzeugen  ​     ​
 +    * Page Design
 +      * Beispielseiten erstellen, Fokus auf Layout -> Designer machen lassen
 +      * Übliche Tipps: kein Splashscreen,​ Browsertests,​ wenige Grafiken, Web Standards, Formularelemente zur Einschränkung der Benutzereingaben,​ kontrastreicher Text        
 +    * Conversion
 +      * WebAlchemy, html2plsql -> statische Seiten
 +    * Business Logic
 +      * die statischen Seiten mit "​echter"​ Logik versehen ​  
 +    * Modularization  ​    
 +      * Trennung von HTML-Ausgabe und Logik
 +      * Header-/​Footer-Procedures etc.
 +      * eigene projektübergreifende Webkomponenten erzeugen  ​       ​
  
 ===== Modellierung ===== ===== Modellierung =====
se/datenbankentwicklung.txt · Zuletzt geändert: 2014-04-05 11:42 (Externe Bearbeitung)