APEX Application Archive (Teil 1) – Installation und Anwendungen archivieren

Mit der Packaged Application “APEX Application Archive” lassen sich Backups Ihrer Anwendungen erstellen. Mit einigen kleinen Erweiterungen, können Sie diesen Prozess auch automatisieren. Wie Sie diese Anwendung einsetzen und entsprechend erweitern können, können Sie dieser dreiteiligen Artikel-Serie entnehmen.

Bei der Anwendung “APEX Application Archive” handelt es sich, wie auch bei der in diesem Artikel vorgestellten Anwendung QuickSql, um eine sogenannte Packaged Application. Oracle stellt mit den Packaged Applications den Nutzern von APEX einige nützliche Werkzeuge zur Verfügung, die Sie auch produktiv einsetzen können.

Das Programm “APEX Application Archive” dient, wie der Name schon erahnen lässt, der Sicherung und Archivierung von APEX-Anwendungen. Sie können mit diesem Programm Anwendungsarchive erstellen, die eine oder mehrere Programme eines Workspaces enthalten können. Gespeichert werden diese Archive in entsprechenden Tabellen der Datenbank.

Interressant ist diese Anwendung im Entwicklungsprozess. Sie können so eine Versionierung bzw. Archivierung von Zwischenständen durchführen. Natürlich ist das auch manuell über die Exportfunktion des Application Builder zu erreichen. Allerdings müssen Sie sich bei dieser Variante um eine entsprechende Ablagestruktur im Filesystem kümmern.

Leider sieht die Anwendung keine automatische, z.B. zeitlich geplante Archivierung vor. Dieses Manko möchte ich allerdings in einem der nachfolgenden Artikeln durch eine eigene Lösung beheben.

APEX Application Archive installieren

Die Installation einer Packaged Application geht recht einfach von der Hand.

Im Application Builder klicken Sie einfach auf die Schaltfläche “Packaged Application”.

APEX Packaged Application installieren
Abbildung 1: APEX Packaged Application installieren

In der nächsten Seite werden Ihnen alle Packaged Applications der aktuellen APEX-Version (hier 18.1 EA) aufgelistet.

Filtern Sie diese nach den produktiv einsetzbaren Anwendungen, erhalten Sie die folgende Auflistung.

Abbildung 2: Produktiv einsetzbare Packaged Applications

Jetzt müssen Sie die Anwendung APEX Application Archive auswählen und im nächsten Fenster auf Installation klicken. Folgen Sie dann einfach dem Installations-Wizzard und schließen Sie den Vorgang ab.

Abbildung 3: APEX Application Archive installieren

Nach erfolgreicher Installation der Anwendung werden Sie nach der Anmeldung mit Ihrem APEX-Account beim ersten Start noch gebeten einige Parameter festzulegen.

Abbildung 4: Parameter APEX Application Archive

Fertig.

Anwendungen archivieren

Nach der Einrichtung der Anwendung, sehen Sie das Dashboard des “APEX Application Archive” Programms.

 

Abbildung 5: Application Archive Dashboard

Nun können Sie das erste Anwendungsarchiv anlegen. Betätigen Sie einfach die Schaltfläche “Archive Applications”.

Abbildung 6: Anwendung selektieren

In diesem Schritt wählen Sie eine oder mehrere Anwendung aus dem aktuellen Workspace aus.

Klicken Sie auf Next > .

Abbildung 7: Kommentar einfügen

Jetzt noch ein paar hilfreiche Informationen ergänzen und das Archiv mit “Create Archive” erstellen.

Bitte beachten Sie, dass die so erstellten Archive lediglich die selektierten APEX-Anwendungen enthalten. Die zugehörigen Datenbankobjekte wie Tabellen, Views, Packaged,usw. sind nicht enthalten. Um ein möglichst vollständiges Abbild eines Entwicklungs(zwischen)standes einer Applikation zu erhalten, empfehle ich Ihnen, die notwendigen DDL-Skripte in den Supported Objects der APEX-Anwendung zu hinterlegen.

Alternativ können Sie auch ein Dump-file mittels expdp (bzw. exp) erzeugen. Dies bringt allerdings den Nachteil mit sich, dass Sie sich wieder selber um die Versionierung der Dateien kümmern müssen.

Teil 2-Wiederherstellen und Exportieren

Im nächsten Teil dieser Beitragsreihe wird es um das Zurücksichern und Exportieren einer Anwendung gehen.

Wenn es Sie interessiert, wie es weiter geht, bestellen Sie doch den Newsletter von INFORMATIK-TRANSPARENT oder schauen Sie später noch einmal hier vorbei.

Beitragsübersicht

 

 

 

