1 日志:
1.1 Alert日志
Tue May 22 10:04:14 2012
Errors in file /data/oracle9/admin/DEVDB/bdump/jdb01_smon_29221.trc:
ORA-00600: internal error code, arguments: [4137], [], [], [], [], [], [], []
Tue May 22 10:04:15 2012
ORACLE Instance jdb01 (pid = 6) - Error 600 encountered while recovering transaction (16, 29).
Tue May 22 10:04:15 2012
Errors in file /data/oracle9/admin/DEVDB/bdump/jdb01_smon_29221.trc:
ORA-00600: internal error code, arguments: [4137], [], [], [], [], [], [], []
SMON: mark undo segment 16 as needs recovery
Tue May 22 10:07:29 2012
drop rollback segment "_SYSSMU16$"
Tue May 22 10:07:29 2012
ORA-30025 signalled during: drop rollback segment "_SYSSMU16$"...
Tue May 22 10:09:23 2012
SMON: about to recover undo segment 16
Tue May 22 10:09:38 2012
Errors in file /data/oracle9/admin/DEVDB/bdump/jdb01_smon_29221.trc:
ORA-00600: internal error code, arguments: [4137], [], [], [], [], [], [], []
ORACLE Instance jdb01 (pid = 6) - Error 600 encountered while recovering transaction (16, 29).
Tue May 22 10:09:39 2012
Errors in file /data/oracle9/admin/DEVDB/bdump/jdb01_smon_29221.trc:
ORA-00600: internal error code, arguments: [4137], [], [], [], [], [], [], []
SMON: mark undo segment 16 as needs recovery
2 解决过程:
通过SELECT * from dba_rollback_segs或者上述的描述来看_SYSSMU16$有坏块,而且该回滚表空间并发当前数据库使用的回滚表空间,但这个回滚段的status是“NEEDS RECOVERY“,为确保万无一失,先把数据备份出来,然后把这个表空间drop掉。备份在这里不在描述,下面主要是从drop掉这个undo tablespace开始描述。
2.1 删除回滚表空间
SQL> drop tablespace UNDOTBS1 including contents;
drop tablespace UNDOTBS1 including contents
*
ERROR at line 1:
ORA-01548: active rollback segment '_SYSSMU16$' found, terminate dropping
tablespace
不让删除,考虑逐个删除回滚段,
SQL> drop rollback segment "_SYSSMU16$";
drop rollback segment "_SYSSMU16$"
*
ERROR at line 1:
ORA-30025: DROP segment '_SYSSMU16$' (in undo tablespace) not allowed
看来直接drop掉不行,需设置_corrupted_rollback_segments的隐含参数。
2.2 设置_corrupted_rollback_segments
2.2.1 创建init.ora
SQL> create pfile from spfile;
File created.
2.2.2 设置隐含参数
*.timed_statistics=TRUE
*.undo_management='auto'
*.undo_retention=10800
*.undo_tablespace='undo02'
*.use_indirect_data_buffers=true
*._CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU16$)
2.2.3 改用init.ora启动,并删除回滚表空间
SQL> shutdown immediate;
Database dismounted.
ORACLE instance shut down.
SQL> startup mount pfile='/data/oracle9/product/9.2.0/dbs/initjdb01.ora';
ORACLE instance started.
Total System Global Area 3738768904 bytes
Fixed Size 452104 bytes
Variable Size 587202560 bytes
Database Buffers 3145728000 bytes
Redo Buffers 5386240 bytes
Database mounted.
SQL> alter database open;
Database altered.
SQL> drop tablespace UNDOTBS1 including contents and datafiles;
Tablespace dropped.
2.3 重新用spfile启动数据库
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.
Total System Global Area 3738768904 bytes
Fixed Size 452104 bytes
Variable Size 587202560 bytes
Database Buffers 3145728000 bytes
Redo Buffers 5386240 bytes
Database mounted.
2.4 查看警告日志是否正常
Tue May 22 10:18:12 2012
SMON: enabling cache recovery
Tue May 22 10:18:12 2012
Undo Segment 1 Onlined
Undo Segment 2 Onlined
Undo Segment 3 Onlined
Undo Segment 4 Onlined
Undo Segment 5 Onlined
Undo Segment 6 Onlined
Undo Segment 7 Onlined
Undo Segment 8 Onlined
Undo Segment 9 Onlined
Undo Segment 10 Onlined
Successfully onlined Undo Tablespace 98.
Tue May 22 10:18:12 2012
SMON: enabling tx recovery
Tue May 22 10:18:12 2012
Database Characterset is ZHS16GBK
Completed: ALTER DATABASE OPEN