MVIEW引起ORA-04031

    有一个数据库报了ORA-04031错误, 等我们上去看时, 却是好的, 通过查询Statspack有关视图, 发现Shared Pool Free Memory在这之前是逐渐减少的, sql area部分占得很大. 可能的原因是, 当Oracle遇到这个错误后, 自动做了一次Flush Pool操作. 于是写了一段程序去跟踪SQL占用的内存, 发现有两个SQL语句很不正常, 版本数很多, 占用的内存也很大, 差不多占了一半的sql area.

ASQL> ora share

ADDRESS          CHILDS     BYTES
---------------- ------ ---------
0000040000A328F8   1026 215577124
000004000F7AB058   1026 215503530

    来看一下这两个SQL语句是什么?

ASQL> ora sql 0000040000A328F8

update sys.sumpartlog$ s set s.timestamp = :1, s.scn = :2
  where  rowid in  (select rowid from sumpartlog$ AS OF SNAPSHOT(:3) s1
     where s1.bo# = :4   and s1.timestamp >=
           to_date('4000-01-01:00:00:00','YYYY-MM-DD:HH24:MI:SS'))

ASQL> ora sql 000004000F7AB058

update sys.sumdelta$ s set s.timestamp = :1, s.scn = :2  
   where  rowid in  (select rowid from sys.sumdelta$ AS OF SNAPSHOT (:3) s1  
        where s1.tableobj# = :4   and s1.timestamp >=
            to_date('4000-01-01:00:00:00','YYYY-MM-DD:HH24:MI:SS'))

    很明显这不是我们系统中的SQL语句, 因具只好搜索Metalink了, 找到这两个表和实体化视图的On Commit刷新有关. 进一步查这些SQL语句不能共享的原因, 发现都是FLASHBACK CURSOR这一列为Y. 进一步搜索Metalink, 终于找到原因了, 是Bug 6010070. 现在还没有办法解决, Oracle明确没有说哪个版本已解决. 只要不用On Commit刷新就行了.

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • What's the capital of your country?
  • 贵国首都是哪儿?
  • I come from Japan.
  • 我来自日本.
  • I was born in China and brought up in the U.S.A.
  • 我出生在中国, 在美国长大.
  • My country has an area of 500,000 square kilometers.
  • 我国面积五十万平里.
  • The capital of my country id Beijing.
  • 我国首都是北京.