创建更新物化视图的Job

创建更新物化视图的Job:


 begin

  IF OracleObjectMM.f_CheckVMViewExists('vm_dj_plan') = 1 then
  execute immediate  'drop MATERIALIZED view vm_dj_plan'; 
  end if;
  
  execute immediate  ' CREATE MATERIALIZED VIEW VM_DJ_Plan 
       REFRESH COMPLETE 
       START WITH SYSDATE  
       NEXT  SYSDATE + 1/24
       WITH PRIMARY KEY 
   as
   select * From v_dj_planresult where Active_YN = ''1''';
--建了索引变慢。
 execute immediate  'create Index I_VM_DJPLanID On VM_DJ_PLAN(DJ_plan_ID)';
end;
 

/

begin
IF OracleObjectMM.f_CheckVMViewExists('vm_dj_plan') = 1 then
execute immediate 'drop MATERIALIZED view vm_dj_plan'; 
end if;
execute immediate ' CREATE MATERIALIZED VIEW VM_DJ_Plan 
       REFRESH COMPLETE 
       START WITH SYSDATE  
       NEXT  SYSDATE + 1/24
       WITH PRIMARY KEY 
   as
   select * From v_dj_planresult where Active_YN = ''1''';
--建了索引变慢。
 execute immediate 'create Index I_VM_DJPLanID On VM_DJ_PLAN(DJ_plan_ID)';
end;
 
/

