【问题标题】:"No more data to read from socket" error while deleting record in Oracle在 Oracle 中删除记录时出现“没有更多数据可从套接字读取”错误
【发布时间】:2013-10-08 19:05:28
【问题描述】:

我已经实现了基于函数的唯一索引。

CREATE UNIQUE INDEX "UK_ACCOUNT_TYPE" ON "ACCOUNT" (
    CASE "ACTIVE"
      WHEN '1'
      THEN "FK_PARTNERID"
      ELSE NULL
    END,

    CASE "ACTIVE"
      WHEN '1'
      THEN "TYPE"
      ELSE NULL
    END
);

[注意:FK_PARTNERID 是外键。基本上我们只想为特定类型的用户(FK_PARTNERID)和特定类型的帐户(TYPE)保留 1 条记录。]

之后,如果我尝试从该表中删除一条记录,它会与服务器断开连接并给出这样的错误:“No more data to read from socket. Commit failed.”

我必须将客户端重新连接到服务器。 当我尝试从编码中删除记录时也会出现此问题。

Insert/Update/Select 语句正常工作。

如果我删除此索引,删除工作正常。

Oracle服务器版本为11g(11.2.0.3)

这是在 SQL Developer 中显示的日志:

这是侦听器警报日志:(来自路径:/opt/oracle/product/diag/tnslsnr/dev-vm/listener/alert)

<msg time='2013-10-04T14:43:04.079+00:00' org_id='oracle' comp_id='tnslsnr'
 type='UNKNOWN' level='16' host_id='dev-vm'
 host_addr='192.168.56.101'>
 <txt>04-OCT-2013 14:43:04 * service_update * ORCL * 0
 </txt>
</msg>
<msg time='2013-10-04T14:43:20.365+00:00' org_id='oracle' comp_id='tnslsnr'
 type='UNKNOWN' level='16' host_id='dev-vm'
 host_addr='192.168.56.101'>
 <txt>04-OCT-2013 14:43:20 * (CONNECT_DATA=(SID=orcl)(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=glassfish))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.101)(PORT=45602)) * establish * orcl * 0
 </txt>
</msg>
<msg time='2013-10-04T14:44:01.112+00:00' org_id='oracle' comp_id='tnslsnr'
 type='UNKNOWN' level='16' host_id='dev-vm'
 host_addr='192.168.56.101'>
 <txt>04-OCT-2013 14:44:01 * service_update * ORCL * 0
 </txt>
</msg>
<msg time='2013-10-04T14:44:04.115+00:00' org_id='oracle' comp_id='tnslsnr'
 type='UNKNOWN' level='16' host_id='dev-vm'
 host_addr='192.168.56.101'>
 <txt>04-OCT-2013 14:44:04 * service_update * ORCL * 0
 </txt>
</msg>
<msg time='2013-10-04T14:44:34.128+00:00' org_id='oracle' comp_id='tnslsnr'
 type='UNKNOWN' level='16' host_id='dev-vm'
 host_addr='192.168.56.101'>
 <txt>04-OCT-2013 14:44:34 * service_update * ORCL * 0
 </txt>
</msg>

警报日志:

Mon Oct 07 07:38:12 2013
Time drift detected. Please check VKTM trace file for more details.
Mon Oct 07 13:30:09 2013
Exception [type: SIGSEGV, Address not mapped to object] [ADDR:0x6] [PC:0x8A7767C, evakdustoopn()+76] [flags: 0x0, count: 1]
Errors in file /opt/oracle/product/diag/rdbms/orcl/ORCL/trace/ORCL_ora_12500.trc  (incident=104683):
ORA-07445: exception encountered: core dump [evakdustoopn()+76] [SIGSEGV] [ADDR:0x6] [PC:0x8A7767C] [Address not mapped to object] []
Incident details in: /opt/oracle/product/diag/rdbms/orcl/ORCL/incident/incdir_104683/ORCL_ora_12500_i104683.trc
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
Mon Oct 07 13:30:12 2013
Dumping diagnostic data in directory=[cdmp_20131007133012], requested by (instance=1, osid=12500), summary=[incident=104683].
Mon Oct 07 13:30:13 2013
Sweep [inc][104683]: completed
Sweep [inc2][104683]: completed

【问题讨论】:

  • 服务器的alert log有对应的错误吗?表上是否有触发器,尤其是在删除时?
  • 我认为 SQL Developer 日志没有向您展示任何有用的信息。我的意思是服务器端警报日志;如果您无权访问它,您可能必须让您的 DBA 进行检查。看起来会话在服务器端即将终止,因此任何诊断也必须来自服务器(包括数据库内部,但您的客户端不会知道的东西)。
  • 好的,我已经向 DBA 询问了日志。一旦我得到它,我会回来的。谢谢!
  • ORA-7445 [EVAKDUSTOOPN()+76] 正是错误 14398795 所指的内容。您的 DBA 需要查看这一点,并决定是否/如何修补。似乎没有解决方法。
  • 您需要登录 support.oracle.com 并搜索它。您需要一个客户支持标识符。希望您的 DBA 已经有权访问并能够查看错误并获得补丁,因此您可能没有太多意义 - 似乎这真的取决于您的 DBA 来调查和解决。

标签: sql oracle sockets


【解决方案1】:

ORA-03113 错误表示正在处理您的更新的服务器进程意外死亡。这可能有很多原因,服务器警报日志显示了后端进程在这种情况下得到的ORA-07445

搜索 Oracle 支持站点会发现一个错误 13649540,它似乎与您所看到的相符。我不允许在此处复制该站点的材料,因此您或您的 DBA,或具有访问权限和客户支持标识符的人需要进一步调查。

您也许可以为您的平台获取补丁,但似乎没有解决方法,所以我认为您无法在代码中修复此问题。向 Oracle 提出服务请求可能会导致一些选项未在其支持站点上发布。警报日志包含一些信息,可帮助您的 DBA 打包和报告事件。

最终,这是您的 DBA 需要查看和处理的事情。作为开发人员,您似乎无能为力。

【讨论】:

    猜你喜欢
    • 2012-03-07
    • 1970-01-01
    • 2011-12-11
    • 2015-05-12
    • 2017-06-17
    • 2012-09-18
    • 2018-01-07
    • 2012-07-16
    相关资源
    最近更新 更多