|
APEX-Anwendungen auf Linux "mounten": Mit dem Oracle 11gR2 Database Filesystem
Oracle11g Release 2 steht seit dem 1. September
zum Download bereit. In diesem Tipp stellen wir Ihnen eine
völlig neue Möglichkeit vor, Bilder, Dokumente oder andere Dateien in eine
APEX-Applikation hochladen zu können - das neue Datenbank Filesystem in Oracle 11g Release 2.
Lesen Sie hier, wie Sie ein Datenbank-Filesystem einrichten, auf einem Linux-System
in den Verzeichnisbaum einhängen, mit normalen Linux-Kommandos
Dateien dort hineinkopieren und schließlich aus einer APEX-Anwendung
heraus damit arbeiten können.
Voraussetzung für diesen Tipp ist eine Installation von Oracle 11g Release 2.
Vorbereitungen
In einer Datenbank können mehrere Dateisysteme existieren. Zu jedem
Datenbank-Filesystem gehört eine Tabelle, in welche die Dateien abgelegt werden.
Die Tabelle kann in jedem beliebigen Datenbankschema (also auch im Parsing Schema
einer APEX-Anwendung) liegen. Das Datenbankschema benötigt allerdings die Rolle
dbfs_role. Führen Sie also die ersten Schritte in SQL*Plus durch:
- Geben Sie Ihrem APEX Parsing Schema (hier: DBFS) die Rolle DBFS_ROLE - dies müssen
Sie als DBA tun.
- Navigieren Sie (auf dem Datenbankserver) ins Verzeichnis $ORACLE_HOME/rdbms/admin
und starten Sie dort das SQL-Skript dbfs_create_filesystem_advanced.sql. Dies
kann wie folgt aufgerufen werden:
Der folgende Aufruf erzeugt ein Dateisytem namens APEX_FS, legt die Tabelle
in den Tablespace USERS und verwendet keinerlei Performance-, Kompressions- oder
Sicherheitsfeatures. Diese können aktiviert werden, erfordern jedoch die Lizensierung
zusätzlicher Datenbankoptionen wie der
Advanced Security Option, der
Advanced Compression Option oder
der Partitioning Option:
Nachdem das Skript durchgelaufen ist, befindet sich die Tabelle T_APEX_FS in Ihrem
Datenbankschema - Abbildung 1 zeigt die Sicht der Tabelle im SQL Workshop. In dieser
Tabelle werden alle Dateien gespeichert. Die Inhalte selbst befinden sich als BLOB
in der Spalte FILEDATA, der Dateiname ist in der Spalte ITEM.
Abbildung 1: Die Basistabelle "T_APEX_FS" für das neue Datenbank-Filesystem im SQL Workshop
Bevor Sie nun eine APEX-Anwendung für diese Tabelle erstellen, wollen wir uns
der Möglichkeit widmen, das Datenbank Filesystem in den Verzeichnisbaum eines
Linux-Servers einhängen zu können - das ist das zentrale neue Feature des
Datenbank Filesystems.
Einhängen in den Linux-Verzeichnisbaum (mount)
Bevor Sie das soeben erzeugte Dateisystem in den Verzeichnisbaum Ihres Linux-Servers
einhängen können, müssen einige Vorbereitungen getroffen werden. Dazu ist auch die
Hilfe des Systemadministrators (root) nötig. Die
Schritte sind im einzelnen in der Oracle-Dokumentation
(SecureFiles and Large Objects Developers' Guide) beschrieben:
- Das Paket "fuse" (FileSystem in Userspace) muss installiert werden. Achten Sie darauf,
dass Sie exakt die Version 2.7.3 von
fuse.sourceforge.net herunterladen und installieren.
- Stellen Sie sicher, dass das Fuse-Kernelmodul mod_fuse
bei jedem Systemstart mit modprobe fuse geladen wird.
- Stellen Sie sicher, dass der Linux-User oracle
auf die Device-Datei /dev/fuse zugreifen kann
(chmod 666 /dev/fuse). Auch dies muss bei
jedem Systemstart gesetzt werden.
Anschließend ist das System eingerichtet: Nun kann das erzeugte Dateisystem
in den Verzeichnisbaum eingehängt werden. Legen Sie zunächst ein leeres Verzeichnis
als Mount Point an. Das Verzeichnis muss
dem Eigentümer der Oracle-Software gehören (typischerweise oracle).
Mit dem von Oracle mitgelieferten Executable dbfs_client
(im Verzeichnis $ORACLE_HOME/bin) wird das Datenbank Filesystem
nun eingehängt. Der Aufruf ist wie folgt:
Die Parameter im einzelnen ...
- db_user:
Name des Datenbankusers, dem die Tabellen des Datenbank-Filesystems gehören
- db_server:
Ein gültiger Connection-String zu einer Oracle-Datenbank (Release 11.2). Der
Connection String sollte vorher mit SQL*Plus oder
einem anderen Werkzeug getestet werden. Die Datenbank muss
sich aber nicht auf dem gleichen Rechner befinden.
- mount point:
Das Verzeichnis, in welches das Dateisystem eingehängt werden soll. Alle
Dateisysteme des angegebenen Datenbankschemas (können auch mehrere sein)
werden dort sichtbar sein.
- options:
Zusätzliche Optionen für den Mount sind
in der Oracle-Dokumentation beschrieben.
Ein denkbarer Aufruf wäre also wie folgt:
Das Programm fragt Sie nach dem Passwort des Datenbankusers
(hier: DBFS). Anschließend
ist ist das Datenbank Filesystem eingehängt - das Executable läuft übrigens solange
das Dateisystem eingehängt ist - wundern Sie sich nicht, wenn der Prompt nicht
"zurückkommt". Kopieren Sie nun (mit normalen Linux-Mitteln)
einige Dateien hinein. Abbildung 2 zeigt die Sicht auf das Dateisystem nach dem Kopieren der
Dateien.
Abbildung 2: Dateisystem-Sicht auf die Inhalte des neuen Datenbank-Filesystems
Der Clou ist nun die SQL-Sicht auf die Dateien: Denn alle Dateien liegen in der
Tabelle T_APEX_FS. Diese können Sie sich bereits im SQL Workshop ansehen (Abbildung 3).
Abbildung 3: SQL-Sicht auf die Inhalte des neuen Datenbank-Filesystems
Wenn Sie nun per SQL-Kommando Dateien löschen, verschwinden diese selbstverständlich
auch in der Betriebssystem-Sicht. Alle Daten liegen in der Tabelle T_APEX_FS; mit
dem Einhängen in den Linux-Verzeichnisbaum steht jedoch eine zusätzliche Schnittstelle
auf die Daten zur Verfügung. Nimmt man das auf Linux-Systemen ebenfalls sehr verbreitete
Paket Samba hinzu, so kann das
neue Datenbank-Filesystem auch als Windows-Share im Netzwerk
publiziert werden. Windows-Rechner können es dann als Netzlaufwerk einbinden (Abbildung 4).
Abbildung 4: Das Datenbank-Filesystem als Windows-Share (via Samba)
Integration in eine APEX-Anwendung
Nun geht es daran, eine APEX-Sicht auf das Dateisystem zu erzeugen (in diesem Tipp
erstmal nur "Read Only") - und auch
dies ist sehr einfach. Erzeugen Sie eine neue APEX-Anwendung und darin eine
neue, leere Seite. Fügen Sie dieser Seite als erstes einen Baum
(Tree)
zur Darstellung der Ordner-Struktur hinzu.
- Klicken Sie in der Developer Toolbar unterhalb der Seite auf Erstellen (Create)
- Wählen Sie Neue Seite (New page) aus
- Wählen Sie dann Baum (Tree) aus.
-
Machen Sie zunächst Angaben zur Seitennummer, zum Seiten- und Regionstitel und
zu den verwendeten Templates.
-
Geben Sie dem Baum einen (internen) Namen. Wichtig ist die Einstellung
zur Wurzel des Baums (Start Tree).
Diese muss auf einer SQL-Abfrage
basieren (Based on a SQL Query).
-
Wählen Sie ein Darstellungstemplate aus.
-
Geben Sie die SQL-Abfrage an, welche die Wurzel des Baums bestimmt. Die
Wurzel des Dateisystems enthält den Text
ROOT in der Spalte
ITEM. Die
Ordner-Hierarchie wird durch die Einträge in den Spalten
STD_GUID und
STD_PARENT_GUID
bestimmt.
-
Fügen Sie Schaltflächen zum Auf- oder Zusammenklappen der Baumknoten
nach Belieben hinzu.
-
Wählen Sie das Datenbankschema aus, in dem sich die Dateisystem-Tabelle
befindet (hier: DBFS).
-
Geben Sie die Dateisystem-Tabelle an (hier: T_APEX_FS).
-
Legen Sie fest, welche Spalten die Hierarchie des Dateisystems bestimmen
(STD_GUID und
STD_PARENT_GUID)
und welche Spalten im Baum angezeigt werden
sollen (ITEM). Wählen Sie
Existing Application Item bei
Link Option aus.
-
Legen Sie Details zum Link fest. Der Link soll auf die gleiche Seite (Page 1)
verzweigen und das Element P1_FOLDER_GUID
mit einem Wert setzen. Das Element muss noch nicht existieren, wir legen es
nach Erstellen des Baums an. Tragen Sie es hier dennoch ein.
-
Legen Sie noch eine zusätzliche WHERE-Klausel fest. Im Baum sollen nur
Ordner angezeigt werden. In der Tabelle T_APEX_FS lassen diese sich
anhand der Spalte PATHTYPE identifizieren. Der Wert 2 repräsentiert einen
Ordner. Tragen Sie also PATHTYPE = 2 als Where-Klausel ein.
Starten Sie Ihre Anwendungsseite schließlich. Diese sollte dann wie in Abbildung 5
aussehen.
Abbildung 5: APEX Tree mit den Ordnern des Datenbank Filesystems
Erzeugen Sie nun (in der Baum-Region) das bereits verwendete Element
P1_FOLDER_GUID als
ausgeblendetes Element
(Hidden). Erzeugen Sie als
nächstes einen neuen Bericht. Verwenden Sie dabei folgendes SQL
als Berichtsabfrage:
Navigieren Sie anschließend zu den Berichtsattributen und vergeben Sie
dort passende Spaltenüberschriften. Die Spalte STD_GUID können Sie
ausblenden (Hidden). Eine Besonderheit ist die Spalte Download - navigieren
Sie zu den Spaltenattributen derselben und hinterlegen Sie folgendes
Zahlen bzw. Datumsformat (Number / Date Format):
Abbildung 6: Spezielles Format für die Spalte DOWNLOAD
Mit diesem speziellen Formatstring wird APEX im Bericht einen Download-Link
für diese Datei generieren. Abbildung 7 zeigt den dann fertigen Bericht
im Zusammenspiel mit dem Baum für die Folderstruktur.
Abbildung 7: Fertige APEX-Seite für das Datenbank-Filesystem
Ausblick
Wenn Sie in Ihrer APEX-Anwendung mit Dateien (Bilder, Dokumente und andere)
arbeiten, so kann das in Oracle11g Release 2 neue Datenbank Filesystem
eine interessante neue Möglichkeit sein, Dateien in die Datenbank zu
schreiben. Auf Linux-Systemen kann das Datenbank Filesystem
in den Verzeichnisbaum eingehängt werden (mount) - anschließend kann es mit
normalen Betriebssystem-Kommandos genutzt werden. Alle Inhalte befinden sich
jedoch in einer Datenbanktabelle, die mit SQL-Abfragen
angesprochen und damit in APEX-Anwendungen
integriert werden kann. Alle Möglichkeiten
der Oracle-Datenbank stehen für die Inhalte des Datenbank Filesystems bereit:
- Einheitliches Backup & Recovery
- Integrität von Daten und Metadaten mit Constraints
- Abfragen von Datenständen "in der Vergangenheit" mit Flashback Query
(Community-Tipp)
- Volltextindizerung und Recherche im Dateisystem mit Oracle TEXT
(Community-Tipp)
- Und vieles mehr ...
Bis hierhin wurde das Datenbank Filesystems aus APEX heraus lediglich "Read Only "
genutzt - die Dateien wurden über Betriebssystem-Kommandos (Linux-Mount) geschrieben.
Die Architektur der Datenbank-Filesysteme erlaubt darüber hinaus auch schreibende Zugriffe
aus der SQL-Ebene heraus und sogar Dateisysteme für eigene Tabellen und eigene Datenstrukturen.
Diese Themen müssen jedoch einem separaten Community-Tipp vorbehalten
bleiben ...
Zurück zur Community-Seite
|