APEX Application Archive (Teil 2) – Anwendungen wiederherstellen

Im zweiten Teil der Beitragsreihe zur “APEX Application Archive” -Anwendung, geht es um das Wiederherstellen und das Herunterladen der archivierten APEX Anwendungen.

Im ersten Teil der Reihe habe ich Ihnen gezeigt, wie Sie eine oder mehrere Anwendungen mit Hilfe des “APEX Application Archive” in einem Archive sichern können. Die Anwendungen speichert der “APEX Application Archiver” in der Tabelle APEX$ARCHIVE_CONTENTS in einem BLOB.

Um nun eine oder mehrere Anwendungen, die Sie so gesichert haben, wiederherzustellen,  können Sie auf zweierlei Arten vorgehen.

Für beide Varianten ist der Ausgangspunkt der Menüeintrag “Archived Content”. Über diesen gelangen Sie zu einem Interaktiven Grid, welches alle archivierten Applikationen auflistet.

Abbildung 8: Anwendungsarchiv auswählen

Hier können Sie über das Setzen entsprechender Filter die benötigte Version der Anwendung auswählen.

APEX-Anwendung wiederherstellen

Als erste Möglichkeit können Sie eine archivierte Anwendung direkt aus einem Archiv heraus recovern. Dazu sind aber einige Schritte notwendig.

Suchen Sie in der Tabelle “Archived Content” die wiederherzustellen dies  Anwendung. Klicken  Sie auf den  Button “Restore”, so wird Ihnen auf der nächsten Seite des Wizzards eine Zusammenfassung der gewählten Anwendungen präsentiert.

Abbildung 9: Restore Content

Wie in Abbildung 9 dargestellt, starten Sie die Extraktion über “Restore Content”.

Jetzt wird die Exportdatei aus dem Archiv geladen und direkt in Ihrem Workspace in das sogenannte “Export Repository” importiert.

Anschließend bekommen Sie eine Checkliste angezeigt, die Ihnen die nächsten Schritte zur Installation der Anwendung erklärt.

Abbildung 10: Checkliste Installation der Anwendung

Wechseln Sie nun in die APEX-Entwicklungsumgebung und dort in den “Application Builder” des zugehörigen Workspaces. Klicken Sie auf “Utilities”.

Abbildung 11: Export Repository

Wie in Abbildung 11 dargestellt geht es weiter über den Link Export.

Abbildung 12: APEX-Anwendung installieren

Danach betätigen Sie den Link “Export Repository”.

Abbildung 13:Export Repository

Nun öffnet Sie das Export Repository. In dieser Tabelle sehen Sie die zuvor extrahieren Version Ihrer Anwendung(en). Über den Link “Install” starten Sie den Anwendungs Import-Assistenten.

Dieser stellt Ihnen verschiedene Möglichkeiten zur Verfügung. So können Sie die Anwendung parallel zu der aktuellen Anwendung installieren. Der eigentliche Ablauf ist im Abschnitt “Install Database Application” beschrieben.

APEX-Anwendung herunterladen

Bei der zweiten Variante können Sie einfach ein Archiv selektieren und die gewünschten Anwendung als APEX-Exportfile herunterladen. Diese Datei können Sie dann über die Importfunktion des Application-Builders importieren.

Dabei gehen Sie so vor.

Der Ausgangspunkt ist wieder, wie bereits in Abbildung 8 gezeigt, der Menüpunkt “Archived Content”. Dort suchen Sie sich wieder die Anwendungsversion, die Sie herunterladen möchten.

Klicken Sie hier auf “Download”.

Jetzt wird die Anwendung als Exportfile über Ihren Browser heruntergeladen. Diese Datei können Sie nun in einem beliebigen Workspace importieren.

Dazu melden Sie sich an der APEX-Entwicklungsumgebung an und öffnen dort den “Application Builder”.

Im “Application Builder” gelangen Sie über das Icon “Import” zum Import-Wizzard.

Hier können Sie die eben extrahierte Datei auswählen. Den File Type belassen Sie bei “Database Application,…”. Über Next> gelangen Sie zur nächsten Seite des Import-Assistenten.

Wie bereits erwähnt, verläuft die Installation einer Anwendung bei beiden Varianten ab diesem Punkt gleich.

Install Database Application

Im Installations-Wizzards können Sie, wie in der Abbildung 14 gezeigt, festlegen, ob Sie die Anwendung mit der ursprünglichen oder einer neuen App-ID automatisch oder manuell versehen lassen möchten. Je nach Auswahl wird die vorhandene Version der Anwendung überschrieben oder als parallele Version installiert.

Abbildung 14: Import Database Application

