1. ホーム
  2. sql

[解決済み] ORA-12801: 並列クエリサーバー P004 および ORA-01555 でシグナルされたエラー: スナップショットが古すぎる。

2022-01-28 16:47:01

質問

を実行しています。 insert into ... select ... from ... where ... を使用した場合、以下のエラーが発生しました。 Oracle :

java.sql.SQLException: ORA-12801: error signaled in parallel query server P004
ORA-01555: snapshot too old: rollback segment number 32 with name "_SYSSMU32_2039035886$" too small

以下のドキュメントを読みました。 http://www.dba-oracle.com/t_ora_12801_parallel_query.htm http://www.dba-oracle.com/t_ora_01555_snapshot_old.htm

発言 ORA-12801 は、並列クエリをサポートするのに十分なプロセッサがないために発生します。 ORA-01555 エラーは、取り消しストレージの不足、または undo_retention パラメータの小さすぎる値に関連するものです。

しかし、このような問題が再発しないようにするには、どのように関連するパラメータをチェックすればよいのでしょうか?

解決方法は?

から マニュアル :

ORA-12801です。 並列クエリサーバー文字列でエラーが発生しました

原因 並列クエリサーバーが例外条件に到達しました。

アクション 以下のエラーメッセージで原因を確認し、エラーマニュアルを参照して、適切な対処をお願いします。

これは一般的なエラーメッセージであり、プロセッサの数が足りないとはほとんど関係がありません。 これは、あなたがリンクしたサイトには、しばしば悪い情報や古い情報がたくさん含まれていることの一例です。 17年前は17プロセスがたくさんあったかもしれませんが、今は違います。 残念ながら、そのサイトはGoogleの最初の結果であることが多いのです。


UNDO保持時間というのは、このように秒単位で確認することができます。

select value from v$parameter where name = 'undo_retention'

UNDOテーブルスペースの空き容量も関係します。

select round(sum(maxbytes)/1024/1024/1024) gb
from dba_data_files
where tablespace_name like '%UNDO%';

もう一度、以下をご覧ください。 マニュアル は、このパラメータに関する詳細な情報を提供します。