ORA-12801: 并行查询服务器 P004 和 ORA-01555 中发出错误信号:快照太旧

ORA-12801: error signaled in parallel query server P004 and ORA-01555: snapshot too old

我正在执行 insert into ... select ... from ... where ... SQL 并使用 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 and http://www.dba-oracle.com/t_ora_01555_snapshot_old.htm

ORA-12801是因为没有足够的处理器来支持并行查询。 ORA-01555 错误与还原存储不足或 undo_retention 参数的值太小有关。

但是如何检查相关参数才能避免此类问题再次发生?

来自the manual

ORA-12801: error signaled in parallel query server string

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.

这是一条一般性错误消息,几乎与处理器不足无关。这是您链接到的网站经常包含大量错误或过时信息的示例。也许 17 进程在 17 年前是 "a lot",但现在不是了。不幸的是,该站点通常是 Google.

的第一个结果

您可以检查 UNDO 保留,这是以秒为单位的时间量,如下所示:

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

可用于 UNDO tablespace 的 space 数量也相关:

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

请再次参阅 the manual 了解有关参数的更多信息。