我想知道ORA-24550收到的信号:[si_signo = 6]是什么意思?
我知道这是一个oracle错误,并且oracle最新补丁可以解决这个问题.
触发此错误时,例如必须处理此信号的情况,或者当我的应用程序必须处理与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]
Run Code Online (Sandbox Code Playgroud)
而你也可能会看到一个追溯.
要进行调试,您需要找出产生此信号的内容.si_signo=6意味着你得到信号6.我们可以找出这个信号$ man 7 signal:
标准信号
Run Code Online (Sandbox Code Playgroud)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().
我遇到了类似的错误,但我获得了si_signo=11(根据之前的评论,内存引用无效),在我的情况下,我正在 Red Hat 6.5 上工作,而我的 Oracle DB 位于不同的服务器中,问题出在我的 Red 本地帽子服务器,这里出现错误:
ORA-24550: signal received: [si_signo=11] [si_errno=0] [si_code=1] [si_int=1147687784] [si_ptr=0x7f8f44685368] [si_addr=0x7f8f1c001000]
Run Code Online (Sandbox Code Playgroud)
就我而言,修复非常简单,我的堆栈大小有限,临时解决方案是将其更改为无限
$ ulimit -s unlimited
Run Code Online (Sandbox Code Playgroud)
然后我重新尝试启动我的应用程序,问题就消失了。事实上,这个解决方案让我明白我必须为堆栈大小索引设置一个更高的值,请考虑增加该值但不要使用无限制,因为这不是一个好的做法,它可能会导致服务器崩溃或产生性能问题。
小智 1
Oracle 设置了自己的信号处理程序,因此此错误可能是由于未处理的 sigabort 信号造成的。您可以禁用oracle信号处理来查明此错误是否是oracle提供的,或者完全是其他原因。要禁用,请在 sqlnet.ora 文件中设置 DIAG_SIGHANDLER_ENABLED=FALSE。我不认为原因是oracle本身。