Backup-Optionen in APEX

04.
Februar
2022
Veröffentlicht von: Andreas Mößel

Während der Entwicklung von APEX-Applikationen und deren Einspielen auf produktive Umgebungen passieren immer wieder Fehler, die am liebsten zurückgedreht werden wollen. Doch dafür braucht man Sicherungen der Anwendungen.

Welche Möglichkeiten gibt es zum Erstellen von Backups in APEX?

Missgeschicke passieren

Schnell ist es getan: Ein altes Feature wird mit neuer Funktionalität ersetzt, welche dann aber nicht funktioniert. Man verwirft die neue Idee und will wieder den vorherigen Stand benutzen, aber leider hat man alles Alte gelöscht. Mühsam wird jetzt die ursprüngliche Umsetzung mit viel Raten wiederhergestellt oder lange an der neuen Idee getüftelt bis sie doch funktioniert.
Diese oder ähnliche Konstellationen, in denen man sich eine Sicherungskopie wünscht, haben schon viele Entwickler erlebt. Im besten Fall hat man vorher daran gedacht, sich eine manuelle Kopie über den Export-Knopf in der Entwicklungsumgebung zu speichern. Aber viel besser wäre es doch, wenn diese Sicherungen automatisch passieren würden. Welche Optionen gibt es?

Automatische Sicherungen der Applikationen

Über die Jahre sind ein paar Optionen zum automatischen Sichern der Applikationen in den verschiedenen Versionen hinzugekommen.

APEX eigene Backups

APEX selbst macht Backups! Allerdings wurde dieses Feature erst in der Version 20.1 eingeführt und ist daher noch relativ neu.

null

null

Die Sicherung wird täglich ausgeführt, sofern an der Applikation etwas geändert wurde. Von diesen Sicherungen werden die 25 neuesten aufgehoben. Alles was älter ist, wird automatisch gelöscht. Natürlich ist das nicht die einzige Funktion. Es lassen sich nämlich auch manuelle Sicherungen erstellen und von Hand löschen, Backups sperren, so dass sie nicht automatisch gelöscht werden, sowie eine gesicherte Version per einfachem Knopfdruck wiederherstellen.

Allerdings werden nicht alle Backup-Optionen ausgeschöpft – private Reports der Benutzer werden beispielsweise nicht mit abgespeichert.

Sichern über PLQSL mit APEX_EXPORT

25 Backups sind in vielen Anwendungsfällen ausreichend. Doch immer wieder gibt es auch speziellere Anforderungen an Backups. Mithilfe der GET_APPLICATION Funktion des APEX_EXPORT Packages ist es möglich, Applikationen nicht nur als Ganzes und mit allen Exportmöglichkeiten, sondern auch zerlegt in einzelne Komponenten zu exportieren.
Das Ergebnis ist ein Typ APEX_T_EXPORT_FILES, welcher eine Tabelle von Typ APEX_T_EXPORT_FILE ist, welche wiederum aus einem Namensfeld (Varchar2) und dem Inhalt der Datei (CLOB) besteht. Diese können dann nach eigenem Bedarf auf der Datenbank in einer Tabelle gespeichert werden.

Beispiel für eine Sicherungstabelle:

CREATE TABLE APPLIKATION_BACKUP
  ( ID NUMBER GENERATED ALWAYS AS IDENTITY MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1
          START WITH 1 NOCACHE  NOORDER  NOCYCLE  NOT NULL ENABLE,
    CREATED_ON DATE DEFAULT sysdate,
    APP_ID NUMBER NOT NULL ENABLE,
    SQL_FILE CLOB,
    CONTENT_TYPE VARCHAR2(30 BYTE) DEFAULT 'APPLICATION',
    KOMMENTAR VARCHAR2(1000 BYTE)
   );

Durch die Identity-Spalte ID wird jeder Zeile automatisch eindeutig nummeriert.


Code zum Exportieren einer APEX-Anwendung Mithilfe von APEX_EXPORT:

DECLARE
   v_export apex_t_export_files;
BEGIN
   v_export := apex_export.get_application(
      p_application_id => 9099,
      p_with_ir_public_reports => true,
      p_with_ir_private_reports => true,
      p_with_ir_notifications => true);
   INSERT INTO applikation_backup(app_id, sql_file, kommentar)
         VALUES (9099, v_export(1).contents, 'Automatisches Backup TestBackupApp');
   COMMIT;
END;


Wie können wir nun die Anwendung aus diesem Export wiederherstellen?  Weil die Exportdateien nichts anderes als SQLs sind, können sie einfach an ein EXECUTE IMMEDIATE Statement übergeben werden. Wichtig ist, dass man vor der Ausführung des SQL den Workspace setzt:

DECLARE
   v_backup_sql CLOB;
BEGIN
   APEX_UTIL.SET_WORKSPACE(p_workspace => (‚TEST_WORKSPACE‘); --wichtig!
   SELECT sql_file INTO v_backup_sql
      FROM applikation_backup
      WHERE id = 1;
   EXECUTE IMMEDIATE v_backup_sql;
END;

 

Für mehr Informationen können Sie in Oracle‘s Dokumentation zu APEX_EXPORT nachschlagen.

 

Fazit

Es hat etwas Zeit gebraucht bis diese Funktionen von Oracle implementiert wurden, aber mit den neueren Versionen von APEX gibt es nun ausreichend viele Wege, um Backups zu erstellen. Es ist ein Feature, das jeder kennen und nutzen sollte, um mehr Sicherheit in die Entwicklung und Betrieb von APEX-Anwendungen zu bringen. Ein Backup kann nie schaden.

Jede Menge Know-how für Sie!

In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.