Ich bin Informatik-Student an der Hochschule Mannheim. Aktuell leiste ich mein Praktikum bei Oracle Deutschland und möchte meine bisherige Erfahrung von der Oracle APEX Migration On-Premises in die Cloud mit euch teilen. Dieser Blogeintrag richtet sich an Personen oder Entwickler ohne viel Vorwissen zu SQL oder den Oracle Datenbanken. Dementsprechend versuche ich es so einfach wie möglich zu erklären um auch Studenten oder Nicht Datenbank-Experten den Einstieg zu erleichtern. Oracle APEX (kurz für Application Express) ist eine Low-Code Entwicklungsplattform mit welcher man in wenigen Minuten ansprechende Datenbank-Anwendungen erstellen kann. Wer mehr über APEX erfahren möchte, kann weitere Informationen unter diesem Link finden: https://apex.oracle.com/de/
Meine Aufgabe bestand darin, dass wir unsere lokal laufende APEX Instanz (APEX + Datenbank auf einem Server) auf die neue Datenbank- und APEX -Version updaten. Hierfür hatten wir zwei Möglichkeiten: Installieren einer neuen VM mit den aktuellen Versionen der Datenbank und APEX oder alles in die Cloud zu verschieben.
Die erste Lösung war alles auf einem anderen Rechner in einer virtuellen Maschine zu installieren. Ich habe für ein Upgrade der Datenbank und APEX eine neue Virtuelle Maschine aufgesetzt. Der Prozess, das richtige Betriebssystem zu installieren, die Datenbank zu installieren, APEX und ORDS (kurz für Oracle REST Data Services, eine REST Schnittstelle der Oracle Datenbank) richtig zu konfigurieren und dann die Netzwerkeinstellungen so einzurichten, dass Mitarbeiter von außen aus auf die Virtuelle Maschine zugreifen können, hat mich mehrere Wochen gekostet.
Im zweiten Versuch nutzte ich die Oracle Cloud, nachdem die Kollegen mich auf diese Möglichkeit hingewiesen hatten. Damit ging alles viel einfacher, wie ich feststellen konnte. Ein riesen Vorteile der Oracle Cloud ist: Um all die erwähnten Installations- und Arbeitsschritte muss man sich nicht kümmern. Nach 15 Minuten hatte ich bereits eine laufende Autonomous Database und ein laufendes APEX – beides in der aktuellsten Version. Ich musste mich nicht um die neue Datenbank- oder APEX -Versionen kümmern. Das macht alles Oracle für mich. Zudem bekomme ich auch gleich, Zugang zu einigen Out-of-the-Box Tools wie den SQL Developer. Der folgende Beitrag soll eine Step-by-Step Anleitung sein, um das Vorgehen zu zeigen.
Voraussetzungen für eine Migration von einer lokalen Installation zu APEX in Autonomous Database sind:
Folgende Schritte sind für die Migration notwendig:
Schritt 1: Schema und Anwendungs Export aus dem lokalen APEX
Um die Daten wie Tabellen oder Schemas aus einer lokalen Oracle Datenbank zu exportieren, gibt es eine Commandline Werkzeug Namens "expdp" (kurz für Data Pump Export). Bei einem Data Pump Export können z.B. Daten von Schemas aus einer Datenbank in ein *.dmp File (Binäre Datei mit den Daten aus dem Schema) extrahiert werden, um sie danach mit dem Data Pump Import in eine andere Datenbank wieder einzuspielen.
Um nun die gewünschten Schemas aus der DB zu extrahieren, gehen wir wie folgt vor:
Öffne auf deiner lokal laufenden Instanz dein Terminal:
# sqlplus / as sysdba > grant read, write on directory data_pump_dir to system; > commit; > exit # expdp system/oracle@localhost/pdb1 schemas=SCHEMA_NAME dumpfile= SCHEMA_NAME.dmp directory=data_pump_dir
Weitere Optionen zum Werkzeug "expdp kann man auch über die Help-Funktion bekommen:
expdp help=yes
Bei dem Kommando "expdp" müssen die Parameter wie die Verbindung zur Datenbank angepasst werden, wie auch der Name des zu exportierenden Schemas und das Passwort des SYSTEM Users. Wir verwenden als Directory Namen data_pump_dir. Dies ist der logische Name für das physikalische Verzeichnis (der Ort), in dem die *.dmp Datei abgelegt wird.
Dort wo ihr eure Datenbank installiert habt, befindet sich dieses Verzeichnis. Bei mir ist es der Pfad:
/u01/app/oracle/admin/cdb1/dpdump/BDBADF0127CC3C07E055000000000001.
Sucht einfach in eurem Installationsort nach dem Ordner „admin“, dort den Ordner mit eurer „SID“ (Datenbankname) und dort den Ordner „dpdump“.
Nun habt ihr euer Datenbank Schema schon erfolgreich exportiert.
Um die APEX Anwendungen zu exportieren, könnt ihr das Oracle Werkzeug SQLcl verwenden. Dies ist ein Commandline Programm mit erweiterten Funktionen für den Zugriff auf eure Datenbank, das auch APEX Anwedungen exportieren kann.
Der Link für den Software Download lautet: https://www.oracle.com/tools/downloads/sqlcl-downloads.html.
Ihr entpackt die zip-Datei in einem von euch ausgewählten Pfad. Dann geht ihr im Terminal wie folgt vor:
# JAVA_HOME=/usr/bin/java # alias sql=“DEIN_PFAD/sqlcl/bin/sql" # cd DEIN_PFAD/sqlcl/bin # sql /nolog > connect system/oracle@localhost/pdb1 > apex export -instance -workspaceid 5627093841680972 -expOriginalIds
Mit dem "apex export" Kommando werden alle Anwendungen exportiert, die unter dieser Workspace ID laufen (Alle Kommando Optionen siehst du, wenn du nur "apex export" eingibst). Die Workspace ID findest du u.a. wenn du dich mit dem passenden Schema verbindest und folgendes Kommando in SQL ausführst:
select workspace, workspace_id from apex_workspaces;
Nun hast du deine Schemas und deine APEX Anwendungen erfolgreich exportiert.
Dabei wurden die Anwendungen in DEIN_PFAD/sqlcl/bin gespeichert.
Schritt 2: Autonomous Datenbank
Folgender Link https://k21academy.com/1z0-932/how-to-create-always-free-services-in-oracle-cloud/ zeigt dir wie du eine Oracle Autonomous Datenbank bekommst. Hierbei sind jedoch nur die Schritte 1-9 wichtig.
Schritt 8 und 9 sind für später sehr wichtig. Dies ist dein Wallet. Dieses wird benötigt um später die sichere Verbindung von deinem Rechner auf die Cloud Autonomous Datenbank herzustellen. Der Linux Teil auf dieser Seite ist nicht erforderlich. Kleiner Tipp: Bei der Registrierung wird eine Kreditkarte benötigt, diese dient aber nur zur Sicherheit und wird nicht belastet solange du kein Upgrade machst (Und glaub mir, das passiert nicht versehentlich ;) )
Schritt 3: Upload der Schemas in die Autonomous
Nun haben wir unsere exportierten APEX Anwendungen und deren zugehörigen Schemas.
Doch wie bekommen wir sie in unsere Cloud Instanz?
Um Schemas in die Cloud uploaden zu können, gibt es eine Art von reserviertem Speicherplatz für den Benutzer in der Cloud. Dieser heißt Object Storage. Wie du einen anlegst und die Schemas hochlädst zeige ich dir jetzt.
Cloud Umgebung -> Hamburger Menü oben links -> Object Store -> Create Bucket -> Namen geben.
Nun hast du deinen reservierten Speicher in der Oracle Cloud. Hier wirst du die Schemas nun händisch oder per Terminal per Bulk Load hochladen.
Um deine Schemas vom Terminal aus in den Object Storage zu laden, benötigst du das Oracle Cloud Infrastructure Command Line Werkzeug CLI. CLI ist ein schlankes Tool, das man eigenständig oder über die Konsole verwenden kann, um Oracle Cloud Infrastructure-Aufgaben auszuführen.
Der Download findet sich hier: https://docs.oracle.com/de-de/iaas/Content/API/SDKDocs/cliinstall.htm
Nach der Installation gilt es den CLI auf deine Autonomous-Instanz zu konfigurieren. Dies machst du nach der Installation im Terminal mit:
# oci setup config
Hier wirst du aufgefordert deine OCID und deine Tenancy OCID anzugeben.
OCID -> In der Cloud anmelden -> Oben rechts auf Profil -> User Settings -> OCID rauskopieren und einfügen im Terminal.
Tenancy OCID -> in der Cloud anmelden -> Oben links im Hamburger Menü -> Ganz unten Administration -> Bei Tenancy Information die OCID rauskopieren und einfügen im Terminal.
Deine Region auswählen und den API Sign kreieren lassen -> y
-> key wurde gespeichert unter: DEIN_INSTALLATIONSPFAD/.oci/
In der Cloud oben rechts auf Benutzer klicken -> User Settings -> API Keys -> Add API Key -> Inhalt einfügen von DEIN_INSTALLATIONSPFAD/.oci/oci_api_key_public.pem ( Terminal : vi DEIN_INSTALLATIONSPFAD/.oci/oci_api_key_public.pem, MIT Header und footer !!).
Nun wechsele ins Terminal und lade die Schemas in dein Bucket.
# cd DEIN_INSTALLATIONSPFAD/.oci # oci os object bulk-upload -ns DEIN_NS -bn DEIN_BUCKETNAME --src-dir DEIN_PFAD_ZU_DEN_LOKAL_EXPORTIERTEN_SCHEMAS
ns ist der Namespace, den man beim Hamburger Menü findet: Hamburger Menü -> Object Storage -> Object Storage -> Bucketname -> Namespaces. 'bn' ist der Bucket Name.
In dem von dir angegeben Pfad sollten nur die *.dmp Dateien liegen.
Nun liegen deine Schmeas im Object Storage.
Schritt 4: Import der Daten von dem Object Storage in die Datenbank
Um nun deine Schemas aus dem Object Storage in die Datenbank zu importieren, kannst Du jetzt das Data Pump Import Werkzeug verwenden. Dazu ist es nicht erforderlich die gesamte Oracle Datenbank Client Software zu installieren, sondern das Laden des Oracle Instant Client ist vollkommen ausreichend. Die URL lautet
https://www.oracle.com/database/technologies/instant-client/downloads.html
Hier findest du zu deinem OS die passenden Versionen und ganz unten auf der Seite steht wie du es installierst- normalerweise reicht das Auspacken der komprimierten Datei aus.
Hierfür lädst du dir folgende 3 Dateien herunter:
Basic Package, SQL*Plus und und Tools Package. (Tools Package für den Data Pump und SQL*Plus um dich mit der Cloud Datenbank zu verbinden).
Nach der Installation, gehst du in den Ordner instantclient > network. Dort erstellst du einen neuen Ordner „admin“.
In diesen Ordner kopierst du alles von dem entzippten Wallet Ordner (Schritt 2 bei der Erstellung der Autonomous Datenbank).
Danach musst du bei der Datei sqlnet.ora den Pfad zum Wallet anpassen (Dictionary = Dort wo du dein Wallet abgelegt hast). Bitte genaue Syntax aus der Sqlnet.ora Datei einfügen – so ähnlich wie hier im Tipp ... also
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="c:\data\cloud\wallet_DBADW")))
Anschließend gehst du in dein Terminal und testest mit dem SQL*Plus Werkzeug ob die Verbindung klappt:
# export PATH=DEIN_PFAD_ZUM_INSTANTCLIENT/instantclient_19_8:$PATH # sqlplus /nolog > connect admin/PASSWORD@yourDBNAME_high
Wenn erfolgreich, schließe das Terminal nicht. Du brauchst es noch. Die Adresse (auch Net Service Name) yourDBNAME_high findest du, wenn du dir unsicher bist, z.B. in deinem entzippten Wallet, in der Datei tnsnames.ora. Hier sind alle Service Namen aufgezählt, auf welche deine Datenbank horcht.
Im nächsten Schritt wird sichergestellt, dass die Kommunikation mit Autonomous Datenbank gesichert abläuft und nur autorisierte Daten geladen werden können. Dazu werden die Datenbank Credentials mit dem PL/SQL Package DBMS_CLOUD angelegt und als Default festgelegt. Das verwendete Passwort lässt sich in der OCI Konsole oben rechts unter "User Settings" im Bereich Auth Tokens mit Generate Token erzeugen.
(Eine Beschreibung dazu findet sich auch im Tipp .... unter Abschnitt Daten Laden mit Data Pump: https://apex.oracle.com/pls/apex/germancommunities/dbacommunity/tipp/6921/index.html)
Bei Cloud anmelden -> Links Hamburger Menü -> Ganz unten -> Identity -> Users -> DU -> Auth Tokens -> Generate Tokens (Passwort rauskopieren)
SQL> set scan off SQL> execute DBMS_CLOUD.create_credential(credential_name => 'CREDENTIAL_DEINNAME', username => deineemail@adresse.de', password => HIER_KOMMT_DAS_RAUSKOPIERTE_PASSWORT; SQL> alter database property set default_credential = 'ADMIN.CREDENTIAL_ DEINNAME'; SQL> select owner, credential_name, username, enabled, comments from dba_credentials;
Nun importieren wir das Schema aus dem Object Storage in die Datenbank.
Hierfür benötigst du den Link zu der .dmp Datei in dem Object Storage. Diese findest du -> Unter Objects: Bei jedem Schema auf die 3 Punkte rechts klicken -> View Object Details -> und die URL rauskopieren.
Öffne dein Terminal und verwende folgendes Data Pump Import Kommando:
impdp admin@YOURDBNAME_high directory=data_pump_dir dumpfile=CREDENTIAL_ DEINNAME':DEIN_LINK_ZU_DEM_dmp_IM_OBJECT_STORAGE logfile=import.log
Nun ist dein Schema in die Datenbank geladen.
Schritt 5: Import von den APEX Anwendung in die Cloud APEX
Um nun die Anwendungen in APEX in der Autonomous Datenbank zu übertragen, benötigst du bereits einen Workspace mit Usern in APEX (Arbeitsplatz für Anwendungen). Falls du keinen hast, schaue in Blogeintrag [Forms to APEX] Creating a Workspace nach: https://blogs.oracle.com/apex/forms-to-apex-creating-a-workspace
Der Workspace ist mit wenigen Klicks eingerichtet.
Man kann die exportierten *.sql Dateien (APEX Anwendungen) händisch in der APEX Oberfläche importieren. Hier konzentrieren wir uns aber auf die Handhabung über das Terminal. Es ist zwar schwieriger, aber eignet sich viel besser für das Verständnis und eröffnet dir die Möglichkeit in Zukunft automatisierte Skripte für so einen Prozess zu schreiben. Gehe in dein Terminal und navigiere zu deinem Ordner in dem die exportierten Applications liegen. Jetzt verwendest Du wieder SQLcl für den Import der Anwendung.
# cd DEIN_PFAD/sqlcl/bin # sql /nolog > connect schema/Passwort@DBNAME_high begin apex_application_install.set_workspace(“DEIN_WORKSPACENAME”); apex_application_install.set_application_id(X); apex_application_install.generate_offset; apex_application_install.set_schema( 'SCHEMA_DER_ANWENDUNG' ); apex_application_install.set_application_alias( 'ANWENDUNGS_ALIAS' ); end; / @f100.sql > exit
Dein Connect String muss natürlich an deine Datenbank und dein Schema angepasst werden. Zudem siehst du in der letzten Zeile dass das File f100.sql geöffnet wird. Dies kann bei dir durchaus anders sein. Diese Information findest du dort wo deine Anwendungen exportiert worden sind. Öffne einfach die Anwendungen im Texteditor und schaue dir dort (recht weit oben) die einzelnen Details der Anwendung an. Dann kann du die einzelnen Parameter in meinem Code anpassen.
Deine Anwendung ist nun in der Cloud importiert.
Als letzter Schritt ist einmalig noch folgendes zu tun:
Melde dich als Superuser ADMIN in der APEX in der Autonomouus Datenbank an. Ordne die neu importierten Schemas deinem Workspace zu.
Navigiere zu "Manage Workspace > Manage Workspace to Schema Assignments > Auf Anwendung klicken und Schema zuordnen".
Dann melde dich als normaler User in deinem Workspace an und ordne die Anwendungen den richtigen Schemas zu.
Auf die Anwendung klicken -> Shared Components -> Security Attributes.
Jetzt sind wir fertig! Die User können nun auf die Anwendung zugreifen.
Ich danke ihnen für das Mitlesen und wünsche viel Erfolg mit euren APEX Anwendungen !!
Zurück zur Community-Seite