Über “Install Application” geht es zum nächsten Schritt. Hier müssen Sie noch die Frage beantworten, ob Sie die “Supported Objects” installieren möchten.

Bei den “Supported Objects” handelt es sich  meist um DDL-Skripte, welche bei der Installation bzw. Update oder auch Deinstallation ausgeführt werden.  Diese “Supported Objects” sind Bestandteil einer Anwendung.

Hier sollten Sie sich im Klaren darüber sein, ob diese SQL- Skripte ausgeführt werden sollen. Im Zweifelsfall können Sie sich diese Skripte über den etwas versteckten Bereich Tasks in dieser Seite anzeigen lassen. Nach dem aufklappen der Tasks klicken Sie dazu einfach auf den Link “Preview Installation Script”. In dem sich nun öffnenden Fenster sind alle Skripte einsehbar.

Jetzt müssen Sie den Wizzard nur noch bis zu Ende folgen und dabei die Installation abschließend bestätigen.

APEX Application Archive (Teil 3) – Automatisieren mit dem dbms_scheduler

Im dritten Teil der Beitragsserie wird es um die automatische Erzeugung von Anwendungsarchiven gehen. Nutzt man darüber hinaus noch die Metadaten des APEX -Repositories, so lässt sich der Vorgang auch noch etwas smarter gestalten.

Beitragsübersicht

 

 

 

 

 

APEX Application Archive (Teil 3) – Automatisieren mit dem dbms_scheduler

Im dritten Teil der Beitragsserie geht es um die automatische Erzeugung von APEX-Anwendungsarchiven. Nutzt man darüber hinaus noch die Metadaten des APEX-Repositories, so lässt sich der Vorgang auch noch etwas smarter gestalten.

APEX-Anwendungen  sichern via. PL/SQL

Zu Beginn geht es darum herauszufinden, welche PL/SQL Funktion benötigt wird, um eine Anwendungsarchiv zu erzeugen.

Da die Funktion bereits in der Packaged Application “APEX Application Archive” genutzt wird, können Sie sich diese einmal ansehen.

Hierzu begeben Sie sich einfach in die Verwaltung der Packaged Applications.

Öffnen Sie dort die “APEX Application Archive”  und klicken Sie auf den Button “Manage’.

Abbildung 14: Unlock Application

Folgen Sie dem Wizzards und Entsperren Sie die Anwendung.

Jetzt können Sie die Anwendung wie gewohnt über den Application Builder bearbeiten.

Öffnen Sie die Seite 9. Dort finden Sie den Prozess der für die Archivierung der Anwendungen zuständig ist.

Abbildung 15: Archive Application

Der besseren Lesbarkeit wegen, habe ich Ihnen den Quellcode einmal heraus kopiert.

DECLARE
  l_vc_arr2 APEX_APPLICATION_GLOBAL.VC_ARR2;
  l_hdr_id number;
  z integer;
BEGIN
  l_vc_arr2 := APEX_UTIL.STRING_TO_TABLE(ltrim(rtrim(:P10_APPLICATIONS_TO_ARCHIVE,':'),':'));

  l_hdr_id := apex_cloud_archive.create_header(
                  p_workspace_id = :flow_security_group_id,
                  p_version = 1,
                  p_archive_name = :P5_ARCHIVE_NAME,
                  p_comments =:P9_COMMENTS);

  FOR z IN 1..l_vc_arr2.count LOOP
    apex_cloud_archive.archive_applications(
       p_workspace_id = :flow_security_group_id,
       p_header_id = l_hdr_id,
       p_application_id = l_vc_arr2(z));
  END LOOP;
END;

Quellcode 1: Auszug aus Seite 9 der Oracle APEX Anwendung Archive Application

Wie Sie dem Listing entnehmen können, benötigen Sie die Funktion create_header und archive_applications.

Die Funktion create_header legt ein neues Archiv an. Diesem Archiv können Sie nun mit Hilfe der Prozedur archive_applications eine oder mehrere Anwendungen hinzufügen.

Abbildung 16: APEX Views – APEX_APPLICATIONS

Die Parameter, die Sie für den Aufruf der beiden Prozeduren benötigen, liefert die APEX-View APEX_APPLICATIONS.

Um beispielsweise die “Sample Database Application” mit der App-Id 507 zu sichern, können Sie folgenden PL/SQL Block ausführen.

Abbildung 17: Anwendung via. API archivieren

Ein Hinweis am Rande. Oracle schreibt auf https://apex.oracle.com/de/  (Stand 22.05.2018 ) folgendes zum Anpassen von Packaged Applications.

