oracle - 物化视图没有刷新
问题描述
在 MV 下创建,但即使在定义刷新间隔后也没有更新,同时在基表上创建 MV
Create Materialized view sim_job
refresh complete start with (sysdate) next (sysdate+1/1440) with rowid as
SELECT TIMESTAMP,
SUM(fs_count) AS fs_count
FROM
(SELECT TO_CHAR(TRUNC(A.TIMESTAMP), 'MM/DD/YY') AS TIMESTAMP,
COUNT(UNIQUE A.JID) AS FS_COUNT
FROM LAS_ACT_PROD A,
LAS_LOGIN B
WHERE A.ID IN ('LAS020')
AND B.ROLE IN ('TS_SW_TCH','TS_SE_TCH','TS_W_TCH','TS_W_TCH')
AND TRUNC(A.TIMESTAMP) = TRUNC(SYSDATE-1)
AND A.ID =B.ID
AND TRUNC(B.LOGINTIME) = TRUNC(SYSDATE-1)
GROUP BY B.ROLE,
TO_CHAR(TRUNC(A.TIMESTAMP), 'MM/DD/YY')
)
GROUP BY TIMESTAMP
解决方案
您的语法似乎值得怀疑:TIMESTAMP
是数据类型而不是列值。
子句中的表FROM
丢失。
无论如何,这有效:
create table tab as
select rownum fs_count
from dual
connect by level <= 10;
Create Materialized view sim_job
refresh complete start with (sysdate) next (sysdate+1/1440) with rowid as
SELECT CURRENT_TIMESTAMP TS,
SUM(fs_count) AS fs_count
FROM tab;
最后刷新日期可以用
select LAST_REFRESH_DATE from user_mviews where MVIEW_NAME = 'SIM_JOB';
LAST_REFRESH_DATE
-------------------
10.08.2021 20:07:50
如果您在一分钟后重复它,您应该会看到新的刷新
LAST_REFRESH_DATE
-------------------
10.08.2021 20:08:50
如果没有,请检查是否依赖于您的 Oracle 版本,USER_JOBS
或者USER_SCHEDULER_JOBS
刷新 MV 的作业是否正在运行(即没有损坏)。
对于 Oracle 11,您将获得job
ID
select owner, name, rname, REFGROUP, job, interval, to_char(next_date,'MM/DD/YYYY HH24:MI:SS') next_date
from DBA_REFRESH_CHILDREN ;
比
select * from USER_JOBS where JOB = '<job>';
另请注意,您必须将 设置为job_queue_processes
非零值才能运行作业。
select value from v$parameter where name = 'job_queue_processes';
推荐阅读
- python - 在打印语句中将字符串作为参数传递
- mongodb - 在 MONGO 返回中删除 _id
- r - 在一个函数中设置几个条件
- sql - 将表中的值添加到另一个与文本框中的值相结合
- javascript - 如何在代码中使用preventdefault of jquery来防止key重复?
- java - RestTemplate 访问响应中的元素
- java - 如何使用正则表达式特定字符串拆分字符串
- python - 使用 nidaqmx-python 将模拟电压连续输出到 NI DAQ 模块
- java - Easymock.expect 抛出 IllegalStateException
- selenium - 我正在尝试为每个失败捕获屏幕截图,但 File.Utils 或 File.Handler 显示代码错误