Zu einem guten APEX-Projekt gehört auch ein gutes Backup-Konzept. Sie möchten ja keine Ihrer wichtigen Projektänderungen verlieren oder?
Schön wäre es, wenn dies auch noch automatisch erfolgen würde, also legen wir gleich mal los:
Voraussetzungen:
1. Sie haben ein Oracle Directory angelegt (wir nehmen hier mal das Directory DATA_PUMP_DIR, das ist meistens schon vorhanden)
Sonst legen Sie ein neues Directory an mittels:
CREATE DIRECTORY apex_backup_dir AS 'C:\oracle\apex'; -- für Windows
CREATE DIRECTORY apex_backup_dir AS '/u01/oracle/apex'; -- für UNIX/LINUX
2. Der Benutzer, der den Export durchführt, hat mindestens Schreibrechte auf dem Directory. Sonst vergeben Sie ihm die Rechte bitte durch:
GRANT WRITE ON DIRECTORY data_pump_dir TO SCOTT;
Nun zu einigen Beispielen von APEX Applikationsbackups.
Beispiel 1: Sicherung aller Apps mit ID<3000, die sich in den letzten 24 Stunden geändert haben
DECLARE
-- In welches Directory sollen die Exports erfolgen?
v_dir VARCHAR2(255):=upper('DATA_PUMP_DIR');
-- Wenn eine Applikation in den letzten 24 Stunden geändert worden ist
-- wird ein neues Backup erzeugt
v_stunden NUMBER:=24;
BEGIN
FOR r IN (select application_id,last_updated_on
from apex_applications
WHERE APPLICATION_ID<3000) LOOP
IF r.last_updated_on>sysdate-(v_stunden/24) THEN
-- Apex App in Clob wandeln und als Datei in Directory legen
DBMS_XSLPROCESSOR.CLOB2FILE (
wwv_flow_utilities.export_application_to_clob(p_application_id=>r.application_id), v_dir,
'APEX_'||r.application_id||'_'||to_char(sysdate,'DDMMYYYY_HH24MISS')||'.sql');
END IF;
END LOOP;
END;
/
Hinweis: ab Version 19c kann statt dem Package DBMS_XSLPROCESSOR.CLOB2FILE auch DBMS_LOB.CLOB2FILE verwendet werden
Weitere interessante Parameter des Packages wwv_flow_utilities.export_application_to_clob:
p_export_ir_public_reports default 'N'
p_export_ir_private_reports default 'N'
p_export_ir_notifications default 'N'
p_export_translations default 'N'
p_export_pkg_app_mapping default 'N'
p_with_original_ids default false
p_exclude_subscriptions default false
Beispiel 2: Einzelne APEX Seite exportieren:
DECLARE
v_page_id INT:=1; -- Seite 1
v_app_id INT:=100; -- Applikation ID 100
BEGIN
DBMS_XSLPROCESSOR.CLOB2FILE (
wwv_flow_utilities.export_page_to_clob(v_app_id,v_page_id), 'DATA_PUMP_DIR', 'apex_f'||v_app_id||'_p'||v_page_id||'.sql');
END;
/
Hinweis: ab Version 19c kann statt dem Package DBMS_XSLPROCESSOR.CLOB2FILE auch DBMS_LOB.CLOB2FILE verwendet werden
Beispiel 3: Alle Seiten exportieren, die sich in den letzten 24 Stunden geändert haben:
DECLARE
v_dir VARCHAR2(255):=upper('DATA_PUMP_DIR');
BEGIN
FOR r IN (SELECT a.application_id,ap.page_id
FROM apex_application_pages ap,apex_applications a
WHERE ap.application_id=a.application_id
AND ap.last_updated_on>sysdate-interval '24' hour
AND a.application_id<3000
AND a.owner=user) LOOP
DBMS_XSLPROCESSOR.CLOB2FILE (
cl=>wwv_flow_utilities.export_page_to_clob(
r.application_id,r.page_id),
FLOCATION=>v_dir,
FNAME=>'APEX_'||r.application_id||'_'||r.page_id||'_'||
to_char(sysdate,'DDMMYYYY_HH24MISS')||'.sql');
END LOOP;
END;
/
Hinweis: ab Version 19c kann statt dem Package DBMS_XSLPROCESSOR.CLOB2FILE auch DBMS_LOB.CLOB2FILE verwendet werden
Beispiel 4: Workspace Export (Achtung, der exportiert keine APEX Apps)
BEGIN
FOR r IN (SELECT distinct workspace_id w_id FROM apex_applications) LOOP
wwv_flow_api.set_security_group_id(r.w_id);
-- set the apex_application.g_user global variable...
-- the username you use as argument needs admin privileges in the workspace
-- apex_custom_auth.set_user('admin');
DBMS_XSLPROCESSOR.CLOB2FILE (
cl => wwv_flow_utilities.export_workspace_to_clob(
p_workspace_id => r.w_id,
p_include_team_development => TRUE),
FLOCATION =>upper('DATA_PUMP_DIR'),
FNAME => 'APEX_WORKSPACE_'||to_char(sysdate,'DDMMYYYY_HH24MISS')||'.sql');
END LOOP;
END;
/
Hinweis: ab Version 19c kann statt dem Package DBMS_XSLPROCESSOR.CLOB2FILE auch DBMS_LOB.CLOB2FILE verwendet werden
Beispiel 5: Workspace Dateien exportieren:
BEGIN
FOR r IN (
SELECT distinct workspace_id w_id
FROM apex_applications
where application_id=100) LOOP
DBMS_XSLPROCESSOR.CLOB2FILE (
cl=>wwv_flow_utilities.export_files_to_clob (r.w_id),
FLOCATION=>upper('DATA_PUMP_DIR'),
FNAME=>'APEX_WORKSPACE_'||to_char(sysdate,'DDMMYYYY_HH24MISS')||'.sql');
END LOOP;
END;
/
Hinweis: ab Version 19c kann statt dem Package DBMS_XSLPROCESSOR.CLOB2FILE auch DBMS_LOB.CLOB2FILE verwendet werden
Für weitere Tipps & Tricks besuchen Sie doch einen unserer APEX Kurse (APEX I, APEX II, APEX Security, APEX für Admins oder Neuerungen in 19.x/20x) .