“[..] Application Express bietet eine Sammlung von 35 Geschäfts- und Beispielsanwendungen. Sie können diese Anwendundungen für Produktionszwecke einsetzen oder kopieren, editieren und als Grundlage für Ihre eigenen Anwendungen verwenden.[..]”

Smarte Sicherung durch Nutzung der APEX-Views

Kombiniert  man nun die APEX-View APEX_APPLICATIONS mit den Tabellen der Anwendung “Application Archive” kann man den Prozess noch etwas smarter gestalten. Über das folgende select-Statement ermitteln Sie notwendigen Parameter. Dabei wird allerdings geprüft, ob seit der letzten Archivierung überhaupt Änderungen an der zu sichernden Anwendung durchgeführt wurden.


select WORKSPACE_ID,APPLICATION_ID, APPLICATION_NAME
  from APEX_APPLICATIONS a
  where APPLICATION_ID = 507
    and not exists (
              select 'X'
               from "APEX$ARCHIVE_CONTENTS" "APEX$ARCHIVE_CONTENTS",
                    "APEX$ARCHIVE_HEADER" "APEX$ARCHIVE_HEADER"
               where "APEX$ARCHIVE_HEADER".ID="APEX$ARCHIVE_CONTENTS".HEADER_ID
                 and "APEX$ARCHIVE_HEADER".WORKSPACE_ID = a.WORKSPACE_ID
                 and "APEX$ARCHIVE_CONTENTS".APP_ID = a.APPLICATION_ID
                 and "APEX$ARCHIVE_HEADER".CREATED > a.last_updated_on)

Quellcode 2: Änderungen berücksichtigen

Jetzt können Sie diese Erkenntnisse in Form einer Prozedur in der Datenbank speichern.


create or replace procedure back_app
(p_app_id number)
is
  l_hdr_id number;
  l_workspace_id number;
  l_archive_name varchar2(200);
BEGIN

for c in (select WORKSPACE_ID, APPLICATION_NAME
           from APEX_APPLICATIONS a
          where APPLICATION_ID = p_app_id
            and not exists (
                 select 'X'
                  from "APEX$ARCHIVE_CONTENTS" "APEX$ARCHIVE_CONTENTS",
                       "APEX$ARCHIVE_HEADER" "APEX$ARCHIVE_HEADER"
                   where "APEX$ARCHIVE_HEADER".ID = "APEX$ARCHIVE_CONTENTS".HEADER_ID
                     and "APEX$ARCHIVE_HEADER".WORKSPACE_ID = a.WORKSPACE_ID
                     and "APEX$ARCHIVE_CONTENTS".APP_ID = a.APPLICATION_ID
                     and "APEX$ARCHIVE_HEADER".CREATED > a.last_updated_on))
loop
  l_workspace_id := c.WORKSPACE_ID;
  l_archive_name := c.APPLICATION_NAME;

  l_hdr_id := apex_cloud_archive.create_header(
               p_workspace_id => l_workspace_id ,
               p_version => 1,
               p_archive_name => l_archive_name || to_char(sysdate,'dd.mm.yyyy'),
               p_comments => '' );

apex_cloud_archive.archive_applications(
               p_workspace_id => l_workspace_id ,
               p_header_id => l_hdr_id,
               p_application_id => p_app_id );
end loop;

END;

Quellcode 3: Prozeduren back_app

Um nun eine Anwendung zu archivieren genügt folgender Aufruf.

BEGIN
  back_app(507);
END

Quellcode 4: Anwendung archivieren

Sicherungen Automatisieren  mit dem dbms_scheduler

Gerade im Rahmen der Entwicklung einer Anwendung ist es oft nützlich, auf ältere Versionen einer Anwendung zurückgreifen zu können. Um das Archivieren nicht immer manuell anstoßen zu müssen, können Sie die eben konzipierte Prozedur back_app über einen Scheduler ausführen. Am einfachsten geht das über das Package dbms_schedule.


BEGIN
  DBMS_SCHEDULER.CREATE_JOB (
     job_name => 'my_backup_job1',
     job_type => 'PLSQL_BLOCK',
     job_action => 'BEGIN back_app(507); END;',
     start_date => sysdate,
     repeat_interval => 'FREQ=DAILY; BYHOUR=10,15,20;',
     end_date => sysdate + 1,
     enabled => TRUE,
     comments => 'sample app');
END;
/

Quellcode 5: Regelmäßige Sicherung

In diesem Beispiel wird die Anwendung 507 jeden Tag um 10:00, 15:00 und 20:00 immer dann gesichert, wenn die Anwendung seit der letzten Archivierung geändert wurde.

Um nun eine Anwendung wieder herzustellen, gehen Sie wie in Teil 2 dieser Reihe beschrieben vor.

Beitragsübersicht