让Oracle物化视图刷新

时间:2012-07-03 17:06:25

标签: oracle plsql materialized-views

我已将Java EE应用程序中的一个错误跟踪到Oracle数据库:有一个物化视图无法正确刷新。如果我对MV进行查询,它会给我外键,这些外键很糟糕,看起来很旧。

那么我该如何修复或替换这个物化视图呢?欢迎任何想法。

我尝试手动刷新,如下所示:

DBMS_MVIEW.REFRESH('PRODUCTDESCRIPTIONS', 'C');

我收到错误“ORA-00942:表或视图不存在”。我不明白这一点,因为当我手动运行MV的子查询时,它看起来很好。

Apex Web界面显示MV已超过一年未刷新,因此这不是一个新问题。

我查找了刷新过程中的任何日志记录,但找不到文件refresh.log。

我尝试用简单的查询替换实体化视图,但速度太慢了。我很乐意以某种方式重写/重新配置/重新安装MV。

数据库和操作系统版本:

Oracle Database 10g Express Edition Release 10.2.0.1.0 - Product
PL/SQL Release 10.2.0.1.0 - Production

uname -a:
Linux <server name> 2.6.9-78.0.22.ELsmp #1 SMP Thu Apr 30 19:14:39 EDT 2009 i686 i686 i386 GNU/Linux

物化视图的源代码:

CREATE MATERIALIZED VIEW  "PRODUCTDESCRIPTIONS"
  ORGANIZATION HEAP PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS" 
  BUILD IMMEDIATE
  USING INDEX 
  REFRESH COMPLETE ON DEMAND
  USING DEFAULT LOCAL ROLLBACK SEGMENT
  DISABLE QUERY REWRITE
  AS SELECT prdcts.primarykey AS product, 
prdcts.upcid AS productupcid, 
prdcts.description AS productdescription, 
prdctctgrs.primarykey AS productcategory, 
prdctctgrs.id AS productcategoryid, 
prdctctgrs.name AS productcategoryname, 
prdctpkgs.primarykey AS productpackage, 
prdctpkgs.name AS productpackagename FROM prdctctgrs, 
prdcts, 
prdctpkgs, 
prdctctgrstoprdcts, 
prdctstoprdctpkgs 
WHERE 
prdctctgrstoprdcts.productcategory = prdctctgrs.primarykey 
AND prdctctgrstoprdcts.product = prdcts.primarykey 
AND prdctstoprdctpkgs.product = prdcts.primarykey 
AND prdctstoprdctpkgs.productpackage = prdctpkgs.primarykey 
AND bitand(prdctctgrs.metaflags, 1)+0 = 0 
AND bitand(prdcts.metaflags, 1)+0 = 0 
AND bitand(prdctpkgs.metaflags, 1)+0 = 0 
AND bitand(prdctctgrstoprdcts.metaflags, 1)+0 = 0 
AND bitand(prdctstoprdctpkgs.metaflags, 1)+0 = 0
/

2 个答案:

答案 0 :(得分:1)

当您运行刷新过程时,您是否将其作为您选择的表的所有者执行?您所访问的所有表都是直接授予您的吗?如果通过角色授予您表,则刷新过程将无法看到它们。

答案 1 :(得分:0)

只是为了确认我对原始问题的评论:删除并重新创建MV修复了问题。