Oracle物化视图刷新因ORA-01555而失败

时间:2014-09-10 02:28:48

标签: materialized-views ora-01555

我将物化视图设置为按需刷新:

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 *创建Materialized视图会导致此错误, 但是我已经放弃了视图并重新创建了很多次,刷新一天运行良好,第二天就错了。 没有对基表进行任何更改。

有人能告诉我错误信息的含义或可能导致问题的原因吗?

2 个答案:

答案 0 :(得分:0)

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

这里有一个完整的讨论:

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

可能的解决方案: -

  • 创建更大的回滚段以允许在刷新期间进行更多更改而不会耗尽回滚空间
  • 在LAST_UPD上创建索引以提高查询速度(如果确实如此)
  • 在更安静的时间运行刷新

答案 1 :(得分:0)

Pratheek Ponnuru,

请检查表格中是否有任何LOB,检查是否有腐败。 如果LOB被破坏,那么这个错误过去...... 我最近遇到过同样的问题,我检查了表中所有lobs的损坏情况 在进一步调查后发现了一些损坏的吊球段,后来我将其设置为blob_null()。

- Milind Kale