2

我有一个物化视图设置为按需刷新:

CREATE MATERIALIZED VIEW XYZ
REFRESH COMPLETE ON DEMAND
AS
SELECT * FROM ABC WHERE LAST_UPD > SYSDATE-30;

当我运行刷新程序时,它每两天失败一次。

刷新命令:

dbms_mview.refresh(list           => 'XYZ',
                       method         => 'C',
                       parallelism    => 0,
                       atomic_refresh => false);

错误:

1 - 合并错误:ORA-12008:物化视图刷新路径中的错误 ORA-01555:快照太旧:回滚段编号 406,名称为“_SYSSMU406_3487494604$”太小 ORA-02063:IJSFASIEBEL 的前一行

我已经读过使用 select * 创建物化视图可能会导致此错误,但我已经删除了视图并重新创建了很多次,刷新在一天运行良好并在第二天出错。未对基表进行任何更改。

谁能告诉我错误消息的含义或可能导致问题的原因?

4

2 回答 2

0

问题是您的回滚段对于正在运行的查询来说不够大,因为数据库上同时发生了其他更新。

这里有一个关于这意味着什么的完整讨论:

https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:275215756923

可能的解决方案:-

  • 创建更大的回滚段以允许在刷新期间发生更多更改而不会耗尽回滚空间
  • 在 LAST_UPD 上创建索引以提高查询速度(如果确实如此)
  • 在一天中更安静的时间运行刷新
于 2014-09-10T02:36:18.453 回答
0

普拉蒂克·庞努鲁,

请检查表中是否有任何 LOB,检查 lob 损坏。如果 LOB 已损坏,则此错误过去常常出现....我最近遇到了同样的问题,我检查了表中所有 lob 的损坏情况,并在进一步调查后发现了一些损坏的 lob 段,后来我将其设置为 blob_null()。

-- 米林德羽衣甘蓝

于 2015-01-13T14:32:11.607 回答