2

このような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;

このクエリはORA-12805:parallel query server died unexpectedlyエラーを返します。なぜそれが起こっているのかわかりません。このエラーが発生したとき、カーソル内の選択クエリは約 415 レコードを返しました。

このエラーが発生する理由を理解している人はいますか?

4

1 に答える 1

4

これは、考えられる原因が多数あるため、DBA が解決する問題です。診断情報については、誰かがアラート ログを調べて、bdumpディレクトリ内のトレース ファイルをチェックする必要があります。

それまでの間、削除するレコードが 415 件しかない場合は、単純な SQL を使用する必要があります。

DELETE FROM cust_table
WHERE cust_num in (SELECT cus_num           
                   FROM dob.cust_table 
                   GROUP BY cust_num HAVING COUNT(*)>1);  
于 2012-09-05T10:01:22.293 に答える