ORA-07445錯誤解決一例

來源:互聯網
上載者:User

ORA-07445錯誤解決一例

測試人員反映說在一台測試庫上跑SQL報錯了(具體的SQL這裡就不說了,總之是很複雜的一個SQL,有9百多行。),錯誤是:

ORA-03113: end-of-file on communication channel

一開始懷疑是不是SQL過於複雜,庫不堪重負掛掉了,我們的測試庫機器都不怎麼好,而且很多都是虛機,而且是一個物理機上跑十幾個虛機的那種。。。所以沒有理由不懷疑庫掛掉的可能性。

串連伺服器查看,資料庫跑的好好的,監聽也正常,沒報任何錯誤。好吧,接下來查看alert log,有錯誤了:

ORA-07445: exception encountered: core dump [kkqudhus()+756] [SIGSEGV] [Address not mapped to object] [0x000000068] [] []

7445的錯誤,原因也挺多的,壞塊、記憶體錯誤、還有Oracle本身的BUG。而且BUG的可能性很大。Oracle也提供了ORA-600/ORA-7445/ORA-700 Error Look-up Tool,這是個很好的工具,輸入第一個錯誤碼,系統就會幫你去尋找相關的文檔:

果不其然,錯誤是由Oracle的BUG(BUG:4664788)引起的,同時Oracle提供了兩種解決方案:

1、修該隱藏參數_optimizer_cbqt_no_size_restriction為false

2、應用相關補丁。

由於測試人員說有點急,而且也只是測試庫,所以這裡採用了第一種修改隱藏參數的方法。查看當前隱藏參數的資訊:

SQL> select x.ksppinm name,
y.ksppstvl value,
y.ksppstdf isdefault,
decode(bitand(y.ksppstvf, 7),
1,
\'MODIFIED\',
4,
\'SYSTEM_MOD\',
\'FALSE\') ismod,
decode(bitand(y.ksppstvf, 2), 2, \'TRUE\', \'FALSE\') isadj
from sys.x$ksppi x, sys.x$ksppcv y
where x.inst_id = userenv(\'Instance\')
and y.inst_id = userenv(\'Instance\')
and x.indx = y.indx
and x.ksppinm like \'%_optimizer_cbqt_no_size_restriction%\'
order by translate(x.ksppinm, \' _\', \' \');
NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
ISDEFAULT ISMOD      ISADJ
--------- ---------- -----
_optimizer_cbqt_no_size_restriction
TRUE
TRUE FALSE FALSE

修改隱藏參數:

SQL> alter system set \"_optimizer_cbqt_no_size_restriction\"=false scope=both;

System altered.

讓測試人員重新跑SQL,這次正常執行了。至此問題解決。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.