利用 Oracle APEX 自动化实现应用备份方案
APEX AutomationObject StorageOracle APEXPL/SQL数据库运维自动化备份
原文地址: 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 生产系统**,这套自动化方案**必不可少**。