ORA-01555: 快照太旧: 名称为“”的回滚段号太小
当我之后调用过程时,我正在编写提交。
其实我想把一张表的数据复制到一张临时表。 但数据未插入并给出 ORA-01555: 快照太旧: 名称为“”的回滚段编号太小错误。
请给我一个解决方案。
ORA-01555:快照太旧:回滚段编号 9,名称为“SYSSMU 9*
”解决方案:
步骤1)检查undo_retention参数的大小(步骤2)。如果是 900,请执行步骤 3 增加到 3600。
步骤2)
SQL> show parameter undo_retention;
NAME TYPE VALUE
------------------------------------ ----------- ---------
undo_retention integer 900
步骤3)
SQL> ALTER SYSTEM SET UNDO_RETENTION = 3600;
系统已更改。
您还可以将撤消表空间设置为 Autoextend on。
然后再试一次。
将数据从一个表复制到另一个表的最简单方法是创建新表,如下所示:
create table table2 as select * from table1;
通常当 SQL 运行时间过长时,您会收到“ORA-01555:快照太旧:带有名称的回滚段号”。这是因为读取器进行一致性读取所需的回滚记录会被其他写入器覆盖。如果您分享您的代码片段将会很有帮助。
从开始运行到Oracle发生错误需要多长时间?在我见过的情况下,时间可以以小时为单位来衡量,这很好地表明工作应该被分割成块,并在每个块之后进行提交。如果时间很短,您可能会耗尽磁盘空间或 Oracle 实例配置错误。