ORA-12801:在并行查询服务器P004和ORA-01555中指示错误:快照太旧

cod*_*erz 3 sql oracle oracle10g oracle11g

我正在执行一个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
Run Code Online (Sandbox Code Playgroud)

我阅读了以下文档:http : //www.dba-oracle.com/t_ora_12801_parallel_query.htmhttp://www.dba-oracle.com/t_ora_01555_snapshot_old.htm

ORA-12801之所以这么说,是因为处理器数量不足,无法支持并行查询。ORA-01555错误与撤消存储不足或undo_retention参数的值太小有关。

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

Jon*_*ler 6

手册

ORA-12801:并行查询服务器字符串中指示错误

原因:并行查询服务器达到异常条件。

行动:检查以下错误消息的原因,并参考您的错误手册以采取适当的措施。

这是一条一般性错误消息,几乎与没有足够的处理器无关。这是一个示例,说明您链接到的网站通常包含许多不良或过时的信息。也许17年前的过程“很多”,但今天不是。不幸的是,该网站通常是Google的第一个结果。


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

select value from v$parameter where name = 'undo_retention'
Run Code Online (Sandbox Code Playgroud)

UNDO表空间的可用空间量也很重要:

select round(sum(maxbytes)/1024/1024/1024) gb
from dba_data_files
where tablespace_name like '%UNDO%';
Run Code Online (Sandbox Code Playgroud)

再一次,请参阅手册以获取有关该参数的更多信息。