oracle ORA-12805: 并行查询服务器意外死亡

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/12274596/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-19 01:05:35  来源:igfitidea点击:

ORA-12805:parallel query server died unexpectedly

oracleplsqlcursor

提问by Vivek

I have a PL/SQL script like this...

我有一个像这样的 PL/SQL 脚本...

DECLARE
      CURSOR curs_delete
      IS      
         SELECT cus_num
          FROM dob.cust_table GROUP BY cust_num HAVING COUNT(*)>1;                
      TYPE row_cust_num IS TABLE OF dob.cust_table.cust_num%TYPE;      
      col_cust_num row_cust_num;
   BEGIN
      OPEN curs_delete;
      LOOP
         FETCH curs_delete
         BULK COLLECT INTO col_cust_num LIMIT 10000;
         EXIT WHEN col_cust_num.EXISTS (1) = FALSE;
         FORALL i IN 1 .. col_cust_num.LAST
            DELETE FROM cust_table 
             WHERE cust_num = col_cust_num (i);
             COMMIT;
      END LOOP;
      CLOSE curs_delete;
END;

This query returns ORA-12805:parallel query server died unexpectedlyerror. I'm not sure why it is happening. The select query in cursor returned around 415 records when i got this error.

此查询返回ORA-12805:parallel query server died unexpectedly错误。我不确定为什么会这样。当我收到此错误时,游标中的选择查询返回了大约 415 条记录。

Anyone understand why this error comes up?

任何人都明白为什么会出现这个错误?

回答by APC

This is a problem for your DBA to resolve, as there are a large number of possible causes. Somebody needs to look in the Alert Log and check for trace files in the bdumpdirectory for diagnostic info.

这是您的 DBA 需要解决的问题,因为有很多可能的原因。有人需要查看警报日志并检查目录中的跟踪文件以bdump获取诊断信息。

In the meantime, if you have only 415 records to delete you should just use straight SQL:

同时,如果您只有 415 条记录要删除,您应该直接使用 SQL:

DELETE FROM cust_table
WHERE cust_num in (SELECT cus_num           
                   FROM dob.cust_table 
                   GROUP BY cust_num HAVING COUNT(*)>1);