【问题标题】:ORA-24550: signal received: [si_signo=6] errorORA-24550: 收到信号: [si_signo=6] 错误
【发布时间】:2014-05-22 05:10:13
【问题描述】:

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

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

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

【问题讨论】:

    标签: oracle signals


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这表明您的 Oracle 客户端收到了它没有预料到的信号。 Oracle docs 说:

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

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

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

      默认情况下,Oracle 注册自己的信号处理程序,但 you can configure it to let signals propagate instead

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

      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。这通常意味着something is calling abort()

      【讨论】:

      • 这些错误的一个常见来源是尝试以多线程方式使用 Oracle 而不启用多线程。例如,在 Python 中,您应该使用 cx_Oracle.Connection("foo", threaded=True)
      【解决方案3】:

      我遇到了类似的错误,但我获得了 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
      

      然后我重新尝试启动我的应用程序,问题就消失了。 这个解决方案确实让我明白我必须为堆栈大小索引设置更高的值,请考虑增加该值但不要使用无限,因为这不是一个好习惯,它可能会关闭服务器或产生性能问题。

      【讨论】:

        【解决方案4】:

        在我的情况下,这是 TLS 版本不匹配的问题,但它仍然不应该重新启动 .exe 文件,所以我发现在 soap 中处理不正确导致 .exe 崩溃

        return soap_set_receiver_error(soap, soap_ssl_error(soap, r), "SSL/TLS 握手失败", SOAP_SSL_ERROR);

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多