我在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);
如果我删除了函数索引,它可以正常工作。
有人可以建议如何解决这个问题吗?