Application Express: Der Stand der Dinge

Werbung
,QVHUW3LFWXUH+HUH!
$SSOLFDWLRQ([SUHVV
'HU6WDQGGHU'LQJH
Carsten Czarski, ORACLE Deutschland GmbH
$JHQGD
y $SSOLFDWLRQ([SUHVVLQ.U]H
PDF-Ausgabe, Flash-Diagramme, Web 2.0, ...
y 7LSSVIUGHQ$3(;(QWZLFNOHU
SQL, PL/SQL, Performance, Security, ...
y $SSOLFDWLRQ([SUHVV'LH&RPPXQLW\
Newsetter, Foren, OTN, ...
y 8QGZLHJHKWHVZHLWHU"
$SSOLFDWLRQ([SUHVV$UFKLWHNWXU
y Engine in der Datenbank
–
–
–
Ca. 215 Tabellen
Ca. 200 PL/SQL Objekte
Mehr als 300.000 Codezeilen
y Web-Frontend: Apache mit mod_plsql
–
PL/SQL-(PEHGGHG*DWHZD\
als Alternative DE2UDFOHJ
$3(;± +LVWRULH
2007 Application Express 3.0
0LJUDWLRQ:RUNVKRS)ODVK&KDUWV
'UDJ'URS3')3ULQWLQJ«
6HFXULW\&38
2006 Application Express 2.2/2.2.1
3DFNDJHG$SSOLFDWLRQV«
2006 Application Express 2.1
2UDFOH;(«
2005 HTML DB 2.0
64/:RUNVKRS«
2004 HTML DB 1.6
7KHPHV«
2004 HTML DB 1.5
)LUVW5HOHDVH«
1999 Internal R&D
&RQVXOWLQJ2UDFOH:HE&DOHQGDU«
3')$XVJDEH
y Standard Support
–
–
–
Standard-Layouts
Eigene XSL:FO Stylesheets
FO-Engine im Grundsatz beliebig
y Advanced Support
–
–
–
Layouts mit MS Office definieren
Oracle Template Builder
Nutzbar nur mit BI Publisher (Lizenz)
3')$XVJDEHPLWGHP%,3XEOLVKHU
$UFKLWHNWXU
y BI Publisher als J2EE-Application
y HTTP (HTTPS)-Kommunikation
$SSOLFDWLRQ([SUHVV'LDJUDPPH
y Technologien
–
–
–
Neu: Flash
SVG
HTML
y Diagrammtypen
–
Balken, Kreis, Ring,
Dial, gestapelter Balken,
…
y Asynchrone
Aktualisierung
$SSOLFDWLRQ([SUHVV$-$;
y Neue Elemente für Formulare
–
–
–
–
Elemente per 'UDJ'URSanordnen
HTML-Editor (FCKEditor)
Shuttle Element (Carl Backstrom)
Color Picker
$QZHQGXQJVSDNHWH
y Definition "unterstützender Objekte"
Tabellen, Prozeduren, PL/SQL Packages, Views ...
–
–
–
–
–
,QVWDOODWLRQV-Skripte (SQL, PL/SQL)
8SJUDGH-Skripte ab Application Express 3.0
'HLQVWDOODWLRQV6kripte
Prüfung von Installationsvoraussetzungen
Darstellung einer Lizenzvereinbarung
$SSOLFDWLRQ([SUHVV
$FFHVV0LJUDWLRQHQ
y Oracle Migration Workbench (SQL Developer)
y Oracle Application Express
7LSS
1XW]HGLH'DWHQEDQN
1XW]HGLH'DWHQEDQN
5HJXOlUH$XVGUFNH, Web Services (UTL_DBWS),
Regel-Management, 0HVVDJH4XHXLQJ $GYDQFHG
4XHXLQJ HTTP-Zugriffe (UTL_HTTP), -REVWHXHUXQJ,
Komplexe Abfragen (Analytische Funktionen),
Mailversand (UTL_MAIL), /'$3=XJULIIH
'%06B/'$3 0DQGDQWHQIlKLJH$QZHQGXQJHQ
(Virtual Private Database), Datenverschlüsselung
(DBMS_CRYPTO), Dateizugriffe (UTL_FILE), ;0/
(U]HXJXQJ64/;0/)XQNWLRQHQ BildMetadatenextraktion (EXIF, DICOM), Data Mining,
:RUNIORZ, XQuery, 9ROOWH[WUHFKHUFKH, (7/)XQNWLRQHQ
3LSHOLQLQJ, Database Change Notification, ....
7DEHOOHQGHVLJQ*UXQGVlW]OLFKHV
y Es gibt mehr als einen Tabellentyp!
–
–
–
–
Index Organized Tabellen
Hash Cluster
Sorted Hash Cluster
External Tables
y Zusätzliche Strukturen
–
–
Partitioning
Materialized Views
,QGH[ XQG7DEHOOHQGHVLJQ
y
y
Kompromiss zwischen Performance und Flexibilität
Tabellendesign:
–
Betrachte kritische Tabellen
–
Sollte dem Datenmodell ähneln
Voraggregierung und Pre-Joins
dienen der Performance
–
y
/RRNXS7DEHOOHQ
Indexdesign
–
Nutze verschiedene Indizes
(VJLEWPHKUDOVHLQHQ,QGH[W\S
y
y
y
y
y
y
B*Tree
Reverse Key
Bitmap Index
Bitmap Join Index
Functionbased Index
Domain Index
–
Text, Spatial, Selbstdefinierte ...
1XW]HGLH'DWHQEDQN
1XW]H64/
y Mengenorientierte Verarbeitung
–
SQL-Konstrukte nutzen
UNION, INTERSECT, MINUS
–
Auswertungen mit analytischen Funktionen
Bsp: Gleitender Durchschnitt
y SQL-Funktionen
–
–
–
Reguläre Ausdrücke
Statistische (Analytische) Funktionen
...
$QDO\WLVFKH)XQNWLRQHQ
.RQ]HSW
y Bessere Abfrage-Performance für …
–
–
–
Berichte
OLAP
BI-Applikationen
y Enge Integration in den Datenbankkern
–
Verarbeitung ist effizient und skalierbar (Optimizer)
Code ist einfacher und flexibler
Reduzierte Ausführungen auf der Client-Side
–
SQL99 OLAP Amendmend
–
–
y Standardkonform
y Ab Oracle 8L (8.1.6)
3/64/$OOJHPHLQ
y Datentyp-Constraints nicht hart codieren
–
Subtypen in eigenem Package: Bessere
Wartbarkeit
y %TYPE-Deklarationen nutzen
–
–
Automatische "Bindung" an Tabelle oder View
Weniger Datentyp-Konvertierungen
y Neue Datentypen in Betracht ziehen
–
BINARY FLOAT, BINARY DOUBLE
3/64/6XEW\SHQ
y Deklaration in einem Package
FUHDWHRUUHSODFH SDFNDJH P\BW\SHVBSDFNDJHLV
VXEW\SH WH[WBOLQHBWLVYDUFKDU
VXEW\SH SHUFHQWBWLVQXPEHU
HQG P\BW\SHVBSDFNDJH
GHFODUH
YBSHUFHQWP\BW\SHVBSDFNDJHSHUFHQWBW
EHJLQ
3/64/1DPHG3DUDPHWHU
y Übergabe mit Parameter-Namen
y Reihenfolge hat keine Bedeutung mehr
y Vorteile ...
–
–
Klarheit, Übersichtlichkeit
Stabilität bei Änderungen der API
P\BORJBSDFNORJ
PRGXOH !
)(7&+B&86720(56
HUUFRGH !VTOFRGH
VHYHULW\ ! P\BORJBSDFN(5525
1XW]HGLH'DWHQEDQN
1XW]HVSH]LHOOH'DWHQW\SHQ
y XML-Verarbeitung
–
XML erzeugen: SQL/XML
XMLElement(), XMLAttributes(), XMLCDATA(), ...
–
XML speichern und bearbeiten: XMLTYPE
EXTRACT(), EXISTSNODE(), UPDATEXML()
y Geodaten: SDO_GEOMETRY
–
–
Räumliche Berechnungen
Kombinierte Abfragen
y Bilder: OrdImage
–
–
–
Thumbnails berechnen
Einfache Bildbearbeitung
Metadaten-Extraktion (EXIF)
1XW]HGLH'DWHQEDQN
y Application Express-Community
–
–
–
–
–
–
–
–
–
Volltextsuche mit APEX
Unscharfe Suche in Adressbeständen
Bildbearbeitung in APEX
XML-Verarbeitung am Beispiel RSS
Analytische Funktionen
Tabellenkalkulationen in APEX
Mandantenfähige Anwendungen
Reguläre Ausdrücke
Jobs im Hintergrund: DBMS_SCHEDULER
64/3/64/XQG$3(;7LSSV
y Nutze vorhandene Komponenten ...
–
–
–
Reports anstelle von PL/SQL-Regionen
Vorhandene Bedingungen, Validierungen, Berechnungen
Listen, Menüs, LOV's
y Trenne Layout und Logik
–
–
Layout im Template
Logik in PL/SQL und APEX-Komponenten
y Nutze PL/SQL-Pakete
–
–
–
Komplexe Logik in PL/SQL-Pakete auslagern
APEX-Prozessquellen sind dann einfache Aufrufe
Werkzeugunterstützung, Debugging (SQL Developer)
7LSS
hEHUSUIH'HLQ:LVVHQ
3/64/XQG&XUVRU
(LQ]HO6HOHFW
y Welche Variante nehmen ...
EHJLQ
VHOHFW VDOLQWR YBVDO
IURP HPS
ZKHUH HPSQR H[FHSWLRQ
ZKHQ 12B'$7$B)281'WKHQ
GRVRPHWKLQJ
ZKHQ 722B0$1<B52:6WKHQ
GRVRPHWKLQJ
HQG
EHJLQ
IRU LLQ VHOHFW VDOIURP HPS
ZKHUH HPSQR ORRS
YBVDO LVDO
HQGORRS
HQG
3/64/XQG&XUVRU
(LQ]HO6HOHFW
y Sprachkonstrukt für Einzel-Select ist SELECT ... INTO
y Sonderfall "keine Daten" ...
–
–
Kann mit Exception behandelt werden
Bei Loop würde nichts passieren Æ unkontrollierter Zustand
EHJLQ
VHOHFW VDOLQWR YBVDO
IURP HPS
ZKHUH HPSQR H[FHSWLRQ
ZKHQ 12B'$7$B)281'WKHQ
GRVRPHWKLQJ
ZKHQ 722B0$1<B52:6WKHQ
GRVRPHWKLQJ
HQG
EHJLQ
IRULLQ
VHOHFWVDOIURPHPS
ZKHUHHPSQR ORRS
YBVDO LVDO
HQGORRS
HQG
3/64/XQG&XUVRU
,PSOL]LWRGHU([SOL]LW"
y Welche Variante ist besser (schneller) ...?
GHFODUH
YBVDO (036$/7<3(
FXUVRU HF
[LQ (03(03127<3(
LV
VHOHFW VDOIURP HPS
ZKHUH HPSQR [
EHJLQ
RSHQ HF
IHWFK HFLQWR YBVDO
FORVH HF
HQG
([SOL]LWHU&XUVRU
GHFODUH
YBVDO (036$/7<3(
EHJLQ
VHOHFW VDOLQWR YBVDO
IURP HPS
ZKHUH HPSQR H[FHSWLRQ
ZKHQ 12B'$7$B)281'WKHQ
GRVRPHWKLQJ
ZKHQ 722B0$1<B52:6WKHQ
GRVRPHWKLQJ
HQG
,PSOL]LWHU&XUVRU
VHOHFWLQWRBYVBRIFVTO
3/64/XQG&XUVRU
,PSOL]LWRGHU([SOL]LW"
y Früher: Roundtrips-Argument
–
SELECT ... INTO:
OPEN FETCH CLOSE:
2 Roundtrips
1 Roundtrip
y Heute: SELECT ... INTO ist optimiert!
3/64/3HUIRUPDQFH
%XON%LQGLQJDQVWHOOHYRQ)25/223
y Optimierungsziel: &RQWH[W6ZLWFKHV
–
–
FOR-LOOP: n Context Switches
Bulk Bind: 1 Context Switch
IRUDOO LLQDUUD\ILUVWDUUD\ODVW
LQVHUWLQWR>WDEOH@YDOXHVDUUD\L
VHOHFW>FRO@%8/.&2//(&7LQWRDUUD\
IURP>WDEOH@
7LSS
%UHPVHGLH'DWHQEDQN
QLFKWDXV
(LQH64/$QZHLVXQJ%HLVSLHO
y Was könnte man hier verbessern ...?
VHOHFWGLVWLQFWVTUWSURGBLGIURPVDOHV
Die verwendete Funktion könnte massiv Ressourcen
benötigen – die Calls sollten auf das notwendige Maß
beschränkt werden
VHOHFWVTUWSLGIURP
VHOHFWGLVWLQFWSURGBLGSLG
IURPVDOHV
%LQG9DULDEOHQ
GHUHLQIDFKH)DOO
W
*X
E
6X
R
O
D
P
S WL
%LQG9DULDEOHQ
DEHUDXFK
W
X
*
E
6X
R
O
D
P
S WL
64/$QZHLVXQJHQ
DXV6LFKWGHU'DWHQEDQN
64/!VHOHFWVTOBWH[WH[HFXWLRQV
IURP YVTODUHD
ZKHUHVTOBWH[WOLNH VKFXVWRPHUV
64/B7(;7
(;(&87,216
VHOHFWIURPVKFXVWRPHUV
ZKHUHFXVWBLG VHOHFWIURPVKFXVWRPHUV
ZKHUHFXVWBLG VHOHFWIURPVKFXVWRPHUV
ZKHUHFXVWBLG 64/$QZHLVXQJHQ
DXV6LFKWGHU'DWHQEDQN
64/!VHOHFWVTOBWH[WH[HFXWLRQV
IURP YVTODUHD
ZKHUHVTOBWH[WOLNH VKFXVWRPHUV
64/B7(;7
(;(&87,216
VHOHFWIURPVKFXVWRPHUV
ZKHUHFXVWBLG &867B,'
$XVIKUXQJGHU64/$QZHLVXQJHQ
y Parse
–
–
–
Syntaktische Richtigkeit?
Alle Tabellen und Spaltennamen in Ordnung?
Erstellung Ausführungsplan
y Bind
–
Statement wird mit Bind-Variablen versehen,
sofern nötig
y Execute
–
Eigentliche Ausführung des Statements
1XW]HGLH'DWHQEDQN
y Was könnte man hier optimieren?
IRUL LQ
VHOHFW LGJUXSSH
IURP DQJHVWHOOWHIRUXSGDWH
ORRS
LI LJUXSSH *
WKHQ
XSGDWH DQJHVWHOOWH
VHW JHKDOW JHKDOW
ZKHUH LG LLG
HOVLI LJUXSSH $
WKHQ
XSGDWH DQJHVWHOOWH
VHW JHKDOW JHKDOW ZKHUH LG LLG
HQG LI
HQG ORRS
XSGDWH DQJHVWHOOWH
VHW JHKDOW JHKDOW
ZKHUH JUXSSH *
XSGDWH DQJHVWHOOWH
VHW JHKDOW JHKDOW ZKHUH JUXSSH $
7LSS
6FKOLH‰H
6LFKHUKHLWVO|FKHU
64/,QMHFWLRQ:DVLVWGDV"
y Ein böswilliger Angreifer
–
–
–
–
... nutzt eine Schwachstelle
... in einer Applikation
... um SQL-Kommandos einzuschleusen
... und so Daten zu manipulieren oder auszuspähen
64/,QMHFWLRQ(LQ%HLVSLHO
y KWWS>@SOVDSH[I"S >@3B&867,'
y KWWS>@I"S >@3B&867,'RU 64/,QMHFWLRQXQG$3(;
y "Session State Protection" hilft doch, oder ...?
64/,QMHFWLRQ8UVDFKHXQG/|VXQJ
V
8U
/
KH
F
D
J
Q
X
|V
64/,QMHFWLRQ)D]LW
y Anwendungen sind anfällig, wenn ...
–
–
SQL per Stringverkettung
zusammengesetzt wird ...
• 6XEVWLWXWLRQ6WULQJV3B,'LQ%HULFKWHQ
• %HULFKWH3/64/)XQNWLRQZHOFKHHLQ64/]XUFNJLEW
... Und Variablen
dabei nicht geprüft werden
• 3/64//RJLN
(;(&87(,00(',$7(23(1)25'%06B64/
y Der Entwickler muss SQL Injection verhindern
–
Der DBA kann gar nichts tun!
y Einfache Faustregeln:
–
–
–
Bind-Variablen verwenden, wo möglich
Ansonsten alle Variablen und Parameter prüfen
Code-Review für dynamisches SQL
7LSS
6SULFKPLWDQGHUHQ
$SSOLFDWLRQ([SUHVV&RPPXQLW\
6WDQG
y Oracle Technet:
–
–
–
–
19 Consulting-Unternehmen
5 Hosting-Unternehmen
Ca. 20 Weblogs
Diskussionsforum: >100.000 Beiträge
y Application Express-Community (D)
–
–
–
http://www.oracle.com/global/de/community
560 registrierte Leser
Newsletter erscheint alle 14 Tage
:HLWHUH,QIRUPDWLRQHQ
y Application Express Community
–
www.oracle.com/global/de/community/index.html
–
apex.oracle.com/otn
–
apex.oracle.com
–
apex.oracle.com/forums
y Application Express im OTN
y Öffentlicher Demoserver (für Testcases)
y Application Express Diskussionsforum
Herunterladen