功能索引的“并行信号”

时间:2016-12-23 07:56:59

标签: sql oracle oracle11g

我在oracle表中使用功能索引,同时运行合并查询 - 记录正在更新,但是为了插入记录,它显示以下错误:

ORA-00600: internal error code, arguments: [rwoirw: check ret val], 
           [], [], [], [], [], [], [], [], [], [], []
12801. 00000 -  "error signaled in parallel query server %s"
*Cause:    A parallel query server reached an exception condition.
*Action:   Check the following error message for the cause, and consult your error manual 
           for the appropriate action.
*Comment:  This error can be turned off with event 10397, in which case the server's 
           actual error is signaled instead.

使用的功能索引: (SUBSTR("BILL_PROD_SOT_ID",0,INSTR("BILL_PROD_SOT_ID",'_',-1‌​)-1))

经过分析,我发现这是由于我的查询中的/*+ PARALLEL (APP_PRODUCT_SERVICE,4) */哈希标记,因为我通过四个节点配置插入。

记录数太高,因此我无法避免/*+ PARALLEL (APP_PRODUCT_SERVICE,4) */

选择使用的查询太长。所以我刚才提到了简要说明:

MERGE /*+ APPEND */ INTO PRODUCT_SERVICE PS 
 USING ( 
    SELECT /*+ PARALLEL (APP_PRODUCT_SERVICE,4) */ BILL_PROD_SOT_ID, 
           INSTANCE_ID, ...
) ... 
 WHEN MATCHED THEN UPDATE 
  SET PS.BILL_SERV_SOT_ID = UPD.BILL_SERV_SOT_ID,
      PS.INSTANCE_TYPE = UPD.INSTANCE_TYPE,
      PS.CATALOG_PROD_ID = UPD.CATALOG_PROD_ID 
 WHEN NOT MATCHED THEN INSERT (INSTANCE_ID ,BILL_SERV_SOT_ID);

如果我删除了函数索引,它可以正常工作。

有人可以建议如何解决这个问题吗?

0 个答案:

没有答案