更新时间:2025-10-22 GMT+08:00

U0100029: 目标数据库不支持 MaterializedViewRefreshClause

描述

GaussDB 不支持 MaterializedView 自动刷新。

数据库类型与版本

  • 源库类型与版本:UGO 支持的 Oracle 版本。
  • 目标库类型与版本:UGO 支持的 GaussDB 版本。

语法示例

Oracle脚本:

CREATE MATERIALIZED VIEW mv_hourly_sales
REFRESH FAST
START WITH SYSDATE NEXT SYSDATE + 1/24
AS
SELECT product_id, SUM(quantity) total_quantity, SUM(amount) total_amount
FROM sales
GROUP BY product_id;

改造建议

1、首先物化视图依赖的表存储模式必须是Astore;

2、注释掉 MATERIALIZED VIEW LOG

3、UGO转换配置项-物化视图中的REFRESH-选择注释物化视图中的REFRESH子句

4、然后创建一个PROCEDURE定时刷新物化视图

5、最后创建定时任务,定时任务包含两种方式:

方式1(推荐):DBE_SCHEDULER.CREATE_JOB

方式2:dbe_task.id_submit

GaussDB改写后的脚本:

---物化视图注释掉自动刷新 
CREATE MATERIALIZED VIEW mv_hourly_sales
/*REFRESH FAST
START WITH SYSDATE NEXT SYSDATE + 1/24*/ 
AS
SELECT product_id, SUM(quantity) total_quantity, SUM(amount) total_amount
FROM sales
GROUP BY product_id;
---创建一个PROCEDURE定时刷新物化视图
CREATE OR REPLACE PROCEDURE refresh_mv_hourly_sales
AS
BEGIN
    REFRESH MATERIALIZED VIEW mv_hourly_sales;
    RAISE NOTICE 'Materialized view mv_hourly_sales refreshed at %', now();
END;
/
--方法1:使用DBE_SCHEDULER.CREATE_JOB创建定时任务
BEGIN 
PERFORM DBE_SCHEDULER.CREATE_JOB('MY_JOB',
job_type=>'PLSQL_BLOCK', job_action=>
'BEGIN refresh_mv_hourly_sales; END;'
, number_of_arguments=>0,
start_date=>sysdate, 
repeat_interval=> 
 'FREQ=HOURLY; INTERVAL=1', 
end_date=>NULL,
job_class=>'DEFAULT_JOB_CLASS', 
enabled=>TRUE, 
auto_drop=>TRUE,comments=>
NULL
);
END; 
/
--方法2:使用dbe_task.id_submit创建定时任务
call dbe_task.id_submit(100,'call refresh_mv_hourly_sales(); ', sysdate, 'interval ''1 hour''');