一、现象

将数据迁移到新库时,执行较大的存过,会报这个错误。

ORA-01555快照过旧报错

二、原因

产生该报错的原因:

(1)sql执行比较久,需要优化sql

(2)回滚段过小

(3)undo保存时间过短

三、具体检查及恢复

1、查看sql的执行计划,看看是否可以优化。因为我这边出现这个现象是数据库迁移后发生的,老库可以执行成功,新库不能,比较这种现象比较多,故先不进行具体的sql优化,先检查另外两个原因。

2、检查回滚段大小:

SELECT UPPER(F.TABLESPACE_NAME) "表空间名",
       (D.TOT_GROOTTE_MB/1024) "表空间大小(G)",
       ((D.TOT_GROOTTE_MB - F.TOTAL_BYTES)/1024) "已使用空间(G)",
       TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100, 2),'990.99') "使用比",
       (F.TOTAL_BYTES/1024) "空闲空间(G)",
       (F.MAX_BYTES/1024) "最大块(G)"
  FROM (SELECT TABLESPACE_NAME,
               ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
               ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
          FROM SYS.DBA_FREE_SPACE
         GROUP BY TABLESPACE_NAME) F,
       (SELECT DD.TABLESPACE_NAME,
               ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
          FROM SYS.DBA_DATA_FILES DD
         GROUP BY DD.TABLESPACE_NAME) D
 WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
 and f.TABLESPACE_NAME like 'UNDO%'
 ORDER BY 4 DESC;
View Code

相关文章: