ORA-00600:[4080]错误的解决
今天查看一个数据库的ALTER日志时,看见里面有ORA-600错误,报错的前一行,是一个物化视图,打开对应的TRACE文件,看到如下的报错。
STACK TRACE:
Dump file /ora/app/oracle/admin/textdb/udump/textdb_ora_9641.trc
*** SESSION ID:(9.3332) 2000-08-16 15:00:21.962
*** 2008-03-25 15:00:21.962
ksedmp: internal or fatal error
ORA-00600: internal error code, arguments: [4080], [1], [131], [], [], [], [],
[]
Current SQL statement for this session:
SELECT oldest, youngest+1/86400 FROM sys.snap_loadertime$ WHERE tableobj# = :1
FOR UPDATE
—– Call Stack Trace —–
ksedmp kgeriv kgeasi ktuchg ktbchg2 kddchg kddlok kddlkr qerfuStart
selexe opiexe opiefn0 opiall0 opikpr opiodr rpidrus skgmstack rpidru
rpiswu2 kprball kkzlglstmp kkzlllu kkzflbsu kkzfrsh kkzfroc2 kkzfroc
ktcrcm ktdcmt k2lcom k2send xctctl xctcom opiexe opiall0 kpoal8 opiodr
ttcpip opitsk opiino opiodr opidrv sou2o main start
在Google上搜索了一下,好像说是个Bug,Metalink上面的描述是
Distributed transactions are not allowed to update
tables which have “ON COMMIT” snapshots / materialized
views on them. In Oracle9i and ORA-600 [4080] is
signalled at commit time. In Oracle8i the materialized
view is not updated and so becomes out of sync with
the master table.
Workaround:
Use ON DEMAND materialized views instead.
最后的解决方法就是把这个物化重建一个,把ON COMMIT方式改为ON DEMAND
-The End-