删除Oracle中的记录时“没有更多要从套接字读取的数据”错误

时间:2013-10-04 09:30:20

标签: sql oracle sockets

我已经实现了基于功能的唯一索引。

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条活动记录。]

之后,如果我尝试从该表中删除一条记录,它会断开与服务器的连接并发出错误:“没有更多数据要从套接字中读取。提交失败。”

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

插入/更新/选择语句正常工作。

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

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

这是SQL Developer中显示的日志: enter image description here

这是监听器警报日志:(来自路径:/ 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

1 个答案:

答案 0 :(得分:2)

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

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

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

最终,这是您的DBA需要查看和处理的内容。作为开发人员,似乎没有什么可以做的。