ORA-01013:用户请求取消OracleInternal.ServiceObjects.OracleConnectionImpl上的当前操作

idfiyjo8  于 2023-04-20  发布在  Oracle
关注(0)|答案(1)|浏览(2130)

我遇到此错误-“ORA-01013:user requested cancel of current operation at OracleInternal.ServiceObjects.OracleConnectionImpl.”每次我尝试运行此查询时。我知道这个问题是因为查询的一部分需要太长时间才能响应。我尝试使用并行提示,但不起作用。我也没有修改数据库的超时限制的权限。有人能在查询级别解决这个问题吗?

SELECT A.CR_ACCOUNT, B.CR_ACCOUNT FROM 
FCUBS.FTTB_CONTRACT_MASTER A
Inner JOIN FCUBS.FTTB_CONTRACT_MASTER B
ON A.CR_ACCOUNT = B.DR_ACCOUNT
AND A.DR_ACCOUNT = B.CR_ACCOUNT
AND A.PAYMENT_DETAILS2 = B.CONTRACT_REF_NO;
nfg76nw0

nfg76nw01#

ORA-01013: user requested cancel of current operation“意味着您的客户端告诉Oracle中止当前调用。很可能您在客户端软件中配置了超时设置。这是在 * 您的客户端 * 上,而不是数据库上。也有可能DBA在过度运行后在会话上执行“ALTER SYSTEM CANCEL SQL“,但这种情况不太常见,因为它必须手动编写;这不是大多数Oracle数据库会做的事情。请查看您的客户端超时设置。
至于你的查询运行时,首先确保你没有一个多对多的连接来创建一个部分笛卡尔积。用这种方式测试你的连接 predicate :

SELECT CR_ACCOUNT, DR_ACCOUNT, PAYMENT_DETAILS2, COUNT(*) 
  FROM FCUBS.FTTB_CONTRACT_MASTER 
 GROUP BY CR_ACCOUNT, DR_ACCOUNT, PAYMENT_DETAILS2
HAVING COUNT(*) > 1

SELECT CR_ACCOUNT, DR_ACCOUNT, CONTRACT_REF_NO, COUNT(*) 
  FROM FCUBS.FTTB_CONTRACT_MASTER 
 GROUP BY CR_ACCOUNT, DR_ACCOUNT, CONTRACT_REF_NO
HAVING COUNT(*) > 1

如果你从这两个查询中都得到了行,你就有了一个多对多的连接。通过添加更多的连接列来解决这个问题,这样至少有一方使用了一组唯一的连接键。
最后,如果你没有多对多,它可能在不应该使用索引的时候使用了索引。你可以尝试以下提示:

SELECT /*+ FULL(a) FULL(b) USE_HASH(a b) PARALLEL(8) */ A.CR_ACCOUNT ...

相关问题