--漏检的
-- 每10分钟更新一次
--漏检专用点检计划物化视图
begin
IF OracleObjectMM.f_CheckVMViewExists('vm_dj_planUncheck') = 1 then
execute immediate 'drop MATERIALIZED view vm_dj_planUncheck'; 
end if;
execute immediate ' CREATE MATERIALIZED VIEW vm_dj_planUncheck 
       REFRESH COMPLETE 
       START WITH SYSDATE  
       NEXT  SYSDATE + 1/24
       WITH PRIMARY KEY 
   as
   select * From DJ_plan where Active_YN = ''1''
 and Absence_Yn = ''1''';
--建了索引变慢。
 --execute immediate 'create Index I_vm_dj_planUncheckDJPLanID On vm_dj_planUncheck(DJ_plan_ID)';
end;
 
/

<think> 我们正在讨论大梦数据库(DM)中创建物化视图(Materialized View)的方法。 根据之前上下文,用户希望将分省模式中的表数据汇总到物化视图中,用于统计看板。 大梦数据库支持物化视图创建语法与Oracle相似。 创建物化视图的基本语法: ```sql CREATE MATERIALIZED VIEW [schema.]mv_name [WITH [ROWID | PRIMARY KEY]] -- 指定如何刷新物化视图,默认PRIMARY KEY [REFRESH [FAST | COMPLETE | FORCE] [ON DEMAND | COMMIT] [START WITH date] [NEXT date]] [ENABLE QUERY REWRITE] -- 是否启用查询重写 AS SELECT ...; -- 定义物化视图的查询语句 ``` 针对用户场景(多省份模式相同表汇总),创建物化视图示例: ```sql -- 创建一个集中存储所有省份销售数据的物化视图,每天凌晨1点全量刷新 CREATE MATERIALIZED VIEW DASHBOARD_SALES_MV REFRESH COMPLETE -- 全量刷新 ON DEMAND -- 按需刷新(这里使用定时任务触发) START WITH SYSDATE NEXT SYSDATE + 1 -- 每天刷新一次 AS -- 使用UNION ALL合并所有省份数据,并添加省份标识 SELECT '北京' AS province, order_id, amount FROM BEIJING_SCHEMA.SALES_TABLE UNION ALL SELECT '上海' AS province, order_id, amount FROM SHANGHAI_SCHEMA.SALES_TABLE UNION ALL ... ; -- 其他省份 ``` 重要参数说明: 1. **刷新方式**: - `FAST`:快速刷新(增量),需要物化视图日志支持 - `COMPLETE`:全量刷新(重建整个视图) - `FORCE`:默认方式,尝试快速刷新,失败则全量刷新 2. **刷新时机**: - `ON COMMIT`:基表数据提交时刷新(实时性高,但影响事务性能) - `ON DEMAND`:手动或定时任务刷新(推荐用于看板场景) 针对跨省数据汇总的优化建议: 1. **增量刷新配置**(需满足条件): - 在各分省模式的基表上创建物化视图日志 - 物化视图查询必须满足快速刷新的限制(如不能有聚合、连接等复杂操作) ```sql -- 在基表上创建物化视图日志(以北京模式为例) CREATE MATERIALIZED VIEW LOG ON BEIJING_SCHEMA.SALES_TABLE WITH PRIMARY KEY; -- 包含主键列 ``` - 创建支持增量刷新的物化视图: ```sql CREATE MATERIALIZED VIEW DASHBOARD_SALES_MV REFRESH FAST -- 快速刷新 ON DEMAND AS ... -- 与上面相同的UNION ALL查询 ``` 2. **分区表支持**: 若物化视图数据量巨大,可对其分区(按省或时间): ```sql CREATE MATERIALIZED VIEW DASHBOARD_SALES_MV ... PARTITION BY LIST (province) ( PARTITION p_beijing VALUES ('北京'), PARTITION p_shanghai VALUES ('上海'), ... ); ``` 3. **定时刷新配置**: 使用 DBMS_JOB创建定时任务(示例为每天1点刷新): ```sql DECLARE job_id NUMBER; BEGIN DBMS_JOB.SUBMIT( job => job_id, what => 'DBMS_MVIEW.REFRESH(''DASHBOARD_SALES_MV'', ''C'');', -- 'C'表示COMPLETE刷新 next_date => SYSDATE, interval => 'TRUNC(SYSDATE+1)+1/24' ); COMMIT; END; ``` 注意事项: - 物化视图会占用存储空间,需评估磁盘容量 - 跨模式访问需确保当前用户有`SELECT`权限 - 快速刷新对查询语句有严格限制(参考官方文档) --- ### 性能对比 | 刷新方式 | 实时性 | 基表事务影响 | 刷新速度 | |------------|--------|--------------|----------| | ON COMMIT | 秒级 | 高 | 快 | | FAST (定时)| 分钟级 | 低 | 快 | | COMPLETE | 小时级 | 低 | 慢 | > **推荐策略**:对省份基表建立物化视图日志,使用`REFRESH FAST ON DEMAND`并结合定时任务(如每10分钟刷新),平衡实时性与性能[^1]。 --- §§相关问题§§ 1. 如何监控大梦物化视图的刷新状态? 2. 物化视图日志的工作原理是什么? 3. 快速刷新失败的可能原因有哪些? 4. 如何优化跨省物化视图的查询性能? [^1]: 参照大梦数据库最佳实践:物化视图配置策略与定时任务管理手册。 </think> 在大梦数据库(DM)中创建物化视图(Materialized View)可通过SQL语句实现,以下是详细步骤和场景化示例: --- ### **创建物化视图基本语法** ```sql CREATE MATERIALIZED VIEW [模式名.]视图名 [REFRESH [FAST | COMPLETE | FORCE] [ON DEMAND | ON COMMIT]] -- 刷新策略 [START WITH 起始时间] [NEXT 间隔时间] -- 刷新计划 AS SELECT ... -- 查询语句 ``` ### **跨省数据汇总物化视图示例** 假设存在多个分省模式(`sh_beijing`、`sh_shanghai`等),每个模式中都有相同的销售表`sales_data`: ```sql -- 创建每日自动刷新的物化视图 CREATE MATERIALIZED VIEW dashboard.sales_summary_mv REFRESH COMPLETE -- 全量刷新方式 ON DEMAND -- 按需刷新(配合定时任务) START WITH SYSDATE NEXT SYSDATE + 1 -- 每天刷新一次 AS SELECT '北京' AS province, SUM(order_amount) AS total_sales FROM sh_beijing.sales_data UNION ALL SELECT '上海' AS province, SUM(order_amount) FROM sh_shanghai.sales_data -- 可继续添加其他省份... ``` --- ### **关键配置说明** 1. **刷新策略** - `REFRESH FAST`:增量刷新(需预先创建物化视图日志) - `REFRESH COMPLETE`:全量重建(适合低频更新) - `REFRESH FORCE`:自动选择增量/全量(默认) - `ON COMMIT`:基表提交时实时刷新(影响事务性能)[^1] - `ON DEMAND`:手动/定时触发(推荐) 2. **物化视图日志配置(增量刷新必需)** ```sql -- 在基表上创建日志(以北京为例) CREATE MATERIALIZED VIEW LOG ON sh_beijing.sales_data WITH PRIMARY KEY, ROWID; -- 记录变更 ``` 3. **手动刷新命令** ```sql DBMS_MVIEW.REFRESH('dashboard.sales_summary_mv', 'C'); -- 'C'表示全量刷新 ``` --- ### **性能优化建议** 1. **增量刷新加速** 若需频繁更新(如每小时),改用增量模式: ```sql ALTER MATERIALIZED VIEW sales_summary_mv REFRESH FAST ON DEMAND; -- 切换到增量模式 ``` 2. **分区存储优化** 按省份分区提升查询性能: ```sql CREATE MATERIALIZED VIEW sales_summary_mv ... PARTITION BY LIST (province) ( PARTITION p_beijing VALUES ('北京'), PARTITION p_shanghai VALUES ('上海') ); ``` 3. **查询重写启用** 自动优化SQL查询路径: ```sql ALTER MATERIALIZED VIEW sales_summary_mv ENABLE QUERY REWRITE; -- 查询自动路由到物化视图 ``` --- ### **场景验证** 查询物化视图获取看板数据: ```sql SELECT province, total_sales FROM dashboard.sales_summary_mv ORDER BY total_sales DESC; ``` 输出示例: | PROVINCE | TOTAL_SALES | |----------|-------------| | 上海 | 5,820,000 | | 北京 | 4,350,000 | --- ### **注意事项** 1. 需要基表的`SELECT`权限和物化视图的`CREATE`权限 2. 增量刷新要求基表包含主键 3. 跨模式访问需授权:`GRANT SELECT ON sh_beijing.sales_data TO dashboard_user;` 4. 存储空间占用:物化视图独立占用存储空间 > **实时性权衡**: > - 高频刷新(`ON COMMIT`)适合实时看板,但增加基表事务负载 > - 定时刷新(`ON DEMAND`)适合T+1报表,减少性能冲击[^1]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值