【发布时间】: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 来调查和解决。