ORA-24550:收到信号:[si_signo = 6]错误

问题描述 投票:0回答:4

我想知道

ORA-24550: signal received: [si_signo=6]
是什么意思?

我知道这是一个oracle错误,也许oracle最新补丁可以解决这个问题。

当触发此错误时,例如必须处理此信号的场景,或者当我的应用程序必须处理与 oracle 相关的内容而应用程序未能执行此操作时是否会发生此错误。

oracle signals
4个回答
10
投票

这表明您的 Oracle 客户端收到了它不期望的信号。 Oracle 文档 说:

ORA-24550: 收到未处理的信号 #number。字符串

原因:严重错误:收到信号

处理:参考平台特定的信号代码,看看是否是应用程序代码导致了错误。否则,记录所有错误状态并通知 Oracle 支持服务。

默认情况下,Oracle 注册自己的信号处理程序,但是 您可以将其配置为让信号传播

您通常会看到这样的日志行:

ORA-24550: signal received: [si_signo=6] [si_errno=0] [si_code=1] [si_int=597680428] [si_ptr=0x239fe290] [si_addr=0x3f445c43c0]

您也可能会看到回溯。

要调试,您需要找出产生此信号的原因。

si_signo=6
表示您收到信号 6。我们可以通过
$ man 7 signal
找出这是哪个信号:

标准信号

Signal     Value     Action   Comment
-------------------------------------------------------------------------
SIGHUP        1       Term    Hangup detected on controlling terminal
                              or death of controlling process
SIGINT        2       Term    Interrupt from keyboard
SIGQUIT       3       Core    Quit from keyboard
SIGILL        4       Core    Illegal Instruction
SIGABRT       6       Core    Abort signal from abort(3)
SIGFPE        8       Core    Floating point exception
SIGKILL       9       Term    Kill signal
SIGSEGV      11       Core    Invalid memory reference
SIGPIPE      13       Term    Broken pipe: write to pipe with no readers
SIGALRM      14       Term    Timer signal from alarm(2)
SIGTERM      15       Term    Termination signal

我们可以看到您正在获得

SIGABRT
。这通常意味着 有东西正在呼叫
abort()


5
投票

我遇到了类似的错误,但我获得了 si_signo=11 (根据之前的评论,内存引用无效),在我的情况下,我正在 Red Hat 6.5 上工作,而我的 Oracle DB 位于不同的服务器中,问题是本地的到我的 Red Hat 服务器,这里出现错误:

ORA-24550: signal received: [si_signo=11] [si_errno=0] [si_code=1] [si_int=1147687784] [si_ptr=0x7f8f44685368] [si_addr=0x7f8f1c001000]

就我而言,修复非常简单,我的堆栈大小数量有限,临时解决方案是将其更改为无限

$ ulimit -s unlimited

然后我重新尝试启动我的应用程序,问题就消失了。 事实上,这个解决方案让我明白我必须为堆栈大小索引设置一个更高的值,请考虑增加该值但不要使用无限制,因为这不是一个好的做法,它可能会导致服务器崩溃或造成性能问题。


1
投票

Oracle 设置了自己的信号处理程序,因此此错误可能是由于未处理的 sigabort 信号造成的。 您可以禁用oracle信号处理来查明此错误是否是oracle提供的,或者完全是其他原因。要禁用,请在 sqlnet.ora 文件中设置 DIAG_SIGHANDLER_ENABLED=FALSE。我不认为是oracle本身的原因。


0
投票

就我而言,这是 TLS 版本不匹配的问题,但仍然不应该重新启动 .exe 文件,所以我发现肥皂中的处理不正确,导致 .exe 崩溃

返回soap_set_receiver_error(soap,soap_ssl_error(soap,r),“SSL / TLS握手失败”,SOAP_SSL_ERROR);

其中 r 未初始化,因此导致 .exe 文件崩溃

https 链接中的任何拼写错误都可能重新启动 .exe,这不是一件好事,因为我正在研究关键的事务处理系统。

© www.soinside.com 2019 - 2024. All rights reserved.