原文地址: https://oracle-apex-shared-components.hashnode.dev/automated-oracle-apex-backup-and-upload-to-object-storage # 利用 Oracle APEX 自动化实现 APEX 应用备份 作为 Oracle APEX 开发者,我们都知道**定期备份**的重要性。手动导出应用既耗时又有风险。因此我决定使用**Oracle APEX Automation**、**PL/SQL** 和 **Oracle Object Storage** 来自动化整个备份流程。 ## 问题陈述 在大多数项目中: - APEX 应用导出是手动完成的 - 可能会遗漏备份 - 没有历史备份的集中存储 **目标**: ✅ 自动导出 APEX 应用 ✅ 将导出文件打包为 ZIP ✅ 上传到 Oracle Object Storage ✅ 使用 APEX Automation 定时执行 ## 解决方案概述 我们使用: - **Oracle APEX Automation** - 用于调度任务 - **APEX_EXPORT** - 导出应用 - **APEX_ZIP** - 创建 ZIP 文件 - **DBMS_CLOUD.PUT_OBJECT** - 上传备份到 Object Storage 📌 整个过程**无需人工干预**。 ## 架构流程 1. APEX Automation 按调度(每日/每周)触发 2. PL/SQL 代码: - 设置工作区上下文 - 导出 APEX 应用 - 创建 ZIP 文件 3. 将 ZIP 文件上传到 Oracle Object Storage 4. 备份文件带时间戳安全存储 ## 使用的 PL/SQL 代码 以下是 **APEX Automation** 中使用的 PL/SQL 代码块: ```sql DECLARE v_workspace VARCHAR2(255) := 'YOUR WORKSPACE NAME'; v_blob BLOB; v_files apex_t_export_files; v_filename VARCHAR2(255); v_mimetype VARCHAR2(255) := 'application/zip'; v_workspace_id NUMBER; BEGIN -- Set workspace security context v_workspace_id := apex_util.find_security_group_id(p_workspace => v_workspace); apex_util.set_security_group_id(p_security_group_id => v_workspace_id); -- Initialize ZIP file sys.dbms_lob.createtemporary(v_blob, TRUE); -- Export application from workspace FOR r IN ( SELECT application_id, workspace_display_name FROM apex_applications WHERE UPPER(workspace) = UPPER(v_workspace) AND application_id = 200 ) LOOP v_filename := 'APPLICATION_BACKUP'; v_files := apex_export.get_application( p_application_id => r.application_id ); apex_zip.add_file( p_zipped_blob => v_blob, p_file_name => 'f' || r.application_id || '.sql', p_content => apex_util.clob_to_blob(v_files(1).contents) ); END LOOP; -- Finalize ZIP apex_zip.finish(v_blob); -- Upload to Object Storage DBMS_CLOUD.PUT_OBJECT( credential_name => 'YOUR_CREDENTIAL_NAME', object_uri => 'https://YOUR_OBJECT_STORAGE_URL/' || v_filename || '_' || TO_CHAR(SYSDATE,'YYYYMMDD_HH24MISS') || '.zip', contents => v_blob ); END; ``` ## 代码功能简述 ### 1️⃣ 设置工作区上下文 使用 `apex_util.set_security_group_id` 确保导出在正确的 APEX 工作区运行。 ### 2️⃣ 导出 APEX 应用 使用 `apex_export.get_application` 将 APEX 应用导出为 SQL 文件。 ### 3️⃣ 创建 ZIP 文件 使用 `apex_zip.add_file` 和 `apex_zip.finish` 将所有导出文件添加到 ZIP 归档。 ### 4️⃣ 上传到 Object Storage 使用 `DBMS_CLOUD.PUT_OBJECT` 将 ZIP 文件带上时间戳上传到 Oracle Object Storage。 📌 示例文件名: APPLICATION_BACKUP_20260113_230500.zip ## 使用 APEX Automation 自动化 准备好 PL/SQL 后: 1. 进入 **App Builder → Shared Components** 2. 创建 **Automation** 3. 粘贴 PL/SQL 代码 4. 设置调度: - 每日 - 每周 - 或根据业务需求 这样你的备份就会自动运行了 🎉 ## ✅ 此方法的优势 ✔ 全自动备份 ✔ 安全存储在 Oracle 云 ✔ 无需手动操作 ✔ 需要时容易恢复 ✔ 适用于生产和非生产环境 ## 最佳实践 - 为生产和非生产环境使用 **分开的 Object Storage bucket** - 用 **最小权限** 限制凭证 - 使用生命周期规则保留备份 - 在自动化失败时启用邮件通知 ## 结论 只需少量 PL/SQL 和 APEX Automation,你就可以为 Oracle APEX 应用构建**强健的备份方案**。 此方法: - 节省时间 - 提高可靠性 - 遵循云最佳实践 如果你正在使用 **APEX 生产系统**,这套自动化方案**必不可少**。