【发布时间】:2017-04-12 10:20:43
【问题描述】:
我正在尝试创建每 5 分钟自动更新一次的物化视图,我需要根据 Mview 日志表进行更新。
我在 TABLE1 TABLE1.SQL Script 上创建了物化视图日志
CREATE MATERIALIZED VIEW LOG ON TABLE1; -- MLOG$_TABLE1
然后我创建了物化视图
CREATE MATERIALIZED VIEW JIBO_MVIEW
REFRESH START WITH SYSDATE NEXT SYSDATE +5/24/60
ENABLE QUERY REWRITE AS
SELECT O.ID
,O.DATETIME_CREATED
,O.ORIGINATOR
,O.DETAILS
,O.PAYMENT_REF
FROM TABLE1 O
WHERE O.ORIGINATOR LIKE '53%';
在TABLE1中改变一些值后,插入新的记录MLOG$_TABLE1日志表
但更改的值不会在实体化视图 (JIBO_MVIEW) 中更新。 (即使在一天之后:))
当我在警报日志中检查时,自动生成的 DBMS_JOB 存在问题,每次执行都会失败。
- ORA-12012: error on auto execute of job 4263
- ORA-00942: table or view does not exist
- ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2809
- ORA-06512: at "SYS.DBMS_SNAPSHOT", line 3025
- ORA-06512: at "SYS.DBMS_IREFRESH", line 689
- ORA-06512: at "SYS.DBMS_REFRESH", line 195 -
- ORA-06512: at line 1
但如果我手动执行作业,它就可以正常工作。这是代码示例
BEGIN DBMS_REFRESH.REFRESH('"JIBO"."JIBO_MVIEW"');
COMMIT;
END;
然后我向用户添加了新的授权
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, CREATE MATERIALIZED VIEW TO JIBO;
GRANT CREATE ANY TABLE TO JIBO WITH ADMIN OPTION;
GRANT UNLIMITED TABLESPACE TO JIBO;
GRANT SELECT ON SCHEMA1.MLOG$_TABLE1 TO JIBO WITH GRANT OPTION;
GRANT ALL ON SCHEMA1.TABLE1 TO JIBO WITH GRANT OPTION;
现在我在作业自动执行时收到此错误
- ORA-12012: error on auto execute of job 4287
- ORA-01031: insufficient privileges
- ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2809
- ORA-06512: at "SYS.DBMS_SNAPSHOT", line 3025
- ORA-06512: at "SYS.DBMS_IREFRESH", line 689
- ORA-06512: at "SYS.DBMS_REFRESH", line 195
- ORA-06512: at line 1
请指导我解决这个问题。 这个问题是由于错误地创建了物化视图,还是由于 oracle 中的某些参数应该打开?
【问题讨论】:
-
起初网站一切正常,可能更改的记录不符合
WHERE O.ORIGINATOR LIKE '53%'条件。 -
我在实体化视图 (JIBO_MVIEW) 中有记录,但在更改源表 (TABLE1) 中的值后该记录没有变化。
-
您现在看到 MLOG$_TABLE1 中的记录了吗?
-
你的例子对我有用。但是我必须填写一些关于原始表和值的详细信息。它可能有助于创建一个完全可重现的测试用例,这样我们就可以完全重新创建所有细节。此外,当您尝试使用以下代码手动刷新作业时会发生什么:
begin dbms_refresh.refresh(user||'."JIBO_MVIEW"'); end; /? -
缺少用于创建 TABLE1 的脚本
标签: sql oracle view replication materialized