ORA-24550: signal received:這個問題的原因及解決辦法

來源:互聯網
上載者:User

今天寫了個多線程訪問資料庫的程式,一直啟動並執行好好的,突然就出現了下面的問題:

ORA-24550: signal received: [si_signo=11] [si_errno=0] [si_code=1] [si_int=0] [si_ptr=(nil)] [si_addr=0x1]
Killed

我寫了兩個線程,第一個訪問資料庫都成功,但當第二個線程執行到資料庫操作時,就突然出現了上面這麼個玩意。

印象中以前也遇到過,但現在忘瞭解決方法了。

想了會,怎麼會出現這情況,我又沒有改程式,只是加了幾行日誌。

於是從網上尋找答案。。。很多苦逼的同學和我一樣都在尋找協助,但都沒有大神給出準確的答案。

有一個版本的解決方案是這樣的(黃色部分):

ORA-24550:Signal Received Error的解決方案
有同事,用C++ SOCI開發對Oracle資料庫進行DML操作時,發生該錯誤。
在網上查一下資料,都是說在伺服器的sqlnet.ora檔案中加入如下內容。

DIAG_ADR_ENABLED=OFF
DIAG_SIGHANDLER_ENABLED=FALSE
DIAG_DDE_ENABLED=FALSE

但是實際上發現問題還是處理不了。但是把該檔案放到用戶端(應用程式根目錄),該問題就解決了。

 

但是直覺告訴我,我的這個問題肯定不是這個原因,如果是這個原因的話,那別的訪問資料庫的程式又可以跑的好好的。

於是繼續從網上尋找大神,還是無果。

 

最後只能靠自己了。

還好我用的那編輯工具可以有後援動作,先回到不加日誌的那個點,編譯運行,這個問題就沒有了。

所以斷定,這肯定和我打的那些日誌有關。於是一行日誌一行日誌檢查,終於找出了有問題的地方。

LOG((char *)"INFO","%s",m_index, "\n\n\n" );

這一行日誌打錯了,應該是: LOG((char *)"INFO","%d: %s",m_index, "\n\n\n" );

再刪除添加這行日誌試了下,果然是這個日誌導致了那個錯誤出現。

這個日誌的底層是sprintf 和一個變參函數。我在用由這些函數封裝的函數時,用錯了。但是編譯沒有報錯,運行時,沒運行到這個地方也沒有出錯。

 

總結一下,這樣的問題,看上去我們就會想到是oracle資料庫的錯誤資訊,但有時候不是,我這個就只是其他的語句的錯誤,估計是執行的時候記憶體方面問題

所以說,你們出現這個問題,不要盲目去只想是資料庫的操作問題。多看看自己的其他代碼是否有問題。

ORA-01172、ORA-01151錯誤處理

ORA-00600 [2662]錯誤解決

ORA-01078 和 LRM-00109 報錯解決方案

ORA-00471 處理方法筆記

ORA-00314,redolog 損壞,或丟失處理方法

ORA-00257 歸檔日誌過大導致無法儲存的解決辦法

相關文章

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.