早上上班后,开发人员反应说查询一个sql语句时,提示如下信息:
ORA-01555 快照号过旧,回退段号26(名称为“_SYSSMU26_1271644566$”)过小的错误。
      刚开始以为是UNDO表空间太小,增加undo数据文件后,还是同样的错误,
      使用这个用户kms做了rollback操作也是同样错误。
因为这个是测试数据库,尝试重新启动数据数据库后,还是报一样的错误。
alert 日志文件记录如下:
Mon Jun 21 09:51:09 2010
Errors in file d:\oracle\diag\rdbms\gztest\gztest\trace\gztest_p000_4220.trc  (incident=57908):
ORA-00600: internal error code, arguments: [4198], [9], [], [], [], [], [], []
Incident details in: d:\oracle\diag\rdbms\gztest\gztest\incident\incdir_57908\gztest_p000_4220_i57908.trc
Mon Jun 21 09:51:10 2010
Trace dumping is performing id=[cdmp_20100621095110]
Mon Jun 21 09:51:15 2010
db_recovery_file_dest_size of 2048 MB is 8.00% used. This is a
user-specified limit on the amount of space that will be used by this
database for recovery-related files, and does not reflect the amount of
space available in the underlying filesystem or ASM diskgroup.
Mon Jun 21 09:51:26 2010
Doing block recovery for file 8 block 249
Block recovery from logseq 8314, block 7858 to scn 1984143087
Recovery of Online Redo Log: Thread 1 Group 1 Seq 8314 Reading mem 0
  Mem# 0: D:\ORACLE\ORADATA\GZTEST\REDO01.LOG
Block recovery completed at rba 8314.7881.16, scn 0.1984143088
Doing block recovery for file 2 block 33719
Block recovery from logseq 8314, block 7901 to scn 1984143108
Recovery of Online Redo Log: Thread 1 Group 1 Seq 8314 Reading mem 0
  Mem# 0: D:\ORACLE\ORADATA\GZTEST\REDO01.LOG
Mon Jun 21 09:51:26 2010
ORA-01555 caused by SQL statement below (SQL ID: 95m1t3u7u198n, Query Duration=18 sec, SCN: 0x0000.76439f32):
Select A.* From DB_TESTRESULTINFO A Where A.f_Branchofficecode=:BranchofficeCode and A.f_Requestid=:RequestID
Block recovery completed at rba 8314.7902.16, scn 0.1984143110
Mon Jun 21 09:51:44 2010
     发帖请教网友后,知道4198错误是个UNDO出了问题了。需要删除这个undo表空间,重新建立新表空间。
新建立undotbs3表空间,删除Undotbs2时,提示如下错误
SQL> drop tablespace undotbs2 including contents and datafiles;
ORA-01548: 已找到活动回退段 '_SYSSMU26_1271644566$', 终止删除表空间
和开发人员提供的错误一样。都是26号回退段出问题了。

通过dba_rollback_segs看到26回退段需要recovery了。
SQL> select segment_name,status,tablespace_name from dba_rollback_segs;
SEGMENT_NAME                   STATUS           TABLESPACE_NAME
------------------------------ ---------------- ------------------------------
SYSTEM                         ONLINE           SYSTEM
_SYSSMU30_1271644566$          OFFLINE          UNDOTBS2
_SYSSMU29_1271644566$          OFFLINE          UNDOTBS2
_SYSSMU28_1271644566$          OFFLINE          UNDOTBS2
_SYSSMU27_1271644566$          OFFLINE          UNDOTBS2
_SYSSMU26_1271644566$          NEEDS RECOVERY   UNDOTBS2
_SYSSMU20_1277087777$          ONLINE           UNDOTBS3
_SYSSMU19_1277087777$          ONLINE           UNDOTBS3
_SYSSMU18_1277087777$          ONLINE           UNDOTBS3
_SYSSMU17_1277087777$          ONLINE           UNDOTBS3
 
ORA-01548错误的解决方法参考这个帖子解决。
http://blog.csdn.net/roland_wg/archive/2010/04/11/5471770.aspx
下面是具体的解决步骤。
1.创建一个pfile文件。
  SQL>  create pfile='d:\oracle\pfilegztest.ora' from spfile;
  文件已创建。
2.修改pfile文件的下面3个内容。
  *.undo_management=manual
  *.undo_tablespace='UNDOTBS3'
  _CORRUPTED_ROLLBACK_SEGMENTS =(_SYSSMU26_1271644566$)  -
  -记录下损坏 的回退段。
3.关闭数据库
   SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
4调用pfile参数启动数据库,
SQL> startup pfile='d:\oracle\pfilegztest.ora';
ORACLE 例程已经启动。
Total System Global Area  945786880 bytes
Fixed Size                  1333956 bytes
Variable Size             469763388 bytes
Database Buffers          469762048 bytes
Redo Buffers                4927488 bytes
数据库装载完毕。
数据库已经打开。
5.删除有问题的undo表空间
SQL> drop tablespace undotbs2 including contents and datafiles;
查看回退段,已经删除了undotbs2的信息了。
SQL> select segment_name,status,tablespace_name from dba_rollback_segs;
 
SEGMENT_NAME                   STATUS           TABLESPACE_NAME
------------------------------ ---------------- ------------------------------
SYSTEM                         ONLINE            SYSTEM
_SYSSMU20_1277087777$          OFFLINE           UNDOTBS3
_SYSSMU19_1277087777$          OFFLINE           UNDOTBS3
_SYSSMU18_1277087777$          OFFLINE           UNDOTBS3
_SYSSMU17_1277087777$          OFFLINE           UNDOTBS3
_SYSSMU16_1277087777$          OFFLINE           UNDOTBS3
_SYSSMU15_1277087777$          OFFLINE           UNDOTBS3
_SYSSMU14_1277087777$          OFFLINE           UNDOTBS3
_SYSSMU13_1277087777$          OFFLINE           UNDOTBS3
_SYSSMU12_1277087777$          OFFLINE           UNDOTBS3
 
SEGMENT_NAME                   STATUS           TABLESPACE_NAME
------------------------------ ---------------- ------------------------------
_SYSSMU11_1277087777$          ONLINE           UNDOTBS3
 

6。关闭数据库,重新正常启动。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area  945786880 bytes
Fixed Size                  1333956 bytes
Variable Size             469763388 bytes
Database Buffers          469762048 bytes
Redo Buffers                4927488 bytes
数据库装载完毕。
数据库已经打开。